关于SHA-1构建的证书安全问题

sha-1不是加密是签名算法。证书能得到信任的根本是证书的内容被ca(可信第三方)签名保证。签名算法强度和签名密钥的私密性保证了这个证书的内容是可信的。签名算法一般是基于完整性校验的算法,一般是对要签名信息部分做一个摘要,再用密钥和摘要经过一定计算得到的结果。如果密钥(ca的私钥)泄露,那么分分钟可以伪冒一个证书出来。如果签名算法被破解,那么就存在证书信息被修改的可能性。修改的部分有可能有几个:1. 个人信息部分。有可能把自己已有被签好名的合法证书修改名称,例如把腾讯的证书修改为阿里的。这样就可以伪冒阿里2. 证书有效期,可以把过期证书改成有效的。3. ca和ra信息部分。本来是随意生成的证书,伪冒成是被大公司签名,比如被谷歌签名。自己随意生成一个证书,里面ca部分修改。但是这部分被修改后,验证端的可信公钥如果还是大公司的,那么校验还是通不过。可以修改ra地址,让验证端下载错误的crl,把一个已被撤销的证书用起来。4. 算法信息部分。这部分修改可能造成的后果,是把一个原来sha-192的改成sha-1。这个改动虽然可能,但意义不大。因为你只有破解了sha-192才有意义。5. 公钥部分。只改这部分意义不大,公私钥本来就是自己拥有的。但是公钥部分是二进制码。改其他部分都是明文,明文的信息空间有限,所以改完很可能找不到碰撞。可以在改完其他明文信息后,通过修改公钥部分去寻找碰撞。但是必须先算好符合代数结构的公私钥对,才能去检查碰撞。并不是随意找一个值可以做公钥的6. 如果是v3证书,则辅助信息也要注意。首先扩展字段可能被修改,比如证书用途。其次他为了凑碰撞,可能生成一个二进制的串作为扩展信息。扩展字段随意定义可以更容易找到碰撞。7. 签名部分。这部分不能变,因为验证端要用可信ca的公钥去做验证的。从上面的说明可以看出,伪冒者必须先有一个“曾经合法”的证书(并持有对应的私钥),然后通过修改去达到目的。这个是前提。这和ca私钥被泄露后可以随意伪造还是有很大差别。碰撞也不是能随意找到的,因为明文的信息空间太小,所以必须配合某些二进制字段的改动去寻找碰撞。找到碰撞但是并不一定能修改成自己想要的内容。这个修改还是有难度,花时间,花计算量的。即使如此,我们还是无法判断到底被修改的可能性有多大。为防止意外发生,还是假定“可以任意修改”。防止的办法很简单,在验证策略里配置不允许弱算法的签名证书即可。但是可能有兼容性问题。这个没办法,上面分析了,只要你允许了,别人可以伪造出来。
■网友
现在是17年2月,前几天刚宣布:Google 宣布攻破 SHA-1 加密:证明哈希值可与 PDF 文件内容冲突。
以SHA-1在HTTPS中作为签名算法为例,当申请SSL证书的网站在提交了csr(证书请求)文件以后,CA会对提交的csr文件用哈希算法做一次摘要,然后用CA的私钥(或者中级证书)对摘要进行加密,这就是数字签名,数字签名通常是为了确保文件的完整性,没有被篡改。
不同的文件通过哈希函数得到的哈希值不一致,如果不同文件也能计算出一致的哈希值也就是发生了哈希碰撞,则此哈希算法不再安全。
其中,现在常用的哈希算法是SHA-256,而早期的哈希算法也包括了SHA-1以及MD5。以下是的SSL证书的截图:
关于SHA-1构建的证书安全问题

回到题主的问题,既然SHA-1作为签名算法使用,那么它发挥的作用应该跟更早被淘汰的MD5算法作用应该是一致的。如果要了解SHA-1算法被攻破的危害,题主可以参考当年研究团队攻破MD5算法所使用的测试例子。传送门:MD5 considered harmful today 。
我粗略概(fan)括(yi)一下当年研究团队所使用的攻击手段。
首先是一张描述了正常网站证书操作流程的图表:


推荐阅读