hot*_*oto 5 java cryptography sha pbkdf2 hmacsha1
我正在寻找适当的密码加密Java算法,我发现Java SDK提供了PBKDF2WithHmacSHA1,但没有提供PBKDF2WithHmacSHA256.
我听说HMAC-SHA256比HMAC-SHA-1需要更多的时间.
由于系统资源有限,我将应用不同的迭代值,以使它们最安全,只要服务要求能够承受它.
即使使用相同的预期处理时间,使用HMAC-SHA256比使用HMAC-SHA-1更安全吗?
如果是这样,你能描述使用HMAC-SHA256比使用HMAC-SHA-1安全吗?
Pro#1: SHA-256是比SHA-1更长的哈希值(256位对160位),因此使用纯蛮力发现碰撞的几率要低得多.即使调整了迭代次数以便计算单个PBKDF2散列的时间相同,您也必须散列2 ^ 96倍的随机输入才能与PBKDF2-SHA-256匹配,而不是PBKDF2-SHA-1
Con#1:没有人使用纯暴力攻击密码哈希,他们使用字典攻击,混合字典攻击和有限字符集攻击.所有这些都使用足够小的有限输入空间,PBKDF2-SHA-1和PBKDF2-SHA-256都不可能有任何自然碰撞.有限的密码搜索空间使得散列的大小不相关,只要它"足够大",因此影响攻击难度的唯一因素是计算单个PBKDF2散列的时间.此外,PBKDF2有一种方法可以将输出长度拉伸到比底层散列长度更长,因此实际上可以使两者具有相等的输出空间.
Pro#2: SHA-1至少部分被打破; 密码分析导致攻击比蛮力更快地发现碰撞.一旦发现攻击,你通常可以期待它得到改进 - 这意味着SHA-1适用于任何需要在未来几分钟内保证安全的东西是有疑问的.
Con#2: SHA-1在理论上是"破碎的",但是已发现的攻击仍然非常昂贵,据我所知,它们都是生日攻击(无法帮助您破解密码数据库)而不是前映像攻击(这样做).此外,由于PBKDF2使用散列的多次迭代,将散列输出的轮次与密码反复组合,因此很难将对散列的攻击扩展为对PBKDF2的攻击.为了使PBKDF2-SHA-1不安全,需要对SHA-1进行非常严重的攻击.
总的来说,我认为你应该更喜欢PBKDF2-SHA-256的一般原则,但是如果它不可用,PBKDF2-SHA-1仍然是广泛使用的,并且是目前中等安全密码哈希的合理选择.
| 归档时间: |
|
| 查看次数: |
2154 次 |
| 最近记录: |