关于存储对称密钥,我遇到了一个特别令人沮丧的问题。
背景
我有一些敏感数据存储在需要加密/解密的数据库中。目前我正在使用Rijndael算法。该应用程序是基于Web的(ASP.NET MVC)。密钥需要在多个实例中相同(如果这些实例连接到同一个DB)。
问题:
请记住以上内容,存储密钥的最佳位置在哪里?或许我应该使用非对称算法?有人还建议我使用.cer文件。这会怎么样?
答案 0 :(得分:0)
这里有一个关于加密如何在Windows / .NET上运行的很好的描述。基本上你会存储 您在Windows证书存储区中的证书,并使用Crypt API来使用它。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa388162(v=vs.85).aspx
答案 1 :(得分:0)
与对称相比,非对称加密使用了更高的资源。对称地加密数据并非对称地加密密钥(如SSL)是个好主意。
由于您可能需要拥有多个实例,因此如果没有互补的非对称解决方案,风险会更高。
您已完成第一部分,只需通过Windows证书管理控制台(Run => CertMgr.msc
)使用非对称算法保持密钥安全
答案 2 :(得分:0)
存储密钥没有很好的解决方案。有许多不好的解决方案,比如硬编码密钥或将其存储在数据库中,因此将密钥存储在像.cer这样的文件中比使用它更好。
我移植了Google的Keyczar框架to C#,它主要将密钥存储在文件系统中。强调键复数。
它具有内置于格式中的键旋转,因此您可以随时间旋转对称键,基本上允许您替换或增加新密文的密钥强度,而不会失去解密旧密文的能力,它通过添加密文的小密钥标识符并使用authenticated encryption。
在构建自己的加密时,能够更改加密密钥是经常被忽略的。
答案 3 :(得分:0)
使用一次性使用,随机生成的对称密钥。将此密钥直接添加到邮件中,使用非对称加密算法对其进行加密。接收器首先解码对称密钥,然后用它来解码消息的其余部分;之后,对称密钥被丢弃并且永远不会被重用 - 所以不需要存储。
您将获得非对称加密的所有逻辑,并且即使是好的加密密钥的大小也不应该是一个很大的性能问题。