c# - 安全地处理来自 Windows Key Store 的私钥

标签 c# security cryptography private-key x509

我正在开发一个为 ASP.Net Web 服务器加密配置文件设置的应用程序。我正在实现的加密方法是使用 AES 和 RSA 封装数据。我正在生成一个 AES key ,使用该 AES key 加密我的数据,然后使用我的 Windows 证书存储中证书中的公钥加密 AES key 。然后我将数据连同加密的 AES key 和用于加密它的证书序列号一起保存回配置文件。

当我想访问这些数据时,我会读取用于加密 AES key 的证书的序列号,从该证书中提取私钥,解密 AES key ,然后使用该 key 解密数据。这是我不确定我的安全级别的地方。

为了访问与证书关联的私钥,我必须将私钥标记为可导出,并让用户在私钥访问权限下运行我的应用程序。由于这是一个 ASP.Net 服务器,该用户是“网络服务”。我相信你能明白为什么这会是一个安全问题。基本上,如果有人通过网络侵入我的 ASP.Net 服务器,也许是通过某种注入(inject),他们就可以访问该私钥,不是吗?

关于如何让我的模型更安全,有人有什么建议吗?

解密函数:

//need an rsa crytpo provider to decrypt the aes key with the private key associated with the certificate
using (RSACryptoServiceProvider rsaCSP = (RSACryptoServiceProvider) decryptionCertificate.PrivateKey)
{
    //decrypt the aes key with the cert's private key
    byte[] aesKey = rsaCSP.Decrypt(encryptedAESKey, false);

    //decrypt data using the decrypted aes key and the IV passed in
    decryptedData = decryptWithAes(encryptedData, aesKey, aesIV);
}

谢谢。

最佳答案

只要写

RSACryptoServiceProvider rsaCSP = (RSACryptoServiceProvider)decryptionCertificate.PrivateKey

这并不意味着您正在分配实际的“ key ”。您可以使私钥不可导出,但仍然能够执行解密。

关于c# - 安全地处理来自 Windows Key Store 的私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5913153/

相关文章:

c# - GridView 或 ListView 中的不同对象类型

css - 背景 :url ("javascript:...") doesn't work anymore?

html - HTML 中的原始打印 HTTP_REFERER 是否可用于 XSS?

encryption - 最好的加密机制是Triple DES或RC4?

c# - 检测应用程序焦点更改/为 HWND 更改 Hook 某些内容?

c# - 我可以在 Windows 应用商店应用程序中使用 Awesomium 吗?

c++ - 解密后出现“消息哈希或 MAC 无效”异常

java - 在 JCA 中为 TLS 定义密码套件

c# - 在 Image 中仅显示图像文件的特定部分

java - 签名的小程序无法加载