哈希算法生存状况报告

哈希算法生存状况报告

最近一个新闻说,原本各大浏览器厂商推动在 HTTPS 中放弃支持 SHA-1 算法,但是由于 Facebook 等公司认为尚有少部分用户采用老式的 SHA-1 算法,而建议延长支持期。姑且不论浏览器厂商和应用厂商的做法谁更合理,那么这里提到的 SHA-1 算法是什么呢?它有什么风险么?

密码学里面有一类算法叫做 哈希 hash 算法,也称作散列算法、摘要算法,通常用于对一段信息的取样。当你给它一段 信息 ( message ) 时,可以用特定算法生成一段 信息摘要 ( message digest ) ,通常摘要的长度更短。 摘要 ( digest ) 可以表示这段信息的某种特征——就如同指纹一样,所以这个特征也叫做 指纹 ( fingerprint ) 、 校验和 checksum 。

这种算法包括我们经常听说的 MD5 、SHA-1 等算法。它通常用于加密体系的信息摘要,以建立一个可靠、安全的数据交互通道。而现在,随着对加密技术的研究和计算能力的提升,不断发现摘要算法中的缺陷和攻击方法,因此,对于涉及到数据安全的算法方面,建议每过一个阶段就更换一次摘要算法。

理想情况下,哈希算法应该有四个重要特性:

  • 不可逆:不能从摘要生成其原始信息
  • 无冲突:不同的信息具备不同的摘要
  • 易计算:对任意信息容易计算其摘要
  • 特征化:信息修改后其摘要一定变化

当然,实际上,前两个特性在应用中有一些不成立的情况。

虽然算法可以做到不可完全逆转,但是存在找到生成相同摘要的两段或更多信息的可能性。这是因为摘要信息的域值范围有限,只能表现有限种类的信息,在用来表示无限的信息时,肯定存在冲突。而在摘要算法的应用场景中,往往并不要求使用具体的原始信息,只要你能生成同样的摘要就可以了,因此,也出现了类似彩虹表这样的数据库,供根据摘要信息查询原始信息。

而且由于算法本身可能会存在的缺陷,就有可能通过算法找到两个具有相同摘要的信息。比如 2004 年,山东大学的王小云教授就率团队突破了 MD5 算法,可以找到具备相同的 MD5 摘要的两段信息,从而为 MD5 算法的死亡盖上了“核准”印章。

那么我们就来看看,包括 MD5 在内的这些哈希算法们,都活着怎么样?

valerieaurora.org 的跟踪,当前的摘要算法们的生存状况如下:

从上图可以看到,SHA-2 之前的算法,除了 RIPEMD-160 外,都已经被攻破或存在可实现的碰撞算法了,因此,再将其应用到产品中,就存在了各种风险。所以,尽快升级你的加密策略吧。