Hash Crypto-Express.js PBKDF2 HMAC-SHA1是否足够?

Hash Crypto-Express.js PBKDF2 HMAC-SHA1是否足够?,hash,express,cryptography,sha,pbkdf2,Hash,Express,Cryptography,Sha,Pbkdf2,使用Express.js framework和crypto将密码与pbkdf2进行散列,我了解到默认算法是HMAC-SHA1,但我不明白为什么它没有升级到其他家族或SHA crypto.pbkdf2(password, salt, iterations, keylen, callback) 我们提供的keylen是我们想要的SHA的变体吗?比如SHA-256512等等 HMAC如何改变输出 最后,当SHA1断开时,它是否足够坚固 对不起,我把东西弄混了。SHA-1坏了,但这并不意味着使用不安全

使用Express.js framework和crypto将密码与pbkdf2进行散列,我了解到默认算法是HMAC-SHA1,但我不明白为什么它没有升级到其他家族或SHA

crypto.pbkdf2(password, salt, iterations, keylen, callback)
我们提供的keylen是我们想要的SHA的变体吗?比如SHA-256512等等

HMAC如何改变输出

最后,当SHA1断开时,它是否足够坚固


对不起,我把东西弄混了。

SHA-1坏了,但这并不意味着使用不安全;SHA-256(SHA-2)或多或少是未来的证明和长期替代品。破碎只意味着比暴力更快,但不一定可行或切实可行

另见此答案:

一个函数经常被破坏只意味着我们应该开始 迁移到其他更强大的功能,而不是 实际的危险仍然存在。攻击只会变得更强,所以这是个好主意 一旦出现第一道裂纹,就要考虑备选方案。

我们提供的keylen是我们想要的SHA的变体吗?比如SHA-256512等等

当您声明您正在对密码进行哈希运算时,@CodesInChaos是正确的-keylen(即PBKDF2的输出长度)最多是HMAC本机哈希函数的位数

  • 对于SHA-1,这是160位(20字节)
  • 对于SHA-256,这是256位(32字节),以此类推
  • 原因是,如果请求的哈希(keylen)比哈希函数支持的长度更长,则第一个本机长度相同,因此攻击者只需攻击位。这就是Hashcat团队发现密码时发现并修复的问题1
举例证明:

这里有22个字节的PBKDF2-HMAC-SHA-1-这是一个本机哈希大小+2个字节(总共需要8192次迭代!-前4096次迭代生成前20个字节,然后我们再对集合进行4096次迭代!):

  • pbkdf2 sha1“密码”“salt”4096 22
    • 4b007901b765489abead49d926f721d065a429c12e46
这里只得到了PBKDF2-HMAC-SHA-1的前20个字节,即恰好一个本机散列输出大小(总共需要4096次迭代)

  • pbkdf2 sha1“密码”“salt”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之间,是互斥的
HMAC如何改变输出

HMAC是一种对哈希函数进行键控的方法,特别是当您将键和文本简单地连接在一起时,对那些有缺点的哈希函数进行键控。HMAC-SHA-1是HMAC中使用的SHA-1;HMAC-SHA-512是HMAC中使用的SHA-512

最后,当SHA1断开时,它是否足够坚固

如果你有足够的迭代次数(2014年上万次到下几十万次或更多次),那么应该没问题。PBKDF2-HMAC-SHA-512尤其具有一个优势,即它在当前图形卡(即许多攻击者)上的性能比在当前CPU(即大多数防御者)上的性能差得多


关于金本位,请参见@Thomasbornin给出的答案,其中一小部分是“已知的对MD4、MD5和SHA-1的攻击是关于碰撞的,不会影响原像抵抗力。已经证明,MD4有一些弱点(仅在理论上)试图破坏HMAC/MD4时被利用,但这不适用于您的问题。Kesley和Schneier在论文中提出的2106秒前像攻击是一种通用的权衡,它只适用于非常长的输入(260字节;这是一百万TB——注意106+60如何超过160;这就是你看到这种权衡没有任何魔力的地方)“

但我不认为有任何理由使用一个坏掉的哈希函数,而且当SHA几乎移动到SHA3时,它仍然是默认值。我想你对其余的问题没有更多的答案了吧?但是有很多!AFAIK SHA-3甚至还没有标准化。我只是想指出一点,通常一半的知识和炒作会导致错误的决定(例如,我从一家公司听说他们不想使用TLS,因为有(理论上)对它的攻击。我不是一个安全专家,但据我所知,SHA-1是完全安全的使用和安全的,因此没有必要(目前和可能在不久的将来)使用其他算法。通常安全性概念不会中断,点如下。HMAC-SHA1不会中断,即使SHA1是。甚至HMAC-MD5也是完美的函数。这是因为HMAC比哈希函数受冲突的影响小得多。HMAC只需要哈希函数的预映像阻力,MD5和SHA都需要1是完全不可预映的。@ntoskrnl的评论是3ST+1,不,SHA-3是。也就是说,算法已经被选择,大概SHA-3将使用Keccak论文中的轮数等(在对NIST进行一些批评之后)。但它不是标准化的…还没有。除了可能的密钥派生函数之外,您不应该在新协议中使用SHA-1。PBKDF2当然是一个密钥派生函数。只是不要使用超过20字节的密钥。PBKDF2相对于其他密码哈希(如bcrypt或scrypt)的缺点要比di大得多在这种情况下,SHA-1比SHA-256的优势。