散列函数攻击算法研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

为������ ∗ 512 + 448; 第二步、记录信息长度:用 64 位来存储填充前信息长度。这 64 位加在第一步结果的 后面,这样信息长度就变为������ ∗ 512 + 448 + 64 = (������ + 1) ∗ 512位。 第三步、装入标准的幻数(四个整数) :标准的幻数(物理顺序)是 (A = 01234567
浙江大学
散列函数攻击算 法研究
信电系-电子与通信工程-微电子 01 班
李喆 2016-10-26
散列函数攻击算法研究
Hash 函数是传统密码学的重要分支, 以 MD5、 SHA-1 为代表的经典 Hash 函数曾经被 广泛应用于各种加密和验证场景,例如在互联网安全协议 HTTPS 的 SSL 加密,大量的网 站采用了 SHA-1 算法进行身份验证。由于 Hash 算法的广泛应用,以及在密码协议中的重 要角色,Hash 算法的安全性一直是密码界的关注点。 散列函数中, 应用最为广泛的便是 MD5。 自其诞生以来, 相关的破解研究就一直不断。 1993 年,DenBoer 和 Bosselaers 首次公开发现了 MD5 的伪碰撞:两个不同的初始化向量 可以生成完全相同的 MD5 摘要;1996 年,Dobbertin 发现了一个 MD5 的碰撞对;2004 年 3 月,MD5CRK 项目演示了针对 MD5 算法的生日攻击;同年 8 月,王小云教授的团队对 MD4、 MD5、 HAVAL-128 和 RIPEMD 等四个著名算法实现了加速后的杂凑碰撞, 使得 MD5 的破解进入了可接受的运算范围;第二年 3 月,王小云等人演示了两个不同公钥的 X.509 证书的 MD5 值相同;不久后,VlastimilKlima 改进了算法,使得可以利用单台计算机,在 数小时内完成碰撞;2006 年 3 月,Klima 公布了一个算法,将运算量减少到一分钟;2010 年, 十二月, 谢涛和冯登国宣布第一个单块 MD5 碰撞, 他们向社区发出挑战, 奖励在 2013 年Biblioteka Baidu1 月之前找到不同的 64 字节碰撞算法的人;2012 年,Marc Stevens 响应该挑战,公布 了单块消息碰撞,以及相关的碰撞算法和源码。至此,MD5 已经可以在秒为单位的时间内 构建碰撞。在同期的时间里,SHA-1 遭到相同的碰撞攻击,最终的改进在最佳状态达到了 O(210 )的复杂度1,最坏情况O(215 )。随后,SHA-1、MD5 等算法被 SHA-22以及 SHA-3 等 继任者相许代替,基本退出了历史舞台。 自王小云教授采用特例化的差分攻击3破解了 MD5 以来, 如何寻找差分和差分路径的方 法成为了国内外密码学家关注的焦点,攻击算法针对 Hash 函数的内在结构缺陷进行攻击, 构造高效的攻击算法。王小云教授的算法正是利用了 MD5 中活动状态的高位 bit 不能尽快
此时, 由于位运算的特性, ℎ(������)的周期性被打破, 因此, 位运算起了混淆的作用。 此时,
如果对ℎ(������)进行暴力碰撞,由简单的鸽笼原理可知,复杂度至多为O(������),因此,������增大有 利于减少碰撞。进一步分析,由于函数中混淆由位运算承担,但是不管经过多少次位运算, 运算的位数是固定的,也就是说,当输入的数据������足够大,位数远远大于������时,有: ℎ ������ = ������������ℎ + ������������������ ������������������ ������ + ������ ������������������ ������ ������ℎ ≫ ������������ 那么,显而易见,此时的 h(n)的高位并未参与位运算,将再次出现周期性: ℎ ������ + ������ ∗ 2������ = ������������ℎ + ������������������ ������������������ ������ + ������ + ������ ∗ 2������ ������������������ ������ = ℎ(������) ������ℎ ≫ ������������ , ������ > ������ ������ 这种可以直接求解的周期性是不允许的, 特别是 Hash 算法作为大数据的摘要算法和验 证时,因此,需要对高位的混淆机制进行改进,无限增加位运算的位数是不可能的,因此, 将输入分段,并进行迭代,形成了现有的常见 Hash 机制5: 输入被拆分为等位长的数据,最后一组可以采用一定的约定补足位数:������0 , ������1 , … , ������������ ,每 组的位数长度为������,对于每一块数据: ℎ0 = ������0 ������0 ������������������ ������0 + ������0 % 2������ ℎ������ = ������������������ −1 ������������������ ������ + ������ % 2������ 如此一来,可以接受非常大的输入数据,并且数据的高低位均可以被引入混合。当然, 这样的混合也存在一定缺点,比如,越低位的数据混合的次数越多,越高位的数据混合的次 数越少。由于直接碰撞的复杂度与最终生成的值长度直接相关,除了增大 w 意外,为了计 算机计算方便,往往采用分组的方式,将数个数据块分成一组,组与组间对应数据进行迭代 的 Hash 运算,最终将结果相连,用以增长输出结果,也可以在迭代中引入更加复杂的运算 和轮次关系。接下来,将对综合了以上特点的 MD5 算法进行简单的介绍。 MD5 算法简要的叙述可以为:MD5 以 512 位分组来处理输入的信息,且每一分组又被 划分为 16 个 32 位子分组,经过了一系列的处理后,算法的输出由四个 32 位分组组成,将 这四个 32 位分组级联后将生成一个 128 位散列值6。 第一步、填充:如果输入信息的长度对 512 求余的结果不等于 448,就需要填充使得 对 512 求余的结果等于 448。填充的方法是填充一个 1 和 n 个 0。填充完后,信息的长度就
的充分混合4, 从而找到有效的差分和差分路劲成功攻击了 MD5 算法。 本文将从基础的协议 开始, 分析并构建散列函数的攻击算法, 分析散列算法作为密码协议基础的基本性质和弱点。
1. 散列函数的基本结构
散列函数从根本上来讲是一种多对一映射, 将一个有限或者无限的集合, 通过一个函数, 映射到一个有限的集合上。 所有散列函数都有如下一个基本特性: 如果两个散列值是不相同 的(根据同一函数) ,那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具 有确定性的结果。但另一方面,散列函数的输入和输出不是一一对应的,如果两个散列值相 同,两个输入值很可能是相同的,但并不能绝对肯定二者一定相等。输入一些数据计算出散 列值, 然后部分改变输入值, 一个具有强混淆特性的散列函数会产生一个完全不同的散列值。 典型的散列函数都有无限定义域,比如任意长度的字节字符串,和有限的值域,比如固定长 度的比特串。 在某些情况下, 散列函数可以设计成具有相同大小的定义域和值域间的一一对 应。一一对应的散列函数也称为排列。可逆性可以通过使用一系列的对于输入值的可逆“混 合”运算而得到。散列函数属于多对一的非解码映射,因此,往往用于验证或者传递,也因 此,函数的计算表达式往往是公开的,因此,只有足够复杂和精细设计的散列函数,才能够 安全的传递信息。 在实践中,Hash 函数的构成运算,往往是取余,四则运算、位运算、分组以及迭代。 我们先从一个基本的 Hash 函数开始,逐步分析散列函数的构成及其缘由: ℎ ������ = ������������ + ������ ������������������ ������ 该函数可以将任意整数映射到大小为 ������ 的集合,由同余的周期性,我们可知: ℎ ������ + ������������ = ������(������ + ������������) + ������ ������������������ ������ = ������������ + ������ ������������������ ������ + 0 = ℎ ������ 因此,当知晓函数的表达式时,此种散列函数可以直接构造碰撞,为了提高 Hash 函数 的单向性,消除其周期性,在 Hash 函数的运算组成中,引入了位运算: ℎ ������ = ������������ ������������������ ������ + ������ ������������������ ������
16 ,B
= 89ABCDEF
16 ,C
= FEDCBA98
16 ,D
= 76543210
。 16 )
第四步、四轮循环运算:循环的次数是分组的个数 ������ + 1 1)将每一 512 字节细分成 16 个小组,每个小组 64 位(8 个字节) 2)四个线性函数 ������ ������, ������, ������ = ������ ������������������ ������ ������������ ������������������ ������ ������������������ ������ ������ ������, ������, ������ = ������ ������������������ ������ | ������ ������������������ ������������������ ������ ������ ������, ������, ������ = ������ ������������������ ������ ������������������ ������ ������ ������, ������, ������ = ������ ������������������ ������ ������������ ������������������ ������ 3)设M������ 表示消息的第������个子分组(从 0 到 15)≫ ������表示循环左移������位,则四种操作为: ������������ ������, ������, ������, ������ , ������������ , ������, ������������ 表示������ = ������ + ������ + ������ ������, ������, ������ + ������������ + ������������ ≪ ������) ������������ (������, ������, ������, ������, ������������, ������, ������������ )表示������ = ������ + ������ + ������ ������, ������ , ������ + ������������ + ������������ ≪ ������) ������������ ������, ������, ������, ������, ������������ , ������������ 表示������ = ������ + ������ + ������ ������, ������, ������ + ������������ + ������������ ≪ ������) ������������ ������, ������, ������, ������, ������������ , ������������ 表示������ = ������ + ������ + ������ ������, ������, ������ + ������������ + ������������ ≪ ������) 4)四轮运算 第一轮 ������ = ������������ (������, ������, ������, ������ , ������0 , 7, ������76������������478 16 ) ������ = ������������(������, ������, ������, ������, ������1 , 12, ������8������7������756 16 ) ………… 第四轮 ������ = ������������ ������, ������, ������, ������ , ������0 , 6, ������4292244 16 ������ = ������������ (������, ������, ������, ������, ������7 , 10, 432������������������97 16 ) ………… 5)每轮循环后,将 A,B,C,D 分别加上 a,b,c,d,然后进入下一循环。
相关文档
最新文档