用于嵌入式系统的 TLS 私钥存储。有没有最佳实践?

信息安全 tls 密钥管理 hsm 嵌入式系统
2021-09-03 12:35:23

我正在寻找有关小型单芯片嵌入式系统(例如 Cortex-M MCU)的 TLS 私钥存储的最佳实践,其中单片固件存储在内部闪存中。大多数建议似乎都非常以 PC 为中心,在大多数情况下,这些以 PC 为中心的建议甚至不关心防止物理访问。我猜很多人认为 PC 被锁在某个服务器机房中,但这种假设不适用于嵌入式设备。

此外,用户密码输入不是嵌入式系统的选项,因为它必须在没有用户交互的情况下工作。

到目前为止,我已经确定了两种基本方法:

  1. 将私钥存储在外部安全芯片中。这基本上可以保护私钥免受明文访问。但据我所知,通过访问安全芯片来阻止攻击者使用私钥绝对没有任何作用。要么通过 MCU 固件中的某些漏洞利用,要么通过对安全芯片的物理访问。

  2. 将密钥存储在 MCU 的内部闪存中,并熔断保险丝以禁用外部调试接口。设置 Cortex-M 的 MPU,以便只有 MCU 固件的特权部分可以访问存储密钥的内存区域。这似乎可以很好地防止物理访问,但固件特权部分的利用可能会导致对密钥的明文访问。

对我来说,这两种方法中的任何一种都比另一种更好并不明显。还有其他方法吗?是否有针对此类嵌入式系统的推荐最佳实践?最好对不同的方法及其优缺点进行排名。

1个回答

我希望可以从一些有信誉的来源获得最佳实践。缺乏这一点,我将其发布为建议,并欢迎对此提出任何意见。

嵌入式设备中安全密钥存储的方法取决于威胁场景。

威胁场景 1: 远程攻击和物理攻击。

威胁场景2: 只有远程攻击。

------------

两种情况下的最佳解决方案

  • 具有内置加密处理器和安全密钥存储的单芯片 MCU,例如 PUF-RAM 或只能由专用加密处理器访问的防篡改只写闪存。
  • 从片外加载的任何固件都必须经过签名。
  • 理想情况下没有外部 RAM。
  • 使用 MPU 将加密功能的访问限制在固件的特权部分。
  • 如果需要防御物理攻击,请熔断 JTAG 调试保险丝

次优解决方案,仅方案 1

  • 单片机,外接安全芯片。
  • 与外部安全芯片的所有通信都使用设备专用密钥进行加密。
  • 从片外加载的任何固件都必须经过签名。
  • 理想情况下没有外部 RAM。
  • 使用 MPU 将加密功能的访问限制在固件的特权部分。
  • 与外部安全芯片进行加密通信的密钥存储在片上闪存中。
  • 熔断 JTAG 调试保险丝。

缺点:实现最复杂,实现中的任何错误都可能危及安全性。由于额外的加密,性能可能会受到影响。

次优解决方案,仅方案 2

  • 单片机,外接安全芯片。
  • 任何远程加载的固件都必须经过签名。
  • 使用 MPU 将加密功能的访问限制在固件的特权部分。
  • 无需禁用 JTAG。大大简化了维护工作。

缺点:没有针对物理访问的防御。外部安全芯片的未加密接口对物理攻击敞开大门

第三好的解决方案,两种场景

  • 单片机。
  • 从片外加载的所有固件都必须经过签名。
  • 使用 MPU 将加密功能的访问限制在固件的特权部分。
  • 私钥存储在片上闪存中。
  • 如果需要防御物理攻击,请熔断 JTAG 调试保险丝。
  • 如果需要防御物理攻击,理想情况下不需要外部 RAM。

缺点:成功的攻击会产生明文密钥,而不是间接访问密钥。

优点:随着安全标准的发展,能够通过固件更新添加对新加密算法的支持。

------------

解释

抵御远程攻击的两道防线

在上述所有四种解决方案中,针对远程攻击的两条防线都是相同的。

  1. 无错误的单片主固件。仅当固件中存在错误时,才有可能进行远程攻击。
  2. 主固件的无漏洞特权部分。即使固件的主要部分由于错误而受到损害,MPU 也会为固件的特权部分和私钥提供部分第二层保护。

无论硬件解决方案如何,这都是您必须关注的安全重点。

外部安全芯片

具有内置安全密钥存储和加密处理器的专用设备,能够执行所有必需的 ECC、RSA 和 AES 功能。通常使用 I2C 或 SPI 连接到您的 MCU

不能说这些确实增加了针对攻击的任何额外防线。更好的描述是说它们改变了成功攻击的结果。如果没有安全芯片,成功的攻击会产生明文密钥。使用安全芯片,成功的攻击会产生间接访问以使用密钥。后者是一个破坏性较小的结果。

但是问问有线电视行业他们对这种保护的看法。通过通过互联网间接访问密钥,间接访问密钥足以应对广泛的有线电视盗版。

安全芯片也有一个明显的缺点:它们暴露了一个易于访问的硬件接口来使用密钥,实际上使物理攻击变得非常容易。例外的是支持与 MCU 进行加密通信的外部安全芯片,即使通过该加密接口也不允许读取私钥。但这会在 MCU 中产生一个新的密钥存储问题。

MCU 内部硬件加密处理器和受保护的密钥存储

提供与外部安全芯片相同的优势,但没有物理攻击弱点或性能问题。

物理攻击向量及其防御

从最简单到最难的攻击向量排名。

  1. 外部安全芯片的串行接口。
    • 请改用 MCU 内部加密处理器和密钥存储。
    • 使用带有加密接口和设备唯一加密密钥的外部安全芯片。
    • 不使用安全芯片,直接将私钥存储在 MCU 内部闪存中。
  2. JTAG 调试接口。
    • 熔断 JTAG 保险丝。
  3. 外部引导闪存。
    • 验证加载固件的签名或哈希。
  4. 外部 RAM。
    • 仅使用内部 RAM。
  5. 硅探测。
    • 防篡改硬件。
    • PUF-RAM。