在负载平衡的云环境中存储非对称密钥容器

Store Asymmetric Key Container In Load Balanced Cloud Environment

我的任务是使用 C# RSACryptoServiceProvider.SignData() 方法对一些数据进行签名。为了生成 public 和私钥,我使用了 RSACryptoServiceProvider 并传递了一个 keycontainername 以便安全地存储密钥。

当我 运行 MSDN example 在我的机器上使用固定的 keycontainername 生成一组 public/private 密钥时,预期的 public /私钥每次都会生成时间一样。

这在单个服务器环境中运行良好,但是,我们在服务器负载平衡的弹性环境中运行。如果我在任何一台机器上使用私钥加密数据并通过 RSACryptoServiceProvider 存储这些数据,数据将只存在于机器级别。每台机器将使用不同的密钥来签署数据,public 密钥的用户将无法验证签名。

有什么方法可以在分布式环境中安全地存储密钥?

谢谢

想到了两个。

第一种是使用包含私钥的 X509 证书。您可以使用 X509Certificate2 class 来获取具有私钥的 RSACryptoServiceProvider 实例。证书和私钥本身将保存在 Windows 证书库中。然后,您可以将通过证书存储对私钥的访问限制为某些帐户。然后,您只需在每台需要它的机器/AMI 上安装证书。

您的另一个选择是使用硬件安全模块。 AWS 有一项名为 CloudHSM 的服务,它允许您在 VPC 内使用网络 HSM(我不知道它与 Elastic Bean Stalk 的配合情况如何)。 HSM 供应商 SafeNet IIRC 允许安装指向 HSM 的 CSP。然后,您将为 RSACryptoServiceProvider 提供一个接受容器和 CSP 名称的 CspParameters 实例。

HSM 解决方案是最安全的,尽管更加复杂和昂贵。