在生成对称 key 来加密消息时,您会在进程的内存中创建一个字节数组。
接下来你实例化一个 SymmetricAlgorithm如AesCryptoServiceProvider .然后通常将 key 属性设置为内存中的 key 。
然后创建一个 ICryptoTransform ,通常通过调用 SymmetricAlgorithm.CreateEncryptor()或 CreateDecryptor() .您也可以跳过上面的 Key 属性设置,直接将 key 和 IV 传递给 CreateEncryptor(byte[], byte[])或 CreateDecryptor(byte[], byte[]) .
换句话说,如果我有一个流,我的软件会间歇性地向其中写入加密数据,那么最好用一个单独的 key 加密每一点,并销毁/处置我能做的所有事情,以尽量减少 key 可能被盗的时间?
有人可能会说,一旦电脑上出现了流氓软件,就没有什么是安全的,因此担心它是没有用的。我仍然宁愿采取措施,尽量减少因攻击者获得个人数据加密 key 而造成的潜在损害。
最佳答案
对此有许多宗教争论,但我只是从实际意义上尽可能清楚地回答:如果“流氓软件”(即恶意软件)以访问解密程序内存空间的权限运行,它不仅可以读取 key ,还可以读取您解密的数据。当然,这更像是一个问题——毕竟这是 key 所保护的。你不会阻止用户查看他们自己的数据,是吗?因此,您没有添加任何安全性。
换句话说,可计算性的原则是补充而不是取代主机平台上的安全规则。两者相加,两者都是安全所必需的。如果解密机器上没有主机安全性,就无法获得加密安全性。尝试添加它只会增加更多复杂性并增加引入真正错误的可能性(尽管 .NET 会为您进行内存管理,所以这不是问题)。
关于.net - .NET 加密处理 key 的方式是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10108839/