你使用哪种哈希方法(MD5、SHA1或其他)?

11

这个维基百科页面列出了大量的哈希方法。

可以看到,MD5和Sha1都已经被“破解”(在密码学中,“破解”意味着攻击比暴力攻击更简单。换句话说,如果你需要一百万年而不是十亿年来寻找碰撞,那么算法被认为是破解了,即使它可能仍然安全可用)。

你使用什么哈希算法呢?

SHA1已经被破解,但计算一个碰撞仍需要数十亿年的时间。

其他哈希函数仍未被破解,但我们必须记住,研究人员集中精力研究主流算法(即MD5和SHA1),因此未被破解的哈希函数也可能不安全。


1
嗯,我们能再加把劲吗?现在似乎更紧急了? - chiggsy
7个回答

10

现在大多数人仍然使用SHA1或甚至MD5,无论它们是否已经被破解。因为散列技术的现状是我们有一些已知存在理论漏洞但没有被真正破解的函数,以及一些我们很少了解的未经验证的函数。

如果您正在使用哈希函数进行密码存储,那么理论上的漏洞可能对您并不重要。首先,因为这些漏洞的本质并不能真正帮助破解密码。其次,如果您真的非常关注安全,您可能不会使用密码。

在数字签名、SSL、IPSEC等使用哈希函数的情况下,理论上的漏洞将更加重要,特别是如果您需要长期保证哈希函数的安全性。然而,在这种情况下,你唯一能做的就是等待看哪些哈希函数成为可靠的新标准,或者如果可能的话使用一个以上的哈希函数。

即便如此,在所有威胁中,这在大局上仍然是最不重要的。系统中的安全问题更可能出现在您自己的代码或针对人员的威胁中,而不是攻击哈希函数!

然而,如果设计一个新系统,建议设计它,以便您可以随时替换任何加密算法。最好通过配置/插件实现,而不是重新编译。


不要使用MD5或SHA1进行密码哈希!请使用bcrypt甚至更好的库。另请参阅http://security.stackexchange.com/questions/19906/is-md5-considered-insecure - PiTheNumber
在2020年,这是一个不好的、过时的答案。对于密码,请使用bcrypt(需要您的哈希算法变慢),对于比较文件,请使用SHA256或BLAKE2b(需要您的哈希算法变快)。 - user3064538

5
我使用Whirlpool哈希算法。但是...不能仅依靠哈希保护密码。如果您要在数据库中存储密码,一定要使用良好的盐值(有助于防止彩虹表攻击和碰撞)。

并遵循其他适当的安全指南:)


是的,使用盐是强制性的。但即使使用了一个合适的盐,MD5仍然存在严重的安全问题。我会研究一下Whirlpool哈希算法。谢谢:) - Brann

2

这取决于我使用哈希的目的是什么...

安全性?文件更改检测?查找重复文件?

从问题的提问方式来看,我假设您使用哈希的原因是前者。在这种情况下,我建议不要使用“不安全”的方法。

如果不是安全用途(例如查找重复文件),MD5 可以很好地工作并且速度更快。


实际上,我正在使用哈希来存储用户密码。 - Brann

1

还有其他算法,比如SHA-256RIPEMD-160,甚至可以选择SHA-3候选列表之一(请参阅此处)。但请始终记住,这些算法尚未像MD4 / 5和SHA-1那样经过彻底的测试和分析。当然,这也会带来性能上的代价。

回答您的问题之一是使用其中两个,希望它们足够不同,以便破解一个不会破解另一个。我认为,同时破解两个校验和的可能性非常小。


0

0

如果安全是您的关注重点,最好避免使用“破损”的哈希函数。您所说的可能对某些仅被研究人员破解的哈希函数来说是正确的,但通过研究工作获得新的认识后,实际攻击很快就会出现。

例如,现在可以非常快速地发现MD5的碰撞(我认为维基百科提到了一种可以在几分钟内完成的方法,但如果我错了请纠正我)。

如果发生这种情况,您不想重新计算已经计算过的大量哈希/签名。


是的,你关于MD5是正确的。关于SHA1,它已经被破解,但仍需要数十亿年来计算碰撞。 - Brann

0
据我所知,MD5 的破解部分是某人拥有原始文本,现在能够轻松构造一个具有相同 MD5 摘要的“第二个”文本。
但仅拥有该原始文本的 MD5 摘要的人仍无法构造与之匹配的第二个文本。

MD5攻击甚至比这还要弱。您所描述的被称为第二原像,我们不知道快速找到MD5的方法。攻击者可以做的是构造两个具有相同哈希值的消息。 - CodesInChaos
@CodesInChaos 对,MD5并没有“破解”,因为暴力破解仍然是找到给定哈希的明文的唯一方法。嗯,还有在Google上查找哈希值;-) - Alnitak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接