我熟悉如何使用密钥派生函数通过需要大量计算和/或内存资源来计算最终密钥来减缓对密码的暴力攻击。
我知道的常见 KDF 是 bcrypt、PBKDF2 和 scrypt,但 KeePass 似乎使用了一种我不熟悉的完全不同的算法。根据KeePass 的帮助中心:
为了生成用于分组密码的最终 256 位密钥,KeePass 首先使用 SHA-256 对用户密码进行哈希处理,然后使用高级加密标准 (AES) 算法对结果进行 N 次加密(从现在开始称为密钥转换轮次) , 然后使用 SHA-256 再次对其进行哈希处理。对于 AES,使用随机的 256 位密钥,该密钥存储在数据库文件中。
[...]
默认情况下,KeePass 将 N 设置为 6000 轮加密(意味着完全加密;N 与 AES 的内部加密轮无关)。选择这个数字是为了提供与便携式设备版本的兼容性(PocketPC 处理器速度较慢,因此密钥计算需要更长的时间)。
将 AES 用作 KDF 是否安全?这种方法有什么严重的缺陷吗?6000 次迭代是否足以显着减慢坚定的攻击者?
关于“PocketPC 处理器”的那句话有点令人担忧,因为它向我暗示,这个关于使用什么 KDF 的决定是在很久以前做出的,在具有更强大处理器的手机出现之前(并且,通过扩展,在桌面处理器几乎没有那么强大)。