使用 Arduino 设计我自己的 HSM

信息安全 AES hsm
2021-08-26 20:00:46

我正在尝试从头开始构建类似于 Apple 的Secure Enclave的东西。

我所做的是使用 Arduino 的 AES 库来创建安全设备。随机密钥和代码存储在芯片上并锁定(不可读)。仅通过 USB 串行端口提供服务。有一些命令,如set_saltset_IVencryptdecrypt一切正常,只是速度很慢 - 但是,您对 Arduino 有什么期望?

为了使它有用,我打算用它来加密存储在计算机/手机上的一个单独的 AES 密钥,这个密钥用于加密应用程序数据。我的问题是。由于应用程序数据没有被 Arduino 直接加密,这是否会有安全风险?我确实了解用于加密应用程序数据的密钥可能会通过内存转储暴露,但应用程序程序员可以将这种风险降至最低。我也明白 Arduino 和应用程序之间的通信也需要加密。但是除了这两个之外,还有其他可能暴露密钥风险的漏洞吗?

2个回答

首先,Apple 的 Secure Enclave 是一个确保引导加载程序仅运行由 Apple 签名的代码的模块。那不是您正在做的事情,您正在尝试构建硬件安全模块 (HSM)

正如您所知道的,正确的方法是让 HSM 在内部执行所有加密操作,以便没有密钥离开设备 - 正如您所指出的,如果您将加密/解密密钥交给设备,那么它就是现在超出​​你的控制。因此,理想情况下,您需要一个足够快的处理器来进行板载加密处理。

也就是说,将加密的 AES 密钥存储在数据旁边的设备上,并依靠 HSM 为您解密,这正是 Android 全盘加密的工作原理(我认为)。我建议您阅读有关全盘加密的 Android 开发页面,为您提供建议。


我将扩展此答案以提供更广泛的背景。

这个问题足够深,我们应该问你的“威胁模型”是什么(即“你试图防御什么样的攻击?”)。正如@JeffMeden 和@supercat 在评论中指出的那样,您真正需要的安全级别取决于您要保护的内容以及您希望如何保护它。

您提到要保护 AES 密钥免受内存转储的影响。AES 密钥很有价值,但不是因为密钥本身很有价值,而是因为它所保护的信息很有价值。你说:

我确实了解用于加密应用程序数据的密钥可能会通过内存转储暴露,

这是一件值得考虑的好事情,但如果数据本身可能通过内存转储暴露出来,那么它几乎无关紧要。但正如你所说,

但应用程序程序员可以将这种风险降到最低。

无论您的 HSM 是在解密 AES 密钥,还是直接解密数据,一旦您将其交还给某个用户程序,您就无法再对其保护进行任何控制。

底线:如果您的威胁模型包括在 PC 上处理解密数据,同时还保护所述数据免受强大到足以进行内存转储的人的攻击,那么您的 USB 外围设备将无能为力;您还需要编写在 PC 上运行的软件。

如果你开始沿着这条线走,你最终会发明一个受信任的执行环境,在这个环境中,明文数据的所有处理实际上都发生在一个安全的处理器中,只有结果被交还给“不受信任的”PC。

这里的另一个大问题是这样的设备不耐火。任何对设备有物理访问权限的人都可以绕过您的代码并直接读取任何秘密。

坚定的黑客也可以尝试重新编程设备(如果您保持功能打开)并达到与上述相同的目的。

我想知道重新发明轮子而不是使用现有的 TPM、智能卡或 HVM 解决方案有什么价值?