【问题标题】:Arbitrary length keys to standard key length in AESAES 中标准密钥长度的任意长度密钥
【发布时间】:2021-01-09 18:41:42
【问题描述】:

我被要求为安全类实现 AES 算法。在实现时,我找不到关于如何从用户那里接受任意长度的密码(如密码)并将其转换为 128、192 或 256 位密钥的答案。我该怎么办?

【问题讨论】:

  • 您可以使用 PBKDF2 等密钥派生函数 (KDF) 从密码中派生密钥,参见例如cryptobook.nakov.com/mac-and-key-derivation/…。你可以在网上找到很多关于这方面的信息。
  • 如果你打算使用 KDF,你应该这样做,那么最好使用密码,因为它比单个密码长。

标签: encryption cryptography aes


【解决方案1】:

如 cmets 中所述,这通常使用密钥派生函数 (KDF) 来完成。主要使用两种类型的密钥派生函数。

当您已经拥有某种类型的加密材料时使用第一种,通常是密钥交换的某种变体(通常是 Diffie-Hellman)。在这种情况下,假设密钥材料很强大,您只想提取它并从中生成可能的多个密钥。 TLS 1.3 中使用的HKDF 和 TLS 1.2 PRF 就是很好的例子。它们通常是 HMAC 的包装器,而且速度非常快。

当你有密码时使用第二种。因为,一般来说,人们不善于想出和记住足够熵的密码,所以我们使用专门迭代的 KDF 以降低速度,例如较旧的 PBKDF2 或较新的 scryptArgon2。这些选项旨在使用独特的盐并进行多次迭代,以便为选择错误密码的用户提供至少一定程度的保护,防止泄露,而较新的选项设计为内存昂贵,以防止对 GPU 的有效攻击。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多