gpt4 book ai didi

hash - Crypto - Express.js PBKDF2 HMAC-SHA1 就足够了吗?

转载 作者:行者123 更新时间:2023-12-04 01:25:00 31 4
gpt4 key购买 nike

使用 Express.js 框架和 crypto 通过 pbkdf2 对密码进行哈希处理 我读到默认算法是 HMAC-SHA1,但我不明白为什么它没有升级到其他系列之一或 SHA。

crypto.pbkdf2(password, salt, iterations, keylen, callback)

我们提供的 keylen 是我们想要的 SHA 的变体吗?像 SHA-256,512 等?

还有 HMAC 如何改变输出?

最后,当 SHA1 被破解时,它是否足够强大?

对不起,如果我把事情搞混了。

最佳答案

Is the keylen that we provide the variation of the the SHA we want? like SHA-256,512 etc?

正如您所说的,您正在特别对密码进行哈希处理,@CodesInChaos 是正确的 - keylen(即 PBKDF2 输出的长度)最多是您的 HMAC native 哈希函数的位数。

  • 对于 SHA-1,这是 160 位(20 字节)
  • 对于 SHA-256,这是 256 位(32 字节)等。
  • 这样做的原因是,如果您要求比散列函数支持的更长的散列 (keylen),第一个 native 长度是相同的,因此攻击者只需要攻击位即可。这是 1Password 在 Hashcat 团队发现时发现并修复的问题。

例子作为证明:

这是 PBKDF2-HMAC-SHA-1 的 22 个字节 - 这是一个 native 哈希大小 + 2 个字节(总共进行 8192 次迭代! - 前 4096 次迭代生成前 20 个字节,然后我们进行另外 4096 次迭代之后的集合!):

  • pbkdf2 sha1“密码”“盐”4096 22
    • 4b007901b765489abead49d926f721d065a429c12e46

这里只是获取 PBKDF2-HMAC-SHA-1 的前 20 个字节——即恰好一个 native 哈希输出大小(总共进行 4096 次迭代)

  • pbkdf2 sha1“密码”“盐”4096 20
    • 4b007901b765489abead49d926f721d065a429c1

即使你存储了 22 个字节的 PBKDF2-HMAC-SHA-1,攻击者也只需要计算 20 个字节......这需要大约一半的时间,以获得字节 21 和 22,另一组完整的 HMAC 值计算后只保留 2 个字节。

  • 是的,你是对的;对于 PBKDF2-HMAC-SHA-1,21 个字节花费的时间是 20 个字节的两倍,而 40 个字节实际上与 21 个字节一样长。然而,41 字节的长度是 20 字节的三倍,因为 41/20 介于 2 和 3 之间,不包括在内。

Also how does HMAC change the output?

HMAC RFC2104是一种键控散列函数的方法,特别是当您简单地将键和文本连接在一起时具有弱点的散列函数。 HMAC-SHA-1 是 HMAC 中使用的 SHA-1; HMAC-SHA-512 是在 HMAC 中使用的 SHA-512。

And lastly is it strong enough when SHA1 is broken?

如果您有足够的迭代次数(在 2014 年从上万到数十万或更多)那么它应该没问题。 PBKDF2-HMAC-SHA-512 特别有一个优势,即它在当前显卡(即许多攻击者)上的表现比在当前 CPU(即大多数防御者)上的表现要差得多。

关于黄金标准,请参阅@ThomasPornin 在 Is SHA-1 secure for password storage? 中给出的答案,其中一小部分是“已知的对 MD4、MD5 和 SHA-1 的攻击是关于碰撞的,这不会影响原像抵抗。已经表明 MD4 有一些弱点,可以(仅在理论上)在尝试时加以利用破坏 HMAC/MD4,但这不适用于您的问题。Kesley 和 Schneier 的论文中的 2106 秒原像攻击是一种通用权衡,它仅适用于非常长的输入(260 字节;那是一百万兆字节 -请注意 106+60 是如何超过 160 的;这就是您看到权衡没有任何魔力的地方)。”

关于hash - Crypto - Express.js PBKDF2 HMAC-SHA1 就足够了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21229685/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com