.net 存储对称密钥的良好解决方案或保护数据的替代方法

.net 存储对称密钥的良好解决方案或保护数据的替代方法,.net,security,cryptography,.net,Security,Cryptography,关于存储对称密钥,我有一个特别令人沮丧的问题 背景: 我有一些敏感数据存储在数据库中,需要加密/解密。目前我正在使用Rijndael算法。该应用程序是基于web的(ASP.NET MVC)。多个实例之间的密钥需要相同(如果这些实例连接到同一数据库) 问题: 请记住以上内容,存储密钥的最佳位置是哪里?或者我应该使用非对称算法?有人还建议我使用.cer文件。这是如何工作的?这里很好地描述了crypto如何在Windows/.NET上工作。基本上你会储存 您的证书在Windows证书存储中,并使用Cr

关于存储对称密钥,我有一个特别令人沮丧的问题

背景:

我有一些敏感数据存储在数据库中,需要加密/解密。目前我正在使用Rijndael算法。该应用程序是基于web的(ASP.NET MVC)。多个实例之间的密钥需要相同(如果这些实例连接到同一数据库)

问题:


请记住以上内容,存储密钥的最佳位置是哪里?或者我应该使用非对称算法?有人还建议我使用.cer文件。这是如何工作的?

这里很好地描述了crypto如何在Windows/.NET上工作。基本上你会储存 您的证书在Windows证书存储中,并使用Crypt API来使用它


与对称加密相比,非对称加密使用更高的资源。对称加密数据和非对称加密密钥(如SSL)是个好主意

由于您可能需要有多个实例,如果没有互补的不对称解决方案,风险会更高


您已经完成了第一部分,只需通过windows证书管理控制台(Run=>
CertMgr.msc
)使用非对称算法确保密钥的安全即可。

存储密钥没有很好的解决方案。有很多糟糕的解决方案,比如硬编码密钥,或者将其存储在数据库中,因此将密钥存储在.cer idea之类的文件中要比这些好得多

我移植了Google的框架,它主要将密钥存储在文件系统上。强调复数

它在格式中内置了密钥旋转,因此您可以随时间旋转对称密钥,基本上允许您替换或增加新密文的密钥强度,而不会丢失解密旧密文的能力。它通过向密文中添加一个小密钥标识符并使用


在构建自己的加密时,能够更改加密密钥常常被忽视。

使用一次性、随机生成的对称密钥。将此密钥直接添加到消息中,并使用非对称加密算法对其进行加密。接收器首先解码对称密钥,然后使用它解码消息的其余部分;在这之后,对称密钥被丢弃,永远不会被重用,因此不需要存储

您将获得非对称加密的所有逻辑,即使是好的加密密钥的大小也不应该是一个大的性能问题