简介

hash是密码学和平时的程序中经常会用到的一个功能,如果hash算法设计的不好,会产生hash碰撞,甚至产生碰撞攻击。

今天和大家详细探讨一下碰撞攻击。

什么是碰撞攻击

所谓碰撞攻击指的是对于同一个hash函数来说,两个不同的input通过hash计算得到了同样的hash值。用公式来说就是:

hash(m1) = hash(m2)

这个攻击有什么作用呢?

举个例子,通常我们通过网络下载应用程序或者软件,除了下载链接之外,还会提供一个MD5的校验码。这个校验码就是用来校验下载的软件是不是官方提供的软件。

MD5算法也是一种hash算法,如果恶意用户可以构造一个和原始软件一样MD5的软件的话,就很可能实施碰撞攻击。

还有一种情况用在数字签名中。在数字签名中,因为效率的原因,如果文章特别大的情况下,通常会先取文章的hash值,然后对这个hash进行签名。

所以这里面有两个可以被攻击的地方,一个就是hash碰撞,一个就是签名算法。

举个例子,比如说师妃暄给徐子陵写了一封信A,说是凌晨的时候在竹林有事情相告,但是没有直接交给徐子陵而是给了他的好兄弟寇仲,寇仲考虑到夜晚太危险了,不想让他的好兄弟冒险,于是伪造了这封信A,构造了和原来的信A同样hash值的信B,并附带了师妃暄的签名。

徐子陵收到了信B和签名,经过验证发现确实是师妃暄写的,于是就没有去赴约。

碰撞攻击取决于hash算法的强度,像是MD5和SHA-1这些hash算法已经被证明是不安全的,可以在很快的时间内被攻破。

选择前缀冲突攻击

除了前面传统的碰撞攻击之外,还有一种叫做Chosen-prefix collision attack选择前缀冲突攻击。

攻击者可以选择两个不同的前缀p1和p2,然后附在不同的字符串m1,m2前面,那么有:

 hash(p1 ∥ m1) = hash(p2 ∥ m2)    其中 ∥ 表示连接符

我们看一个在SHA-1中由盖坦.勒伦(Gatan Leurent)和托马.佩林(Thomas Peyrin)发现的一个攻击的例子,这是两个分别带有前缀99040d047fe81780012000和99030d047fe81780011800的例子。

两个消息内容可以从下面下载:

messageA: sha-mbles.github.io/messageA

messageB:sha-mbles.github.io/messageB

我们可以看下消息的截图:

这两个消息经过sha1sum运算,可以得到相同的hash值。

sha1sum messageA : 8ac60ba76f1999a1ab70223f225aefdc78d4ddc0

sha1sum messageB: 8ac60ba76f1999a1ab70223f225aefdc78d4ddc0

java中的hash攻击

java中有一个经常会用到的类叫做hashMap,在JDK7之前,HashMap在存储数据的时候如果遇到了hash冲突,则会将数据以链表的形式插入到这个hash节点的最后。

这样会有什么缺点呢?

那么就是如果有恶意攻击者,一直向hashMap中插入同样hash值的key对象,那么hashMap实际上就会退化成为一个链表。

这样会大大影响hashMap的查询效率。如果数据特别大的话,可能就会导致DDOS攻击。

这个问题的根本原因就是java中hashMap中的hash计算太过简单,很容易就能够找到相同hash值的key。

实际上在2011年tomcat还发布了一个关于这个问题的漏洞解决方案。

虽然这是java的问题,但是最后的锅还是由tomcat来背。tomcat的做法就是限制maxPostSize,从最大的20M改成了10K,这样可以有效的减少请求中的item大小。

当然,在JDK8中,原来的链表结构已经被改成了红黑树结构,相信也是为了避免这种DDOS hash攻击的方案。

原像攻击Preimage attack

和碰撞攻击类似的还有一个攻击叫做原像攻击。

原像攻击的抵御需要满足两个条件,第一个条件是给定一个hash值y,很难找到一个x,使得hash(x)=y。

第二个条件就是给定一个x,很难找到一个y,使得hash(x) = hash(y)。

很明显,碰撞攻击的抵御一定满足第二个条件,但是不一定满足第一个条件。

本文已收录于 http://www.flydean.com/collision-attack/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

