128 位 SHA-1 哈希是否比 MD5 哈希更安全?
Are 128 bits of SHA-1 hash safer than an MD5 hash?
SHA-1 被认为比 MD5 安全至少有两个原因:更大的散列(160 位对 128 位)和更好的散列函数。
我需要在几百万个字符串上生成散列。通常,即使是 MD5,发生冲突的机会也应该非常低。我知道 MD5 已经很老了,一般不被认为是安全的,但在我的情况下,蓄意攻击不是问题(没有外部访问,没有激励等)。我只需要一个相当安全的散列函数 w/o 浪费太多位,128 位应该绰绰有余。所以我想知道 - 如果我只得到 SHA-1 哈希的前 128 位,那会比 MD5 的 128 位更好吗? “更好”是指“不太可能引起碰撞”。
我 运行 使用 4,292,907 个不同的字符串进行了一些“真实世界”测试。我使用了 HEXed 散列的 11 个字符长的子字符串(换句话说,44 位部分)。示例:
HASH: 629a09633488e9b2aaf2f5a606706da3
Test 1: 629a0963348
Test 2: 29a09633488
Test 3: 9a09633488e
...
理论上,我计算出碰撞概率约为 41%(基于“生日悖论概率”公式)。但那是理论,假设真实 运行dom 分布。所以我想根据经验测试 MD5 和 SHA-1 并查看结果。在这里(右边的数字表示碰撞次数):
[MD5] [SHA-1]
Test No 1: 2 Test No 1: 0
Test No 2: 0 Test No 2: 0
Test No 3: 1 Test No 3: 0
Test No 4: 0 Test No 4: 1
Test No 5: 0 Test No 5: 0
Test No 6: 0 Test No 6: 1
Test No 7: 1 Test No 7: 0
Test No 8: 2 Test No 8: 0
Test No 9: 1 Test No 9: 0
Test No 10: 1 Test No 10: 0
Test No 11: 0 Test No 11: 1
Test No 12: 0 Test No 12: 1
Test No 13: 0 Test No 13: 0
Test No 14: 0 Test No 14: 1
Test No 15: 0 Test No 15: 1
Test No 16: 0 Test No 16: 1
Test No 17: 1 Test No 17: 1
Test No 18: 1 Test No 18: 1
Test No 19: 0 Test No 19: 0
Test No 20: 0 Test No 20: 1
TOTAL: 8 TOTAL: 10 // No of tests with at least 1 collision
结论:与通过“生日悖论概率”公式计算的“理论”概率相比,MD5 和 SHA-1 均未显示出明显更差的碰撞概率。我知道这个测试并不完美,应该持保留态度,但至少对我来说,它表明我可以在很大程度上依赖于通过“理论”公式计算碰撞几率 w/o担心我的计算与事实相去甚远
SHA-1 被认为比 MD5 安全至少有两个原因:更大的散列(160 位对 128 位)和更好的散列函数。
我需要在几百万个字符串上生成散列。通常,即使是 MD5,发生冲突的机会也应该非常低。我知道 MD5 已经很老了,一般不被认为是安全的,但在我的情况下,蓄意攻击不是问题(没有外部访问,没有激励等)。我只需要一个相当安全的散列函数 w/o 浪费太多位,128 位应该绰绰有余。所以我想知道 - 如果我只得到 SHA-1 哈希的前 128 位,那会比 MD5 的 128 位更好吗? “更好”是指“不太可能引起碰撞”。
我 运行 使用 4,292,907 个不同的字符串进行了一些“真实世界”测试。我使用了 HEXed 散列的 11 个字符长的子字符串(换句话说,44 位部分)。示例:
HASH: 629a09633488e9b2aaf2f5a606706da3
Test 1: 629a0963348
Test 2: 29a09633488
Test 3: 9a09633488e
...
理论上,我计算出碰撞概率约为 41%(基于“生日悖论概率”公式)。但那是理论,假设真实 运行dom 分布。所以我想根据经验测试 MD5 和 SHA-1 并查看结果。在这里(右边的数字表示碰撞次数):
[MD5] [SHA-1]
Test No 1: 2 Test No 1: 0
Test No 2: 0 Test No 2: 0
Test No 3: 1 Test No 3: 0
Test No 4: 0 Test No 4: 1
Test No 5: 0 Test No 5: 0
Test No 6: 0 Test No 6: 1
Test No 7: 1 Test No 7: 0
Test No 8: 2 Test No 8: 0
Test No 9: 1 Test No 9: 0
Test No 10: 1 Test No 10: 0
Test No 11: 0 Test No 11: 1
Test No 12: 0 Test No 12: 1
Test No 13: 0 Test No 13: 0
Test No 14: 0 Test No 14: 1
Test No 15: 0 Test No 15: 1
Test No 16: 0 Test No 16: 1
Test No 17: 1 Test No 17: 1
Test No 18: 1 Test No 18: 1
Test No 19: 0 Test No 19: 0
Test No 20: 0 Test No 20: 1
TOTAL: 8 TOTAL: 10 // No of tests with at least 1 collision
结论:与通过“生日悖论概率”公式计算的“理论”概率相比,MD5 和 SHA-1 均未显示出明显更差的碰撞概率。我知道这个测试并不完美,应该持保留态度,但至少对我来说,它表明我可以在很大程度上依赖于通过“理论”公式计算碰撞几率 w/o担心我的计算与事实相去甚远