Mik*_*Lin 5 cryptography sha1 hmac pbkdf2
如果Node crypto.PBKDF2使用HMAC SHA-1,那么密钥长度如何超过20个字节?
这是我理解的(显然不正确):crypto.PBKDF2(password, salt, iterations, keylen, callback)使用HMAC SHA-1用盐哈希密码.然后,它需要的是哈希和哈希它具有相同的盐.它会重复这一点,无论你告诉它多少次迭代,然后将结果传回给你.结果将截断为您指定的字节数keylen.
SHA-1输出160位或20个字节.但是,我可以要求keylen超过20个字节crypto.PBKDF2,并且在第20个字节之后,数据不会重复.这对我来说没有意义.
我在这里误解了什么?
试试看:
c.pbkdf2('password', 'salt', 1, 21, function(err, key) {
for (var i = 0; i < key.length; i++) {
console.log(key[i].toString(36));
}
});
Run Code Online (Sandbox Code Playgroud)
我希望在第20个字节之后看到某种模式,但我没有.
为了得到i第一个块,PBKDF2运行完整的密钥推导,并i连接到盐.因此,为了获得第21个字节,它只是再次运行推导,使用不同的有效盐,从而产生完全不同的输出.这意味着导出21个字节的速度是导出20个字节的两倍.
我建议不要使用PBKDF2来获得超过底层哈希的自然输出大小/大小.通常这只会减慢防守者,而不是攻击者.
我宁愿运行PBKDF2一次派生一个主密钥,然后使用HKDF从中获取多个秘密.有关加密,然后生成MAC的AES密钥和HMAC密钥,请参见如何加密PBKDF2?在crypto.SE
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |