使用Express.js框架和crypto用pbkdf2散列密码我读到默认算法是HMAC-SHA1,但我不明白为什么它还没有升级到其他系列之一或SHA。
crypto.pbkdf2(password, salt, iterations, keylen, callback)
keylen是否提供了我们想要的SHA的变体?像SHA-256,512等?
HMAC如何改变输出?
最后,当SHA1被打破时它是否足够强大?
对不起,如果我搞混了。
答案 0 :(得分:1)
keylen是否提供了我们想要的SHA的变体?像SHA-256,512等?
当你声明特别是哈希密码时,@ CodeInChaos是正确的 - keylen(即PBKDF2的输出长度)最多是你HMAC本地哈希的位数功能
作为证明的例子:
这里有22个字节的PBKDF2-HMAC-SHA-1 - 一个本地散列大小+2个以上的字节(共计8192次迭代! - 前4096个迭代生成前20个在那之后我们再为该集合做4096次迭代!):
这里只是获得PBKDF2-HMAC-SHA-1的前20个字节 - 即恰好一个本机哈希输出大小(总共需要4096次迭代)
即使您存储了22个字节的PBKDF2-HMAC-SHA-1,攻击者也只需要计算20个字节...这需要大约一半的时间,以获得字节21和22,另一整套HMAC值计算,然后只保留2个字节。
HMAC如何改变输出?
HMAC RFC2104是一种键入哈希函数的方法,特别是那些只是将键和文本连接在一起时存在弱点的方法。 HMAC-SHA-1是HMAC中使用的SHA-1; HMAC-SHA-512是HMAC中使用的SHA-512。
最后,当SHA1被打破时它是否足够强大?
如果你有足够的迭代次数(2014年上万次降低数十万或更多)那么应该没问题。特别是PBKDF2-HMAC-SHA-512的优势在于它在当前的显卡(即许多攻击者)上比在当前的CPU(即大多数防御者)上更糟糕。
对于黄金标准,请参阅@ThomasPornin在Is SHA-1 secure for password storage?中给出的答案,其中很小一部分是#34;对MD4,MD5和SHA-1的已知攻击是关于碰撞,不会影响前像抗性。已经证明MD4有一些弱点,在尝试打破HMAC / MD4时可以(仅在理论上)被利用,但这不适用于您的问题。 Kesley和Schneier在论文中进行的2106秒前像攻击是一种通用的权衡,仅适用于非常长的输入(260字节;超过100万兆字节 - 注意106 + 60超过160;'在那里,你看到权衡没有任何魔力)。"
答案 1 :(得分:0)
SHA-1坏了,但这并不意味着它的使用不安全; SHA-256(SHA-2)或多或少用于未来验证和长期替代。破碎只意味着比暴力更快,但没有必要的可行性或实用性(还)。
另见答案:https://crypto.stackexchange.com/questions/3690/no-sha-1-collision-yet-sha1-is-broken
经常被破坏的功能只意味着我们应该开始 迁移到其他更强大的功能,而不是那种功能 实际的危险呢。攻击只会变得更强,所以这是个好主意 一旦第一个裂缝开始出现,就要考虑替代方案。