代码之家  ›  专栏  ›  技术社区  ›  Dominik Grabiec

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

  •  18
  • Dominik Grabiec  · 技术社区  · 7 年前

    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));
    

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

    1 回复  |  直到 17 年前
        1
  •  18
  •   Rasmus Faber    17 年前

    这取决于你的要求。

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

    这适用于所有未将密钥存储在智能卡、硬件安全模块、TPM芯片等中的加密实现。

    CspProviderFlags.UseNonExportableKey .

    CspProviderFlags.UseUserProtectedKey 无论何时使用私钥,都会要求用户进行确认和可选的附加密码。