在硬件安全模块中存储证书和密钥(用例 TLS)

信息安全 tls 验证 证书 公钥基础设施 hsm
2021-09-03 05:42:15

我对公钥加密的一般安全目标及其不同元素感兴趣。

用例概述:
我的用例是一个嵌入式设备,它将使用 TLS 在服务器和客户端(嵌入式设备)之间建立安全通信。此外,TLS 与相互身份验证握手一起使用,这也需要客户端证书。嵌入式设备包含一个硬件安全模块 (HSM),用于高效的加密操作和安全存储。

嵌入式设备中将存在以下元素以启用 TLS 通信:

  1. 来自 CA 的 TLS 根证书(包括其公钥)用于对服务器进行身份验证
  2. 客户端叶证书(包括其公钥)
  3. 客户端叶子证书的私钥

我们可以假设 HSM 的存储空间足够大,可以同时容纳所有元素 1、2 和 3。

我现在的问题是,应该在 HSM 中存储哪些元素?

  1. 根证书:
    无需保密,因为此信息是公开可用的,因为根证书将安装在任何想要参与 PKI 的设备中。
    但是诚信呢?我想如果这样的根证书被篡改(或交换)以稍后允许从访问的恶意网站验证最初不可信的叶证书,则会出现安全问题。将根证书存储在 HSM 中是否有好处,还是仅在软件中不提供任何接口来更改存储在设备正常内存中的证书就足够了?
  2. 客户端证书:
    在我看来,这里我们也不需要保密,因为在相互身份验证 TLS 握手期间将未加密的证书发送到服务器。我们是否应该将整个证书连同其私钥一起放入 HSM?如果证书本身存储在 HSM 中,是否存在可以缓解的攻击场景?
  3. 客户证书的私钥:
    这个我100%确定。私钥需要进入 HSM 以增加安全性。

一句话概括一切:

如果可用,私钥应存储在 HSM 中,但是将证书(包含其公钥)也存储在 HSM 中是否有任何好处?

编辑:
据我了解,此用例中的 HSM 仅为存储私钥提供了安全优势。但是,我在许多情况下阅读了有关在 HSM 中存储证书的信息。我只是不确定,如果这样的陈述是因为草率的措辞,或者实际上将证书存储在 HSM 中是否有任何好处。示例:ABC

2个回答

理解差异的关键是要意识到您并不直接关心密钥的安全属性。它们只是确保您关心的安全属性的工具,这些安全属性来自密钥的使用。

如果您出于间接原因需要对资产保密,那么将其保存在仅允许以特定方式使用资产的高安全区域是有好处的。例如,假设私钥位于 HSM 中,它允许计算机使用此密钥进行签名或解密,但不允许计算机提取密钥的副本。如果计算机被入侵但 HSM 没有被入侵,那么攻击者可以使用密钥,但这些使用将记录在 HSM 日志中,因此您可以获得一些有关入侵后果的信息。此外,如果您重新获得对计算机的控制权,您就知道攻击者无法再使用密钥了;这对于签名密钥通常不太有用(除非 HSM 日志告诉您该密钥尚未使用),但它对于解密密钥很有用。

如果您出于间接原因需要保护资产的完整性,那就另当别论了。再次考虑计算机+HSM 设置,这次使用 HSM 中的公钥或证书。在恢复计算机入侵后,您知道攻击者无法修改 HSM 中的证书副本。这对您并没有真正的帮助,因为您需要从备份中恢复大量数据,包括该证书的副本。虽然攻击者可以访问计算机,但证书是否在 HSM 中并不重要。如果攻击者对此感到困扰,他们只会修改计算机上的代码以不访问 HSM。

使用受信任的地方来存储需要完整性的数据副本很重要,但您不需要 HSM:这就是备份的用途。如果您不能保证操作数据的代码的完整性,那么您不会从更好地保护数据的完整性中获得任何好处。

因此,在您的情况下,您绝对应该将私钥放在 HSM (3) 中。将证书放入 HSM 以进行正常操作(1、2)没有任何好处,但如果您能够以某种方式重新获得对设备的控制权,它可能会帮助您在违规后恢复。仅凭证书是不够的,但它们可能是更大信任根的一部分,其中包括以可信任状态启动设备所需的所有代码。

¹它不应该允许两者使用相同的密钥。

这个问题与安全性几乎没有关系。从安全角度来看,HSM 中的公共证书存储并没有提高安全性,因为公共证书不包含任何敏感信息,并且本身受到数字签名的保护。换句话说,如果 HSM 空间允许,您可以在其中存储公共证书。像存储证书一样思考。

但请记住,它不会增加任何额外的安全性。