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

最新文章

  1. WebService异常时,查看请求状态码方法
  2. [Cocos2D-x For WP8]Sprite精灵
  3. C++ 中的名称冲突之 "y1"
  4. CocoaPods - 在 Mac 中的生与死
  5. 跟我一步一步开发自己的Openfire插件
  6. [转载]jQuery.extend 函数详解
  7. 编译的时候 c:\windows\assembly\ 卸载不掉
  8. B - Moving Tables
  9. ArcGIS for Silverlight 地图卷帘
  10. springMVC3学习(三)--handlerMapping和handlerAdapter
  11. Redis数据结构底层知识总结
  12. mybatis --- 以接口的方式进行编程
  13. Web后台快速开发框架
  14. C++智能指针剖析(上)std::auto_ptr与boost::scoped_ptr
  15. Canvas Demo
  16. SSH框架整合实现Java三层架构实例(一)
  17. python面试
  18. JavaScript:改变 HTML 图像
  19. 超级账本Hyperledge的关键部件说明
  20. MySQL/InnoDB中,对于锁的认识

热门文章

  1. Ubuntu14.04桌面系统允许root登录
  2. Ambari安装之部署 (Metrics Collector和 Metrics Monitor) Install Pending ...问题
  3. python数据可视化(matplotlib)
  4. 导出EXCEL遇到问题
  5. Hadoop常用命令集合
  6. JAVA环境变量关于
  7. C#生成无重复的随机数
  8. python进阶(3):模块和包
  9. public static void main(string[] args)解释
  10. 正则表达式(即:匹配模式Pattern)