使用 PBKDF2 与 SHA256 从密码短语生成 AES 加密密钥有什么优势?

信息安全 加密 哈希 AES 密码 pbkdf2
2021-09-06 03:25:07

我正在研究两个可比较的软件,它们使用密码对磁盘上的数据进行加密。一个使用 PBKDF2 从密码短语生成加密密钥,而另一个使用两轮 SHA256。有什么不同?一个比另一个更受欢迎吗?

3个回答

不同之处在于:

  • PBKDF2的设计很慢
  • SHA256 是一个很好的哈希函数;它并不慢,按设计

因此,如果有人要尝试许多不同的可能密码短语,比如整个字典,然后每个单词都附加一个数字,然后每个单词都有不同的大小写,然后是两个字典单词,等等。那么使用 PBKDF2 这个过程会慢得多.

但是,如果您的密码是真正安全的,即非常长、非常随机并且超出任何系统枚举过程的范围,那么它并没有实际的区别,除了攻击者可能会花费更多资源试图破解您的密码(或者可能更少,如果他们决定早点放弃)。

密码散列算法(例如 PBKDF2、bcrypt 和 scrypt)旨在与密码一起使用,并且故意变慢。加密哈希算法很快。在大多数情况下,快速是好的,但在这里不是。减慢算法(通常通过迭代)会使攻击者的工作变得更加困难。密码哈希还为每个哈希添加了一个盐值以使其唯一,这样攻击者就无法同时攻击多个哈希。

攻击者将尝试通过执行字典和蛮力攻击来恢复密码,他们通过散列来猜测密码并将其与存储的密码进行比较以确定它们是否匹配。使用常规加密散列函数(例如 MD5、SHA256),攻击者可以每秒猜测数十亿个密码。使用 PBKDF2、bcrypt 或 scrypt,攻击者每秒只能进行几千次猜测(或更少,取决于配置)。

这意味着如果使用 PBKDF2、bcrypt 或 scrypt 而不是常规的散列函数,则每个密码都会更强大。

此外,PBKDF2、bcrypt 和 scrypt 都使用大的随机“salt”值来确保每个用户的密码都是唯一的散列。攻击 100 个密码哈希将比攻击一个哈希花费 100 倍的时间。攻击一百万将花费一百万倍的时间,等等。使用 SHA256,攻击者可以尝试同时破解数千或数百万个哈希,而速度非常慢。

您应该始终使用密码散列或“密钥派生公式”而不是普通的加密散列。如果使用 SHA 或 MD5 之类的东西进行哈希处理,那么很难选择足够强大的密码来承受专门的破解工作。对于 PBKDF2、bcrypt 或 scrypt,密码可以短至 7 或 8 个字符,但对于 MD5 或 SHA,密码至少需要 13-14 个字符。

上面有很好的答案,但直接的原因是 sha256 没有加盐,两轮的弱点非常弱,就像 4 位密码很弱一样,在计算上:

  • 现代 GPU 设置可以轻松计算所有未加盐的 4 位 sha256 哈希(以毫秒为单位)