哈希算法生存状况报告
最近一个新闻说，原本各大浏览器厂商推动在 HTTPS 中放弃支持 SHA-1 算法，但是由于 Facebook 等公司认为尚有少部分用户采用老式的 SHA-1 算法，而建议延长支持期。姑且不论浏览器厂商和应用厂商的做法谁更合理，那么这里提到的 SHA-1 算法是什么呢？它有什么风险么？ 密码学里面有一类算法叫做哈希hash算法，也称作散列算法、摘要算法，通常用于对一段信息的取样。当你给它一段信息（message）时，可以用特定算法生成一段信息摘要（message digest），通常摘要的长度更短。摘要（digest）可以表示这段信息的某种特征就如同指纹一样，所以
摘要 哈希 指纹
125.71.229.144
前排跪舔wxy大牛
来自四川成都的 Mobile Safari 9.0|iOS 9.2 用户
2016-01-12T13:43:14.000
123.120.56.190
啊~~！
linux [Chrome 47.0|Mac 10.11]
2016-01-12T20:38:28.000
最近一个新闻说，原本各大浏览器厂商推动在 HTTPS 中放弃支持 SHA-1 算法，但是由于 Facebook 等公司认为尚有少部分用户采用老式的 SHA-1 算法，而建议延长支持期。姑且不论浏览器厂商和应用厂商的做法谁更合理，那么这里提到的 SHA-1 算法是什么呢？它有什么风险么？ 密码学里面有一类算法叫做哈希hash算法，也称作散列算法、摘要算法，通常用于对一段信息的取样。当你给它一段信息（message）时，可以用特定算法生成一段信息摘要（message digest），通常摘要的长度更短。摘要（digest）可以表示这段信息的某种特征就如同指纹一样，所以
最近一个新闻说，原本各大浏览器厂商推动在 HTTPS 中放弃支持 SHA-1 算法，但是由于 Facebook 等公司认为尚有少部分用户采用老式的 SHA-1 算法，而[建议延长支持期](/article-6721-1.html)。姑且不论浏览器厂商和应用厂商的做法谁更合理，那么这里提到的 SHA-1 算法是什么呢？它有什么风险么？


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


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


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


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


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


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


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


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


据 [valerieaurora.org](http://valerieaurora.org/hash.html) 的跟踪，当前的摘要算法们的生存状况如下：


![](/data/attachment/album/201601/09/222437dyksyeztsjaalcz4.jpg)


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

