.net - .NET 加密处理 key 的方式是否安全?

标签 .net security encryption

在生成对称 key 来加密消息时,您会在进程的内存中创建一个字节数组。

接下来你实例化一个 SymmetricAlgorithmAesCryptoServiceProvider .然后通常将 key 属性设置为内存中的 key 。

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

  • 一旦创建 ICryptoTransform 以防止流氓软件读取字节数组,是否更安全?在使用字节数组生成加密随机数据并初始化转换时,固定是否提供任何安全性?
  • 如果您设置 SymmetricAlgorithm.Key 属性,是否在某处有额外的副本,或者只是指向您的 secret 字节数组的指针?创建转换后立即处理 SymmetricAlgorithm 是否更安全?
  • 创建 ICryptoTransform 时,我假设现在 RAM 中有一个额外的副本。那么在 ICryptoTransform 对象的生命周期内,流氓软件是否可以读取 key ?处理后如何?
    换句话说,如果我有一个流,我的软件会间歇性地向其中写入加密数据,那么最好用一个单独的 key 加密每一点,并销毁/处置我能做的所有事情,以尽量减少 key 可能被盗的时间?

  • 有人可能会说,一旦电脑上出现了流氓软件,就没有什么是安全的,因此担心它是没有用的。我仍然宁愿采取措施,尽量减少因攻击者获得个人数据加密 key 而造成的潜在损害。

    最佳答案

  • 不,这并不安全。
  • 没关系,不,这并不安全。
  • 是的,任何有权限的软件都可以读取它。处理后可能无法读取,因为 .Net 加密中的 Dispose() 通常会将内存归零。

  • 对此有许多宗教争论,但我只是从实际意义上尽可能清楚地回答:如果“流氓软件”(即恶意软件)以访问解密程序内存空间的权限运行,它不仅可以读取 key ,还可以读取您解密的数据。当然,这更像是一个问题——毕竟这是 key 所保护的。你不会阻止用户查看他们自己的数据,是吗?因此,您没有添加任何安全性。

    换句话说,可计算性的原则是补充而不是取代主机平台上的安全规则。两者相加,两者都是安全所必需的。如果解密机器上没有主机安全性,就无法获得加密安全性。尝试添加它只会增加更多复杂性并增加引入真正错误的可能性(尽管 .NET 会为您进行内存管理,所以这不是问题)。

    关于.net - .NET 加密处理 key 的方式是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10108839/

    相关文章:

    c# - 为什么 WaitForExit() 不等待?

    java - 是否可以创建加密的 Sqlite 数据库?

    android - Postman Rest Client 如何创建 Oauth 签名?无法在 android 中解析 Oauth_Signature

    security - 您使用哪种哈希方法(MD5、SHA1、其他?)

    php - mcrypt_encrypt 的 javascript 替代品

    .net - F# 中不可变记录类型的复制和更新是共享还是复制内存?

    c# - 将 Dictionary<string, object> 转换为匿名对象?

    .net - System.Diagnostic 可以在收到任何字符串而不是行尾时重定向输出吗?

    c# - 在ASP.Net核心中应用粒度权限限制

    security - 带有 RSA 公钥和私钥的 JWT