eFuse基于一个简单概念,即通过测量已知电阻器上的电压来检测电流,然后在电流超过设计限值时,通过场效应晶体管 (FET) 切断电流。eFuse具有热保险丝无法实现特性、灵活性和功能。eFuse在电路系统和芯片级的应用是不一样的,电路系统级就是传统意义上的保险丝的作用,今天我们来聊聊芯片级的eFuse。 eFuse(electronic fuse):电子保险丝,熔丝性的一种器件,属于一次性可编程存储器。之所以成为eFuse,因为其原理像电子保险丝一样,CPU出厂后,这片eFuse空间内所有比特全为“1”,如果向一位比特写入“0”,那么就彻底烧死这个比特了,再也无法改变它的值,也就是再也回不去“1”了。一般OEM从CPU厂商购买芯片后,一般都要烧写eFuse,用于标识自己公司的版本信息,运行模式等相关信息。同时,由于其一次性编程的特性,我们又将其用在Secure Boot安全启动中。 2.OTP是什么 了解完eFuse后,我们就顺便了解一下OTP。首先我们了解一下NVM的概念,再来引出OTP。 NVM: Non-Volatile Memory,非易失性存储器。 NVM 的特点是存储的数据不会因为电源关闭而消失,像 Mask ROM、PROM、EPROM、EEPROM、NAND / NOR 闪存 (Flash Memory) 等传统 NVM,以及,目前许多正在研发的新型态存储器,如磁性存储器 (MRAM)、 阻变存储器 (RRAM)、相变存储器 (PRAM)、 铁电存储器 (FeRAM) 等等都属于 NVM。所以NVM的概念很大。 MTP: Multiple-Time Programmable,可以多次编程 FTP: Few-Time Programmable,可编程的次数有限 OTP: One-Time Programmable,只允许编程一次,一旦被编程,数据永久有效 可见,OTP(One Time Programmable)指的是可编程的次数,并不特指某一种存储器。 3.OTP存储器的分类 现在SOC中使用的OTP通常有两种——eFuse and AntiFuse 。 fuse是保险丝、 熔丝的 意思,在 计算机技术中 ,eFuse(electric-fuse,电子保险丝)是置于计算机芯片中的微观保险丝。该技术是IBM在2004年发明的,可以对芯片进行动态实时重新编程。概括地说,计算机逻辑通常被“ 蚀刻” 或“硬连线”("etched" or "hard-wired")到芯片上,在 芯片制造完 成后不能更改,但使用eFuse,芯片制造商可以在芯片上的电路 运行时进 行更改。 eFuse可以用硅或金属制成,它们都是通过 电迁移来 工作的,即电流导致导体材料移动的现象。随着 时间的流逝, 编程期间产生的“熔丝碎屑”会反向生长,导致金属线断开的相同电迁移也会导致金属线无意中再次连接,从而改变原本要存储的数据,导致了错误的行为。这个特性限制了eFuse 的可读次数。 Anti-Fuse(反熔丝)是一种电气装置,其功能与保险丝相反。保险丝从低电阻开始,默认是导通状态,当灌以较大的电流时切断电路。而反熔丝从 高电阻开 始,默认是不导通状态,当灌以较大的电压时,可将其转换为永久性导电路径。 3.1 efuse 和 anti-Fuse 的区别
Antifuse 跟eFuse 的最大差别在功耗、安全性、编程机制:
1)从 器件面积上讲,eFuse 的 cel l 的面积更大,所以仅仅有小容量的器件可以考虑。 当然如果需要大容量的,也可以多个 eFuse Macro 拼接,但是这意味着芯片面积的增加,成本也会增加; anti-Fuse的 cell 面积很小,所有相对来讲,可以提供更大容量的 Macro 可供使用。
2)功耗,与eFuse 相比,Antifuse 在未编程状态下消耗的功耗更少。 未编程eFuse 的典型电阻值约为50到100欧姆,而编程的eFuse 的典型电阻值约为10Kohms 到100Kohms, Antifuse 的阻值正好相反,在未编程状态下电阻较高,在编程状态下电阻较低。 不论是eFuse 还是Antifuse 未编程位的默认值都是“0”, 使用时只需要将少数的对应比特编程为"1", 而在eFuse 中存储的“0” 越多功耗就越大,在Antifuse 中存储的“0” 越多,功耗就越小; 此外,eFuse 的静态功耗要比Antifuse 高得多。
3)安全性,Antifuse 比eFuse 的安全性更好,在显微镜下也无法区别编程位和未编程位,因此无法读取编程数据。 在多晶硅栅CMOS 工艺中,多晶硅eFuse 应用广泛,EM 发生在硅化物层。 然而在MOSFET 工艺中,用high-k 材料做金属栅极( HKMG ), 没有多晶硅层可用作eFuse, 因此改用金属层作eFuse。 不论哪种eFuse 在显微镜下都可以区别出编程位和未编程位,而Antifuse 不仅在显微镜下无法窥探到编程信息,通过FIB 也检测不到电压热点,这使得未经授权的用户很难获得存储在Antifuse内存中的数据。
4)编程机制: Antifuse, 在薄栅氧上施加高电压,通过 雪崩击穿使 晶体管的栅极和源极短路来编程。eFuse, 通过使用I/O 电压,向金属条或多晶硅条施加高密度电流来编程,eFuse 中的低电阻金属由于高密度电流通过窄金属或多晶硅而被电迁移熔断,在编程期间,eFuse 的两端宽大比中间较窄区域有更好的冷却效果,因此,eFuse 的熔断部分始终位于eFuse 中间的窄区域;此外,编程一比特,需要一对eFuse, 一个用于编程,另一个用做 差分放大器读 取参考电阻;eFuse 只能被编程一次,将对应比特的值编程为"1", 如果编程后读取的值不为"1", 则编程失败,这意味着良率下降。而Antifuse 可以被编程18次左右,如果初次编程失败,则可以反复对其编程,有助于良率提升。 3.2 存储原理和寿命 efuse存储原理是将 金属线熔 断形成小孔,因此 数据存储是 不可逆的,且内存容量比较小,通常在512位以下; anti-Fuse则是使用快速 电子束技 术在晶体管栅极中制造永久的浮动门,其数据存储是可逆的,实现较大的存储容量,通常在数MB以上; 4. efuse和 anti-Fuse 在 芯片设计 中的应用 由于efuse和 anti-Fuse 的特点和优势不同,因此在芯片设计中它们的应用也有所不同。 (1) 设备 标识符和 唯一序列号: efuse可以用来存储芯片的设备ID和唯一序列号,这可以使设备具有唯一性,方便统计和识别。 (2) 版权保护: efuse可以存储版权保护密钥,以保护代码和文档的安全性。 (3) 提高安全性:efuse可以用来存储 安全密钥、 密码等关键信息,以提高芯片的安全性,避免被 黑客攻击。 (1) 生产流水线:通过在 anti-Fuse OTP中存储 产品序列号、 生产日期等 信息,可以帮助生产商跟踪产品的生产、质量和归属情况。 (2) 启动代码: 通过将启动代码存储在 anti-Fuse OTP中,可以保证代码的安全性和完整性,防止被攻击或篡改。 (3) 加密密钥: anti-Fuse OTP可以用于 存储加密密 钥等关键信息,以提高 设备的安全性。 5. 什么是Secure Boot 上面我们也了解过了,efuse主要用于记录一些OEM的产品信息,并且也会用于安全启动,那么安全启动是什么,为什么要做安全启动? 安全启动Secure Boot,其主要目的是:以限制消费者能力,防止消费者从软硬件层面,对产品的部分关键系统进行读写,调试等高级权限,达到对产品的商业保密, 知识产权的 保护。
安全启动的安全模型是建立在消费者是攻击者的假设之上,一般常见的操作有:
绕过系统保护,复制厂家保护的 数字产品
除此之外呢,有的比较专业的消费者,还可以:
使用 数字示波器监 听 CPU 和 RAM 、eMMC 之间的数据传输来读取非常底层的数据传输,而且像 eMMC 这种芯片通常都是业界标准化的,攻击者甚至可以把芯片拆下来,然后用市面上现成的通用 eMMC 编程工具来读写上面的内容。安全启动等级也有一个上限:这个上限通常是认为攻击者不至于能够剥离芯片的封装,然后用电子显微镜等纳米级别精度的显像设备来逆向芯片的内部结构。 简单来说:能成功攻破芯片安全机制的一次性投资成本至少需要在十万美元以上才可以认为是安全的。 6. CPU内部安全机制 6.1 bootROM BootROM是集成在CPU芯片的一个ROM空间,其主要用于存放一小段 可执行程序, 出厂的时候被烧录进去写死,不可修改。 CPU在通电之后,执行的第一条程序就在BootROM,用于初始化Secure Boot安全机制,加载Secure Boot Key密钥,从存储介质中加载并验证 First Stage Bootloader(FSBL);最后跳转进 FSBL 中。 6.2 iRAM 为了避免使用外部的RAM,支持Secure Boot的CPU都会内置一块很小的RAM,通常只有 16KB 到 64KB ,我们称之为 iRAM。 这块 iRAM 上的空间非常宝贵,bootROM 一般会用 4KB 的 iRAM 作为它的 堆栈。 FSBL 也会被直接加载到 iRAM 上执行。 6.3 eFUSE 如上面所述,在Secure Boot中存放的是根 密钥, 用于安全启动的验证。 一般有两种根密钥:一个是加密解密用的 对称密钥S ecure Boot Key,一般是 AES 128 的,每台设备都是随机生成不一样的;另一个是一个 Secure Boot Signing Key 公钥, 一般用的 RSA 或 ECC,这个是每个 OEM 自己生成的,每台设备用的都一样,有些芯片会存公钥的 Hash 来减少 eFUSE 的空间使用。 6.4 Security Engine 有些 CPU 中还会有一个专门负责加密解密的模块,我们称为 Security Engine。这个模块通常会有若干个密钥槽(Keyslots),可以通过 寄存器将 密钥加载到任意一个 Keyslot 当中,通过寄存器操作 DMA 读写,可以使用 Keyslot 中的密钥对数据进行加密、解密、签名、HMAC、 随机数生成等 操作。 6.5 First Stage Bootloader(FSBL) FSBL 的作用是初始化 PCB 板上的其他硬件设备,给外部 RAM 映射内存空间,从外部存储介质中加载验证并执行接下来的启动程序。 6.6 根信任建立 CPU上电后执行Boot ROM的程序,其这一小段程序用于初始化RAM,并加载Efuse上的内容,判断其所处的运行模式是不是生产模式。 如果在生产模式,开启Secure Boot功能,把Efuse上保存的Secure Boot Key加载到Security Engine加密模块中处理。从外部存储介质中加载FSBL,FSBL里面会有一个 数字签名和 公钥证书, bootROM 会验证这个签名的合法性,以及 根证书的 Hash 是否和 eFUSE 中的 Signing Key 的 Hash 相同。 如果验证通过,说明 FSBL 的的确确是 OEM 正式发布的,没有受到过篡改。然后bootROM 就会跳转到 FSBL 执行接下来的启动程序。 作者:Leon.Go
链接:https://www.zhihu.com/question/585381096/answer/3264444563
*免责声明:文章来源于知乎,版权归原作者所有 。如有侵权,请联系路科验证删稿。文章内容系作者个人观点,路科验证转载仅为了传达一种不同的观点,不代表路科验证对该观点赞同或支持,欢迎评论区留言交流。