大概是前天吧,朋友圈普天盖地地被sha1破解刷屏了。做这事的人是google,酷酷的google,喜欢酷酷的发一篇论文,然后一大堆人跟屁虫似的开始了实现之旅;喜欢酷酷的破解后,发一个报告,然后一众人又对谷歌顶礼膜拜。顶礼膜拜之余,人们不免心生怯意,这尼玛世上还有不被破解的加密算法吗?怎么感觉没有啊,都是玩得文字游戏啊。
也许有的朋友还并不是非常了解sha是个什么东东,直到它被破解的那一日。
让我们从maven repository目录下的文件说起吧:
相信你对这样的目录相当熟悉,发现没?这里边就有sha1文件。
pom和jar都有对应sha1文件。
SHA1 算法
安全哈希算法( Secure Hash Algorithm )主要适用于数字签名标准( Digital Signature Standard DSS )里面定义的数字签名算法( Digital Signature Algorithm DSA )。对于长度小于 2^64 位的消息, SHA1 会产生一个 160 位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
SHA1 有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。
也就是上面 maven 的那些 sha1 文件都是 jar 和 pom 对应的校验文件。
Wiki:
On February 23, 2017 and Google announced a practical collision attack against SHA-1, publishing two dissimilar PDF files which produce the same SHA-1 hash as proof of concept.
大概是在 2017 年 2 月 23 日 CWI Amsterdam 和 Google 宣布一个对 sha1 实践地冲突攻击,他们说,两个不同的 pdf 文件却产生了相同的 sha hash 。
为什么强调 pratical 呢?因为在这之前有人就说 sha1 不安全,但仅仅停留在理论层面。
2013 年, Marc Stevens 发表了一篇论文,概述了创建 SHA-1 碰撞的理论方法。他说两份不一样的 pdf 文件,可以散列到相同的 SHA-1 摘要。可能有雨他没时间也没基础设施破解这玩意,于是他说在实践中构建这种理论上攻击,要克服一些挑战。
然后谷歌就把这事干了。
当两个不同的数据(文档,二进制或网站的证书)散列到如上所示的相同摘要时,会发生冲突。实际上,对于安全散列函数不应发生冲突。然而,如果哈希算法有一些缺陷,如 SHA-1 ,一个资金充足的攻击者可以进行冲突。攻击者然后可以使用这种冲突来欺骗依赖于哈希的系统接受恶意文件代替其良性对应。例如,两个保险合同具有完全不同的术语。
破解难度有多大?
下面的列出了一些数字,让大家了解破解这种算法所需要的计算规模有多大:
总计900万兆(即百万的五次幂,具体为9,223,372,036,854,775,808)次SHA1计算。
要完成攻击的首个阶段需要单一CPU计算6500年。
要完成攻击的第二阶段需要单一GPU计算110年。
总之,就是也就只有谷歌这些云计算基础设施才能搞得定,不是谁都可以。
md5:只需要一个智能手机30秒就破解了。
sha-1 shattered:110GPU 需要一年;
sha-1 bruteforce:12000000GPU 需要一年。
下面是谷歌他们发出来的一个说明文件:
你也可以通过http://shattered.io/来在线检测自己的文件是否安全。
如何避免sha1安全问题?升级到sha256
什么类型的系统受到影响?任何依赖SHA-1进行数字签名,文件完整性或文件识别的应用程序都可能存在漏洞。 这些包括:
数字证书签名
电子邮件PGP / GPG签名
软件供应商签名
软件更新
ISO校验和
备份系统
重复数据删除系统
GIT
等等
TLS / SSL证书是否有风险?任何遵守CA /浏览器论坛法规的认证机构不允许再颁发SHA-1证书。 此外,要求证书机构在序列号字段内插入至少64位的随机性。 如果正确实施,这有助于防止风险。
我的浏览器会向我显示警告吗?从2017年1月发布的第56版开始,Chrome会将任何受SHA-1证书保护的网站视为不安全。 Firefox已计划于2017年初推出此功能,已于2017年2月24日淘汰了SHA-1。
GIT是否受影响?GIT强烈依赖SHA-1来识别和完整性检查所有文件对象和提交。 基本上可以创建两个具有相同的头提交哈希和不同内容的GIT存储库,例如良性的源代码和后代的。 攻击者可以选择性地为目标用户提供服务。 这将需要攻击者计算自己的冲突。
SVN是否受影响?是的 - 请小心,因为SHA-1碰撞文件正在破坏SVN存储库。 Subversion服务器使用SHA-1进行重复数据删除,并且当两个冲突文件提交到存储库时,存储库损坏。 这已经在WebKit的Subversion存储库中发现,并由我们独立确认。 我们注意到,在某些情况下,由于损坏,进一步提交被阻止。
如何修补/升级我的系统?考虑使用更安全的替代品,例如SHA-256或SHA-3。
如何检测此攻击?您可以使用上面的在线工具提交文件,并让他们检查对SHA-1的密码分析冲突攻击。 它的代码由Marc Stevens(CWI)和Dan Shumow(Microsoft)开发,并在GitHub上公开提供。
它基于反密码分析的概念,并且它能够检测已知和未知的SHA-1密码分析冲突攻击,只给出来自冲突文件对的单个文件。
谁能够进行这种攻击?这种攻击需要超过9,223,372,036,854,775,808个SHA1计算。这使得等价的处理能力为6,500年的单CPU计算和110年的单GPU计算。
这个攻击与强力攻击相比怎么样?SHAttered攻击比依靠生日悖论的暴力攻击快100,000倍。暴力攻击需要12,000,000 GPU年才能完成,因此是不切实际的。
你是如何利用PDF格式的这种攻击?一个差不多一千个大小的一张图片。就是下面这张:
这项研究背后的团队是谁?
这个结果是Centrum Wiskunde&Informatica(CWI) - 荷兰数学和计算机科学国家研究所和Google研究安全,隐私和反滥用小组的长期合作的产物。两年前,Marc Stevens和领导Google反滥用研究团队的Elie Bursztein开始合作,利用Google的专业知识和基础设施,使Marc对SHA-1的密码分析攻击成为可能。从那时起,许多CWI研究人员和Google员工帮助这个项目成为可能,包括从事密码分析和原型GPU实现的Pierre Karpman,以及开发PDF攻击的Google Ange Albertini,Yarik Markov负责分布式GPU代码,Alex Petit-Bianco实施了碰撞检测器来保护Google用户,Luca Invernizzi创建了在线文件检查程序,Clement Blaisse负责监督计算可靠性。