我读到过Key Containers in .NET是一个安全的地方,用来存储用于非对称加密和数字签名的私钥。
我的问题是密钥容器有多安全?因为我已经发现,如果我知道密钥容器名称,那么我将能够使用以下命令检索私钥:
// 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));
密钥容器是存储私钥的安全位置吗?
发布于 2009-08-07 07:38:47
这真的取决于你的需求。
RSACryptoServiceProvider背后的密钥库实际上是CryptoAPI密钥库。这里的密钥存储在受用户凭证(如果使用用户存储)或机器凭证(如果使用机器存储)保护的文件系统上。这意味着有权访问适当凭据的攻击者将能够提取私钥。
这将适用于不在智能卡、硬件安全模块、TPM芯片等中存储密钥的所有密码实现。
为了防止能力较弱的攻击者,CryptoAPI和RSACryptoServiceProvider提供了将密钥设置为不可导出的可能性。这意味着CryptoAPI/.NET将拒绝为您执行私钥导出(但知识丰富的攻击者仍然能够解决此问题)。为此,使用CspProviderFlags.UseNonExportableKey
生成密钥。
您还可以使用CspProviderFlags.UseUserProtectedKey
,每当使用私钥时,它都会要求用户进行确认,并提供一个可选的附加密码。
https://stackoverflow.com/questions/1243259
复制相似问题