我希望可以从一些有信誉的来源获得最佳实践。缺乏这一点,我将其发布为建议,并欢迎对此提出任何意见。
嵌入式设备中安全密钥存储的方法取决于威胁场景。
威胁场景 1:
远程攻击和物理攻击。
威胁场景2:
只有远程攻击。
------------
两种情况下的最佳解决方案
- 具有内置加密处理器和安全密钥存储的单芯片 MCU,例如 PUF-RAM 或只能由专用加密处理器访问的防篡改只写闪存。
- 从片外加载的任何固件都必须经过签名。
- 理想情况下没有外部 RAM。
- 使用 MPU 将加密功能的访问限制在固件的特权部分。
- 如果需要防御物理攻击,请熔断 JTAG 调试保险丝
次优解决方案,仅方案 1
- 单片机,外接安全芯片。
- 与外部安全芯片的所有通信都使用设备专用密钥进行加密。
- 从片外加载的任何固件都必须经过签名。
- 理想情况下没有外部 RAM。
- 使用 MPU 将加密功能的访问限制在固件的特权部分。
- 与外部安全芯片进行加密通信的密钥存储在片上闪存中。
- 熔断 JTAG 调试保险丝。
缺点:实现最复杂,实现中的任何错误都可能危及安全性。由于额外的加密,性能可能会受到影响。
次优解决方案,仅方案 2
- 单片机,外接安全芯片。
- 任何远程加载的固件都必须经过签名。
- 使用 MPU 将加密功能的访问限制在固件的特权部分。
- 无需禁用 JTAG。大大简化了维护工作。
缺点:没有针对物理访问的防御。外部安全芯片的未加密接口对物理攻击敞开大门
第三好的解决方案,两种场景
- 单片机。
- 从片外加载的所有固件都必须经过签名。
- 使用 MPU 将加密功能的访问限制在固件的特权部分。
- 私钥存储在片上闪存中。
- 如果需要防御物理攻击,请熔断 JTAG 调试保险丝。
- 如果需要防御物理攻击,理想情况下不需要外部 RAM。
缺点:成功的攻击会产生明文密钥,而不是间接访问密钥。
优点:随着安全标准的发展,能够通过固件更新添加对新加密算法的支持。
------------
解释
抵御远程攻击的两道防线
在上述所有四种解决方案中,针对远程攻击的两条防线都是相同的。
- 无错误的单片主固件。仅当固件中存在错误时,才有可能进行远程攻击。
- 主固件的无漏洞特权部分。即使固件的主要部分由于错误而受到损害,MPU 也会为固件的特权部分和私钥提供部分第二层保护。
无论硬件解决方案如何,这都是您必须关注的安全重点。
外部安全芯片
具有内置安全密钥存储和加密处理器的专用设备,能够执行所有必需的 ECC、RSA 和 AES 功能。通常使用 I2C 或 SPI 连接到您的 MCU
不能说这些确实增加了针对攻击的任何额外防线。更好的描述是说它们改变了成功攻击的结果。如果没有安全芯片,成功的攻击会产生明文密钥。使用安全芯片,成功的攻击会产生间接访问以使用密钥。后者是一个破坏性较小的结果。
但是问问有线电视行业他们对这种保护的看法。通过通过互联网间接访问密钥,间接访问密钥足以应对广泛的有线电视盗版。
安全芯片也有一个明显的缺点:它们暴露了一个易于访问的硬件接口来使用密钥,实际上使物理攻击变得非常容易。例外的是支持与 MCU 进行加密通信的外部安全芯片,即使通过该加密接口也不允许读取私钥。但这会在 MCU 中产生一个新的密钥存储问题。
MCU 内部硬件加密处理器和受保护的密钥存储
提供与外部安全芯片相同的优势,但没有物理攻击弱点或性能问题。
物理攻击向量及其防御
从最简单到最难的攻击向量排名。
- 外部安全芯片的串行接口。
- 请改用 MCU 内部加密处理器和密钥存储。
- 使用带有加密接口和设备唯一加密密钥的外部安全芯片。
- 不使用安全芯片,直接将私钥存储在 MCU 内部闪存中。
- JTAG 调试接口。
- 外部引导闪存。
- 外部 RAM。
- 硅探测。