是否有任何硬件 HSM 可以在强化的安全边界内使用 HSM 处理器托管/运行自定义应用程序?

信息安全 密码学 公钥基础设施 硬件 hsm
2021-09-07 18:27:12

似乎大多数商用硬件 HSM旨在允许经过身份验证的用户生成、存储和使用加密密钥,并在 HSM 的固件中实现了各种加密算法。

阅读数据表,我似乎可以使用提供的 API 使我的(外部)应用程序与 HSM 交互并使用其加密功能,可能使用在 HSM 中生成/存储的密钥。但是,似乎无法在 HSM 边界内长期存储由 HSM 加密处理的数据/对象。

为什么没有任何 HSM 允许用户代码和用户数据在 HSM 的物理保护内存空间中持久存储和管理?

有没有人有使用 HSM 的经验,并且可以向我指出一种商业上可用的硬件 HSM 解决方案,该解决方案至少允许我在加密密钥之外存储一些寄存器?

理想情况下,我希望我的应用程序静态存储在 HSM 边界中,由运行 HSM 提供的加密的同一处理器执行,并在 HSM 的保护区内持久存储一些寄存器。

4个回答

Thales nShield HSM (以前的nCipher)允许进行通用编程。这是一个相当昂贵的选择;它必须首先在 HSM 中启用(通过由 Thales 签名并特定于 HSM 序列号的“功能文件”),然后只要使用已知的密钥签名额外代码就可以运行HSM 用于此类用途。

使用该选项,您将获得一个带有精简 C 库的 C 编译器,以及一些可以访问 HSM 功能的 API。内部操作系统允许一个进程(但多线程)和加密操作通过事务完成;还有与外部世界(主机 PC)交换任意二进制 blob 的事务。核心 CPU 不是很强大(想想 60 MHz ARM 或 PowerPC),但有一些可观的 RAM(兆字节,甚至几十兆字节)。

Thales/nCipher HSM 没有很多永久存储功能(有几千字节的 EEPROM,但仅此而已)。实际上,HSM 仅存储一个主密钥(您无法访问),并且所有内容,包括“在 HSM”中的“密钥”都被卸载,并进行了加密。您也可以这样做:将您的数据存储在主机上,发送回您的内部模块;数据使用其中一个密钥(实际上是“在 HSM 中”)加密,并且您在 HSM 中的代码进行解密。

Utimaco/Sophos HSM有大量的 FLASH 用于内部存储密钥,您可以通过(例如)PKCS#11 接口对其进行管理

如果您想开发自己的加密算法或安全协议,也可以使用SDKCPU 有点奇特(Texas Instruments DSP),但它完全可以用 C 语言编程,并带有一个模拟器。代码加载简单且经过深思熟虑,具有适当的身份验证和可能的代码加密。

加分点:某些模型部分支持 FIPS 140-2 第 4 级(即,在物理攻击的情况下对根秘密进行主动归零),如果那种东西让你的船漂浮。当然,请记住,如果您开发自己的固件,则 FIPS 认证不再有效。

SafeNet HSM允许将自定义代码加载到模块中。根据要求,有不同的选项可用。

大多数 HSM 允许使用自定义代码,但通常你必须询问特定的供应商,这不是他们宣传的东西。通常它会破坏认证。另一方面,运行可以验证输入的应用程序可以提供更安全的体验。通常,这些应用程序是沙盒的,需要签名。当然,如果您是一个足够大的客户,也可以谈论供应商本身的定制。

您应该期待供应商特定的 API 和奇怪的架构。

SafeNet 有一个基于 Java 的 HSM,专门针对在 HSM 上运行的签名应用程序的开发,但我知道它已经停产(它太贵了,我什至没有注意到它)。