【问题标题】:Deriving a many-use key for symmetric data encryption为对称数据加密派生多用途密钥
【发布时间】:2012-07-17 20:07:55
【问题描述】:

我需要为 .net 中的 AES 对称加密生成一个 256 位密钥。我还没有找到任何关于如何“从头开始”这样做的描述。我的意思是,我不打算将此密钥作为用户密码的基础。我只是想生成一个加密安全的密钥来使用。

据我所知,最好的选择就是使用 .net 类 RNGCryptoServiceProvider

这是生成加密安全密钥的最佳方法吗?

【问题讨论】:

  • 另一条评论:通常多次使用或单次使用不太适用于密钥生成。它与您如何使用密钥有关。例如。如果您使用带有静态 IV 的 CBC 加密,则不应多次使用密钥。换句话说,键的属性是相同的,不同之处在于您如何处理它们。
  • (1) 稍微更改了语言以使其更清楚 (2) 通过“多次使用”我只是表示我将使用密钥进行具有多个 IV 的多重加密。所以我的印象是,这是恰当的术语。谢谢
  • 多次使用当然是正确的术语,它只是对如何生成密钥没有影响。
  • 你清楚静脉注射液的用途吗?在累积密码模式中,IV 仅用于初始块,然后后面的块使用加密该块的剩余部分。但是,如果您使用像信用卡这样的小值并且使用的是 256 位密钥,那么整个额外的随机化都来自 IV,并且使用只有一个块长的文本的流密码实际上并不比使用欧洲央行。
  • 一个好的安全策略是让你的大部分密钥在请求之间保持相同。使用来自服务器注​​册表的值或代码库之外的其他值填充键值的一部分。考虑使用每个用户的 IV,和/或使用每个用户的值对基本密钥进行加盐(例如,将用户 ID 预先添加到密钥中)。 “来自服务器的东西”有助于如果有人获得您的数据库和您的代码,他们将无法解密您的字段。

标签: .net encryption cryptography key aes


【解决方案1】:

“最佳方法”取决于您的具体要求。

如果您只需要 32 个随机字节,那么 RNGCryptoServiceProvider 就可以了。您必须做出安排以确保密钥在您的目的地可用,通常使用 RSA 或其他一些非对称加密方法。如果您需要它用于存档目的,那么您将需要一种安全存储它的方法。您还需要确保在不再需要后将其安全删除。

或者,您也可以使用Key Derivation Function,同样考虑到适用于 KDF 参数的传输、存储和删除。

【讨论】:

  • 您能否解释一下使用非对称加密如何安全地获取到目的地的密钥?
  • 非对称加密有一个公钥和一个私钥。这些必须提前设置。有用的部分是公钥不需要保密。不太有用的部分是它通常比对称加密慢很多,因此将它用于小密钥而不是大数据文件的技术。使用目的地的公钥加密您的密钥。他们将能够使用他们的私钥对其进行解密。网上有很多描述,stackoverflow上都有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 2023-04-03
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多