密码学系列之:碰撞抵御和碰撞攻击collision attack相关推荐

  1. 如何防止因哈希碰撞引起的DoS攻击

    如何防止因哈希碰撞引起的DoS攻击 理解哈希 什么是哈希 哈希和数组 哈希算法 哈希碰撞 鸽巢原理 为什么不能避免哈希碰撞 哈希算法的特点 如何解决哈希碰撞 开放寻址法 线性探测 线性探测法适用场景 ...

  2. 现代密码学5.4--对哈希函数的攻击

    现代密码学5.4--对哈希函数的攻击 生日攻击 生日问题 博主正在学习INTRODUCTION TO MODERN CRYPTOGRAPHY (Second Edition) --Jonathan K ...

  3. 区块链中的密码学系列之SHA256算法(三)

    1. 前言 SHA系列算法是一种密码散列函数,由美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS).现在已经被破解. 我们本文主要研究SHA256算法. 2. ...

  4. 密码学系列(二):专有名词缩写【持更】

    密码学系列(二):遇到的一些专有名词缩写[持更] 密码学相关 密码产品所需 密码学相关 CRL:证书吊销列表 在线证书状态协议(OCSP):一个互联网协议,用于获取符合X.509标准的数字证书的状态. ...

  5. 密码学系列 - 可验证时延加密算法(VDF)

    可验证时延加密函数(Verifiable Time-Delay Encoding Function): VDF有两大要求,即时间要求(加密时间长,而解密时间短)和可验证要求(证明与验证过程高效).目前 ...

  6. 密码学系列(四):整理世界性网络安全相关组织、企业的网站【持更】

    密码学系列(四):整理世界性网络安全相关组织.企业的网站[持更] 前言 各网站 Thales 泰勒斯 BI.ZONE RSA Unbound Security Fasso 富信 Intertrust ...

  7. 密码学系列之:SAFER

    简介 分组密码是一个非常优秀的加密结构,很多常用加的加密算法使用的都是分组算法,比如DES.SAFER表示的也是一种分组密码算法.一起来看看吧. SAFER简介 SAFER的全称是Secure And ...

  8. 密码学系列(一):密码行业、政策介绍

    密码学系列(一):密码行业.政策介绍 管理部门 <密码法>(19年) <密码法>具体章节 第3章 商用密码 第4章 法律责任 相关零散知识 管理部门 国家密码管理局--商密办- ...

  9. 密码学系列 - 椭圆曲线签名的基本原理

    ECDSA 涉及到三个重要的概念 第一个是私钥,私钥是一个只有我自己知道的数字,我可以用私钥去生成签名,比特币使用的私钥是一个256 bit 的整数. 第二个是公钥,公钥是跟私钥配对的一个数,是根据私 ...

最新文章

  1. SIFT 特征检测及匹配
  2. Android 获取当前日期距离过期时间的日期差值的完整方法直接使用
  3. docker安装Jenkins+BlueOcean
  4. 自动弹窗被拦截 html,弹出式窗口被阻止怎么办,如何阻止弹出式窗口
  5. 利用nginx建立windows软连,实现IP访问文件
  6. 网络批量后修改服务器,企业网络批量安装服务器搭建案例
  7. 漫画:如何给女朋友解释什么是2PC(二阶段提交)?
  8. Google maps API开发(一)(转)
  9. 在Linux环境下select函数的初体验
  10. 吴俊计算机音乐研究者,音乐与科学有效整合的研究
  11. Excel VBA 函数
  12. JavaScript中getYear,getMonth,getDate()
  13. kpi绩效考核流程图_一种数字化KPI绩效考核方法和装置与流程
  14. t5_Sophisticated Algorithmic Strategies(MeanReversion+APO+StdDev_TrendFollowing+APO)_StatArb统计套利_PnL
  15. JS-underfined is not a function
  16. android 视频背景图片,安卓手机怎么给视频添加背景图片 上下图片中间视频画面的小视频制作...
  17. cdrx8如何批量导出jpg_cdr x8批量导出插件
  18. 面试中常见线程的50个问题
  19. 模块内高内聚?模块间低耦合?MVC+EF演示给你看!
  20. linux运维是什么

热门文章

  1. 埃及分数问题——迭代加深搜索
  2. 下图为双总线结构机器的数据通路_PDPS机器人虚拟调试 弧焊仿真 第一课 弧焊项目创建...
  3. Duilib教程-简单介绍
  4. 漫游Kafka设计篇之消息传输的事务定义
  5. cocos2d-x初探学习笔记(21)--精灵类
  6. 原始 H.264 码流播放
  7. Nginx 反向代理、动静分离、负载均衡及配置实例
  8. 精美技术图赏|技术精华
  9. 由“深”至“广”,探索2022音视频技术的无限可能
  10. 技术实战 —— 快速实现语聊房搭建