我正在使用 PBKDF2 从我的应用程序中的密码字符串派生密钥,对此我有几个问题。
首先是我在网上看到很多使用 HMAC-SHA256 等哈希的 PBKDF2。它使用 HMAC-SHA256 而不仅仅是 HMAC 是什么意思?我认为 HMAC 使用密钥加密数据。
其次,我了解到 BlackBerry 存在漏洞,因为它的 PBKDF2 函数只使用了一次迭代(而不是像 1000 次)。一次迭代是否与仅对密码进行哈希处理相同(例如使用 SHA256)。
谢谢
我正在使用 PBKDF2 从我的应用程序中的密码字符串派生密钥,对此我有几个问题。
首先是我在网上看到很多使用 HMAC-SHA256 等哈希的 PBKDF2。它使用 HMAC-SHA256 而不仅仅是 HMAC 是什么意思?我认为 HMAC 使用密钥加密数据。
其次,我了解到 BlackBerry 存在漏洞,因为它的 PBKDF2 函数只使用了一次迭代(而不是像 1000 次)。一次迭代是否与仅对密码进行哈希处理相同(例如使用 SHA256)。
谢谢
是的,一次迭代与调用底层 hmac 函数大致相同。您不想这样做,它使计算函数变得更容易,因此更容易暴力破解密码选择。更多的迭代使该过程花费更长的时间。
PBKDF2 使用 HMAC。然而,HMAC 是一种使用任何散列函数的算法。您可以插入 md5、sha1、sha2 或其他任何东西。
HMAC 在内部使用哈希函数。它不加密数据;它只是使用密钥创建可验证的“签名”(消息验证码)。HMAC-SHA256 表示使用 SHA256 哈希函数的 HMAC。您还可以使用 HMAC-SHA1、HMAC-MD5 或 HMAC-WhateverHash。
是的,通过一次迭代,PBKDF2-HMAC-SHA256 很像使用 SHA256 散列密码。您仍然有一个盐,并且哈希函数被调用了两次(请参阅有关 HMAC 的任何参考),但是检查大量密码要快得多。