首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET加密处理密钥的方式安全吗?

.NET加密处理密钥的方式安全吗?
EN

Stack Overflow用户
提问于 2012-04-11 15:14:05
回答 1查看 332关注 0票数 4

在生成对称密钥以加密消息时,您可以在进程内存中创建一个字节数组。

接下来,实例化一个SymmetricAlgorithm,如AesCryptoServiceProvider。然后,通常将key属性设置为内存中的键。

然后创建一个ICryptoTransform,通常通过调用SymmetricAlgorithm.CreateEncryptor()CreateDecryptor()。您还可以跳过设置上面的Key属性,直接将键和IV传递给CreateEncryptor(byte[],byte[])CreateDecryptor(byte[],byte[])

  1. 在创建ICryptoTransform以防止流氓软件读取字节数组时,将字节数组为零是否更安全?当字节数组用于生成加密随机数据并初始化转换时,钉扎是否提供了任何安全性?
  2. 如果设置了SymmetricAlgorithm.Key属性,是否有其他副本,或者仅仅是指向秘密字节数组的指针?在创建转换后立即释放SymmetricAlgorithm是否更安全?
  3. 当创建ICryptoTransform时,我假设内存中现在有一个额外的副本。那么,在ICryptoTransform对象的生命周期中,关键是由流氓软件读取的吗?处理后怎么样?

换句话说,如果我有一个软件间歇写入加密数据的流,那么是否最好用一个单独的密钥对每个小部分进行加密,并销毁/处置我所处的一切,以尽量减少密钥被窃取的时间?

有人可能会说,一旦有流氓软件在计算机上,没有什么是安全的,因此,它是无用的担心它。我仍然希望采取措施尽量减少攻击者访问个人数据加密密钥所造成的潜在损害。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-12 14:26:12

  1. 不,这不安全。
  2. 这不重要,也不安全。
  3. 是的,任何拥有这样做特权的软件都可以阅读它。处理后可能无法读取,因为.Net密码中的.Net()通常会对内存进行零化。

在这方面有很多宗教争论,但我只想从实际意义上尽可能清楚地回答:如果‘流氓软件’,即恶意软件,是以访问解密程序内存空间的权限运行的,它不仅可以读取密钥,还可以读取您解密的数据。当然,这是一个更大的问题-因为这是关键的保护,毕竟。你不会阻止用户查看他们自己的数据,对吗?所以你没有增加任何安全措施。

换句话说,可计算性的十元网是对主机平台上的安全规则的补充,而不是替代。两者相加在一起,两者都是安全所需的。没有解密机器上的主机安全性,您就不能拥有加密安全性。尝试添加它只会增加更多的复杂性,并增加引入真正错误的可能性(尽管.NET为您管理内存,所以这里的问题不多)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10108839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档