密钥容器,足够安全来存储私钥?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (11)

我正在阅读关于.NET中的Key Containers作为一个安全的地方来存储非对称加密和数字签名的私钥。

我的问题是密钥容器有多安全?因为我发现如果我知道密钥容器名称,那么我将能够使用以下方法检索私钥:

// Create the CspParameters object and set the key container 
// name used to store the RSA key pair.
CspParameters cp = new CspParameters();
cp.KeyContainerName = ContainerName;

// Create a new instance of RSACryptoServiceProvider that accesses
// the key container MyKeyContainerName.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);

// Display the key information to the console.
Console.WriteLine("Key retrieved from container : \n {0}", rsa.ToXmlString(true));

密钥容器是存储私钥的安全场所吗?

提问于
用户回答回答于

RSACryptoServiceProvider背后的密钥库实际上就是CryptoAPI密钥库。此处的密钥存储在用户凭证(如果使用用户存储)或机器凭证(如果使用机器存储)下受保护的文件系统中。这意味着有权访问正确凭据的攻击者将能够提取私钥。

对于不将密钥存储在智能卡,硬件安全模块,TPM芯片等中的所有加密实现来说都是如此。

为了防止攻击者不那么强大,CryptoAPI和RSACryptoServiceProvider为你提供了将密钥设置为不可导出的可能性。这意味着CryptoAPI / .NET将拒绝为你执行私钥导出(但知识渊博的攻击者仍然可以解决这个问题)。为此,请使用生成密钥CspProviderFlags.UseNonExportableKey

CspProviderFlags.UseUserProtectedKey无论何时使用私钥,你都可以使用它询问用户的确认信息和可选的附加密码。

扫码关注云+社区