【问题标题】:How to transform variable-length password to fixed length secret key如何将可变长度密码转换为固定长度密钥
【发布时间】:2017-06-05 06:37:00
【问题描述】:

密码通常是任意字符串,例如“abc”、“1234”。但是像DES这样的加密算法需要一个固定长度的密钥。我想知道如何通过公认的方式将可变长度密码转换为固定长度密钥。

【问题讨论】:

    标签: encryption passwords password-encryption


    【解决方案1】:

    使用基于密码的密钥派生函数从密码中派生加密密钥:PBKDF2(又名Rfc2898DeriveBytes)。使用随机盐和迭代计数,这样推导需要大约 100 毫秒的计算时间。

    必须使用相同的盐和迭代计数来获取解密密钥,它们可以添加到加密数据之前,因为它们不需要保密。

    仅使用哈希函数是不够的,仅添加盐对提高安全性无济于事。

    关键是让攻击者花费大量时间通过蛮力寻找密码。

    【讨论】:

    • “大约 100 毫秒的计算时间”...在什么硬件上,在什么级别的并行计算资源上...?
    • 生产机器上的 100 毫秒,这大约适合人类使用。当然,更快的计算机会做得更好,但与 SHA512 的 Recommendation for Password-Based Key Derivation,摘录如下:迭代次数应设置为环境允许的最高值,同时保持可接受的性能。
    【解决方案2】:

    您需要使用盐值(以防止字典攻击)和良好的密钥偏差函数,如 scrypt、bcrypt 或 PBKDF2

    如果只使用哈希函数生成密钥,那么生成的密钥很可能是 SHA256("abcd") 或 SHA256("password")。也就是说,这种方法非常容易受到暴力攻击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 2010-11-05
      • 2011-09-03
      相关资源
      最近更新 更多