一、一次性可编程存储器(OTP):芯片的第一道防线

大家好,我是你们的嵌入式安全讲师。今天我们来聊聊OTP——一次性可编程存储器。这玩意儿,说白了就是芯片出厂后只能写一次、不能擦除的存储单元。你想想看,如果攻击者能随意修改芯片的密钥或配置,那整个安全体系就形同虚设了。OTP就是用来锁死这些关键信息的。

1.1 OTP原理与类型

OTP的原理其实不复杂。每个存储单元在出厂时都是"0"状态,通过施加高电压或大电流,把某些单元永久性地变成"1"。一旦烧录,就回不去了。就像一张纸,你写错了也不能擦掉重写。

常见的OTP类型有几种:

  • 熔丝型(Fuse):物理上烧断金属丝。我在项目中见过,这种最可靠,但占面积大。
  • 反熔丝型(Anti-fuse):烧穿绝缘层形成导通。三星芯片里用得比较多。
  • 电荷存储型:利用浮栅晶体管存储电荷。成本低,但数据保持力稍差。

关键点:三星Exynos系列芯片主要采用反熔丝型OTP。为什么?因为它在高温下数据保持力好,而且抗物理攻击能力强。我个人习惯在选型时优先考虑反熔丝型,尤其是做车规级芯片时。

1.2 三星芯片中的OTP布局

三星的OTP布局,我画个简化的示意图给你看。实际上,它分布在芯片的不同区域:

区域存储内容大小(典型值)
安全域根密钥、芯片唯一ID256-512 bits
配置域启动模式、电压配置128-256 bits
调试域JTAG锁定、调试权限64-128 bits
用户域厂商自定义数据1-4 Kbits

嗯,这里要注意:安全域的OTP是物理隔离的。我记得有一次调试,发现某个芯片的根密钥被意外读取了,后来查出来是布局时安全域和调试域靠得太近,导致侧信道攻击。从那以后,我建议团队在布局时至少留出20μm的隔离带。

1.3 OTP烧录流程

烧录OTP,不是简单地把数据写进去就完事了。流程上,我一般分三步走:

  1. 预烧录验证:先读一遍OTP的初始状态,确保全是0。我曾经遇到过一批芯片,出厂时就有几个bit是1,直接导致烧录失败。
  2. 烧录操作:施加编程电压(通常是3.3V或5V),按位写入。三星的烧录时序比较严格,脉冲宽度要控制在1-10μs之间。
  3. 回读校验:烧完后立即读回来对比。如果发现不一致,嗯,这块芯片就废了。

避坑指南:我曾经在量产线上发现,烧录器接触不良会导致部分bit烧录不完整。后来我加了一个接触电阻检测步骤,问题就解决了。建议你在烧录前先测一下探针的接触电阻,小于1Ω才算合格。

下面是一个简化的烧录代码示例(伪代码):

// OTP烧录流程示例
int otp_program(uint32_t address, uint64_t data) {
    // 1. 预烧录验证
    if (otp_read(address) != 0x0) {
        return ERROR_OTP_NOT_BLANK;
    }
    
    // 2. 施加编程电压
    otp_set_voltage(OTP_VPP, 3.3);  // 3.3V编程电压
    
    // 3. 按位烧录
    for (int i = 0; i < 64; i++) {
        if (data & (1ULL << i)) {
            otp_program_bit(address, i);
            delay_us(5);  // 5μs脉冲
        }
    }
    
    // 4. 回读校验
    uint64_t readback = otp_read(address);
    if (readback != data) {
        return ERROR_OTP_VERIFY_FAIL;
    }
    
    return SUCCESS;
}

1.4 OTP的安全防护

OTP本身是安全的,但攻击者不会直接攻击存储单元。他们更倾向于攻击烧录接口或读取路径。我总结了几种常见的攻击方式和防护手段:

  • 电压毛刺攻击:在烧录瞬间注入异常电压,导致烧录不完整。防护:加电压检测电路,检测到异常立即终止。
  • 激光切割:用激光切断OTP的读取路径。防护:在OTP上方覆盖金属屏蔽层。
  • 侧信道分析:通过功耗或电磁辐射推断烧录的数据。防护:烧录时加随机延时,打乱时序特征。

重要警告:千万别把OTP的烧录接口暴露在芯片外部!我见过一个设计,把OTP编程引脚直接连到了测试焊盘上,结果攻击者用探针台直接烧录了恶意数据。正确的做法是:烧录接口只在工厂模式下可用,量产完成后永久禁用。

最后,我想强调一点:OTP是信任链的根。如果根被污染了,整个安全体系就崩塌了。所以,我个人建议在OTP烧录完成后,立即锁定烧录接口,并且把锁定位也烧进OTP里。这样,就算攻击者拿到了芯片,也无法再修改任何内容。

好了,这一章就到这里。下一章我们会讲硬件安全模块(HSM),那是比OTP更复杂的东西。有什么问题,欢迎在课后交流。