Google研究人员宣布完成全球首例SHA-1哈希碰撞!
2004年的国际密码讨论年会(CRYPTO)尾声,我国密码学家王小云及其研究同事展示了MD5、SHA-0及其他相关杂凑函数的杂凑碰撞并给出了实例。时隔13年之后,来自Google的研究人员宣布完成第一例SHA-1哈希碰撞。
什么是SHA-1算法,什么是碰撞?
SHA-1(Secure Hash Algorithm 1,中文名:安全散列算法)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
由于算法的特点,消息摘要往往有以下特点:
难以由一个已知的散列数值,去推算出原始的消息在不更动散列数值的前提下,修改消息内容是不可行的对于两个不同的消息,它不能给与相同的散列数值
因此在信息安全中,有许多重要的应用,都使用了密码散列函数来实现,例如数字签名,消息认证码,甚至当你从网上下载文件,为了防止文件被篡改,很多网站也会公布文件相应的校验值。
而所谓哈希碰撞,简而言之就是:先得出一个字符串的哈希值,再根据这个值,逆算出另外一个不同的字符串——但保证它们的检验值完全一致。如果存在碰撞的可能,消息摘要的唯一性就被破坏,这个算法也不再安全。
2004年的国际密码讨论年会(CRYPTO)尾声,我国密码学家王小云及其研究同事展示了MD5、SHA-0及其他相关杂凑函数的杂凑碰撞并给出了实例(Collisions for hash functions MD4, MD5, HAVAL-128 and RIPEMD,rump session of CRYPTO 2004,How to Break MD5 and Other Hash Functions,EuroCrypt 2005)。这项研究当时轰动一时,直接宣告MD5算法不再安全。而人们对于SHA-1碰撞算法的研究也从未停止过,直到2月23日Google研究人员公布首例SHA-1哈希碰撞实例。
研究过程
这项研究成果来源于荷兰数学和计算机科学国家研究所和Google安全、隐私和反滥用研究小组的长期合作。两年前,Marc Stevens和领导Google反滥用研究团队的Elie Bursztein开始合作,利用Google的专业性和强大的计算能力,实现Marc对SHA-1的密码分析攻击。2013年时,Marc Stevens曾经发表论文阐述制造哈希碰撞的理论方法。
研究人员在他们的研究网站SHAttered上给出了两份内容不同,但是具有相同SHA-1的PDF文件。
1487904540368.jpg (24.1 KB, 下载次数: 0)
下载附件 保存到相册
2017-2-24 12:18 上传
根据Google博客给出的数据,改进后的shattered攻击完成这一次SHA-1哈希碰撞需要单一GPU计算110年。而传统的暴力搜索方式则需要单一GPU计算12000000年,即便是拥有强大计算能力的Google也无力承担。
安全建议
SHA-1哈希算法本身存在缺陷,这就导致理论上一直存在碰撞可能,而这次碰撞实例的出现更是完全否定了算法的安全性。SHA-1的应用众多,比如浏览器证书、Git管理代码仓库,甚至校验文件是否相同,所以将SHA-1替换为更安全的算法就显得尤为紧迫。实际上早在2014年,Chrome浏览器就不再推荐SHA-1算法的浏览器证书,微软Edge浏览器、Firefox浏览器都在计划逐步淘汰SHA-1算法。在博客中,Google建议大家切换到更安全的SHA-256和SHA-3算法。
90天后,Google还会提供代码让大家生成两份拥有相同SHA-1值而内容不同的PDF文件。
研究网站:https://shattered.it/
相关论文:https://marc-stevens.nl/research/papers/SBKAM17-SHAttered.pdf
最新文章
- WebService异常时,查看请求状态码方法
- [Cocos2D-x For WP8]Sprite精灵
- C++ 中的名称冲突之 ";y1";
- CocoaPods - 在 Mac 中的生与死
- 跟我一步一步开发自己的Openfire插件
- [转载]jQuery.extend 函数详解
- 编译的时候 c:\windows\assembly\ 卸载不掉
- B - Moving Tables
- ArcGIS for Silverlight 地图卷帘
- springMVC3学习(三)--handlerMapping和handlerAdapter
- Redis数据结构底层知识总结
- mybatis --- 以接口的方式进行编程
- Web后台快速开发框架
- C++智能指针剖析(上)std::auto_ptr与boost::scoped_ptr
- Canvas Demo
- SSH框架整合实现Java三层架构实例(一)
- python面试
- JavaScript:改变 HTML 图像
- 超级账本Hyperledge的关键部件说明
- MySQL/InnoDB中,对于锁的认识