调试接口锁定/禁用:
通常作为读保护功能的一部分实现(如 RDP Level 2)。也可以单独配置选项位来永久禁用 SWD/JTAG 接口,只留下其他通信接口(如 UART, USB, I2C, SPI)用于应用功能。
固件加密:
片上加密引擎: 一些高端或注重安全的 ARM MCU 集成了硬件加密引擎(如 AES)。
原理:
开发者将编译好的固件在外部用密钥加密。
将加密后的固件通过正常方式(如 SWD/JTAG 或串口自举)写入 MCU Flash。
在安全存储区域(如 OTP - One-Time Programmable 存储器或专用安全 Flash 区域)写入解密密钥。
MCU 内部 BootROM 或受信任的引导加载程序在启动时,使用硬件引擎和存储的密钥解密固件,然后加载运行。
效果: 即使攻击者物理上读取了 Flash 的内容,得到的也是加密后的密文。没有密钥,无法还原成可用的程序代码。
优点: 提供非常强的保护。
缺点: 需要管理密钥(安全存储和分发),增加了开发复杂性,BootROM 或引导程序本身也需要是安全的。
安全启动:
与固件加密常结合使用。BootROM 或初始引导加载程序会使用公钥验证应用程序固件的数字签名,确保其完整性和来源可信。只有验证通过的固件才会被加载执行。
效果: 防止未经签名或篡改的固件运行。虽然不直接阻止读取 Flash,但它确保即使 Flash 被读出(如果是加密的,读出也无用),攻击者也无法运行自己修改的恶意固件。
物理防护:
虽然不算是 MCU 内部的功能,但对于极高安全需求,可以采用特殊封装(如具有金属屏蔽层的封装、塑封上覆盖光敏材料、封装内埋入传感器网格)来增加物理开盖探查芯片内部 Flash 存储单元的难度和成本。
重要注意事项:
查阅具体型号的文档: 不同厂商、不同系列的 ARM MCU 实现读保护的具体方法、名称、级别和操作步骤差异很大。务必查阅你所使用芯片的官方参考手册和数据手册中的“Security”、“Memory Protection”、“Option Bytes/Configuration Words”、“Debug Access”等章节。
操作风险:
设置读保护(尤其是高级别或永久性保护)务必谨慎。错误操作可能导致芯片被锁死,无法再次编程或调试(除非使用厂商特定的高权限恢复流程,且通常需要擦除整个芯片)。
强烈建议: 在量产前充分测试保护功能。在开发调试阶段保持读保护关闭。
解除保护:
对于可解除的保护(如 RDP Level 1),解除通常意味着执行一次全芯片擦除。这会清空包括用户固件在内的所有 Flash 内容,并将保护级别恢复为默认(Level 0)。
永久性保护(如 RDP Level 2)通常无法通过正常手段解除。
没有绝对安全: 任何保护措施都可以被**,只是成本和时间问题。读保护功能旨在显著提高攻击门槛,保护大多数应用免受普通黑客或竞争对手的轻易复制。
|