在我们的应用程序中,我们有很多敏感的配置设置,我们将这些设置存储在一个xml文件中,该文件也是加密的。
此安全文件必须在运行时解密,并读取配置值。但是出现了一个问题,键和初始化向量被硬编码在代码中,因此任何人都可以使用Reflector读取它。
在.NET中存储加密密钥的最好方法是什么,这样就没有人可以使用Reflector读取它们?
发布于 2011-02-11 17:30:22
如果您想保护您的数据不受其他用户的影响。看一下ProtectedData类。
(免责声明:保护您的数据以创建版权保护方案不在此答案中)。
此类使用Windows中的DPAPI在用户或计算机级别对数据进行加密和解密。
使用ProtectedData/DPAPI可以将您从处理密钥和保护数据中解放出来。您可以选择保护当前用户的数据。相同的域用户可以从不同的计算机读取数据。
如果你想创建你自己的密钥。您可以为每个用户/机器创建一个密钥,并将该密钥存储在注册表中。因为注册表是安全的,所以只有当前用户才能读回键。我知道注册表有不好的报应,但实际上非常擅长存储这样的数据。
附言:不要把IV放在你的代码里。每次创建一个新的IV,并将其放在数据前面。
发布于 2012-07-12 23:20:46
你应该使用机器密钥库,它是一个安全的存储,特别是为了这个目的。例如:
CspParameters cspParams = new CspParameters(PROV_RSA_FULL, null, KEYNAME);
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams);
其中KEYNAME是一个自定义字符串,可用于以后检索密钥。
有关更多示例,请参阅此问题:How to store a public key in a machine-level RSA key container
发布于 2011-02-11 17:35:08
通常,应该为每个会话创建新的密钥和IV,并且不应该存储密钥和IV以供以后的会话使用。
要将对称密钥和IV传递给远程方,通常会使用非对称加密对对称密钥和IV进行加密。在不加密的情况下通过不安全的网络发送这些值是非常不安全的,因为任何截获这些值的人都可以解密您的数据。有关此加密和传输密钥和IV的过程的详细信息,请参阅Creating a Cryptographic Scheme。
https://stackoverflow.com/questions/4967325
复制相似问题