使用 HSM 的对称加密密钥
Posted
技术标签:
【中文标题】使用 HSM 的对称加密密钥【英文标题】:Symmetric encryption keys with HSM 【发布时间】:2017-11-20 10:26:12 【问题描述】:我想使用 HSM 加密/解密我将存储在数据库中的敏感数据。 HSM 设备/服务器可以创建对称和非对称密钥。我想以尽可能高的安全性存储数据。所以我有两种方法:
1) 使 HSM 生成一个公钥/私钥对,它会将私钥保存在其中,并且永远不会离开。现在我可以为每个要加密的条目创建一个随机对称密钥。我使用随机 AES 密钥加密数据,使用 HSM 中生成的公钥加密 AES 密钥,并将加密数据的结果 + 加密密钥数据存储在数据库中的每一行中。 现在每次我想访问数据时,我都会将加密的密钥数据发送到 HSM,HSM 会对其进行解密并将解密后的 AES 密钥发回给我,我使用它来实际解密数据。
2) 每行/每项,我让 HSM 生成 AES 密钥并将对称密钥令牌存储在其中。我以明文形式向它发送数据,它以加密形式发回给我。每次我想访问数据时,我都会将加密数据发送到 HSM,它会解密并将其发送回给我。
HSM 服务器将像 Thales 一样专业且快速,因此它可以快速处理流量(希望如此)。
第一个问题是我只需以 SO(安全官)身份登录即可在 HSM 中生成和存储我的公钥/私钥对,从现在开始,我只需以只读用户身份登录。但与 2 号相比,它的过程较慢且冗长。
2 号(据我所知)将要求我始终拥有对设备的访问权限。
你有什么建议?请指教。
【问题讨论】:
如果 HSM 需要访问某些数据,请不要忘记备份 HSM 中的密钥。您没有提及您的 HSM 的品牌,而且我一般不是 HSM 专家,但可以指出 Thales 与 Microsoft Azure 用于实施 Azure Key Vault (AKV) 服务 (azure.microsoft.com/en-us/services/key-vault) 的品牌相同。根据您的技术堆栈,将您的密钥安全地导出到 AKV 实例并将其用于日常操作安全性可能会很方便。您可以在同一个“安全世界”(Azure 维护的 Thales 概念)内管理多个副本。 【参考方案1】:我不确定像这样的安全建议是否最适合这里,但我会给出一些建议,而不是分裂头发。
首先,我更喜欢混合(RSA + AES)加密,因为你不必保护公钥来加密(只要攻击者不能用他们自己的公钥替换它) - 你可能不会需要提供 PIN 码。所以这会给第一个方案带来优势。
为了非常安全,您最好包装 AES 数据密钥,而不是对其进行加密。包装和加密基本上是一回事,但在解包之后,AES 密钥变成了 HSM 静态或 会话密钥,仍然在 HSM 中,您可以使用它进行解密。解密会将其返回到 PC 的不安全内存中。在 PC 上解密可能更快,但在 HSM 上解密更安全,应该是首选。
您通常应该只需要 SO 访问权限来执行管理任务。通常,您应该能够使用用户访问权限创建对象,例如密钥。但最终这些事情取决于 HSM 配置。
【讨论】:
谢谢!我看到了 HSM 密钥包装,但正在使用 SoftHSMv2 进行测试,但没有帮助。我将深入研究密钥包装【参考方案2】:根据安全设置,Thales HSM 只会在设备通过身份验证时创建公钥/私钥对。这意味着您可能无法根据需要创建它们。
我使用的一种技术是预先生成约 1000 个公钥/私钥对,并在 HSM 进行身份验证时将其存储在密钥库(数据库或其他)中。然后,您可以使用从数据库中随机选择的密钥,而无需对 HSM 进行身份验证。
请注意,HSM 通常只能在内部存储 20 个密钥 - 这就是您可能希望在外部存储它们的原因。如果您有多个负载均衡的 HSM,这也很有效。
【讨论】:
以上是关于使用 HSM 的对称加密密钥的主要内容,如果未能解决你的问题,请参考以下文章