目录
7.1 杂凑函数
-
MD5、SHA-1等
-
由于抵抗生日攻击的原因,杂凑函数的杂凑值不小于128比特。
7.1.1 杂凑函数的性质及应用
1.分类
(1)不带密钥的杂凑函数,它只有一个被通常称为消息的输入参数;
(2)带密钥的杂凑函数,它有两个不同的输入,分别称为消息和密钥。
2.应用需求上杂凑函数H必须满足的性质
(1)H能够应用到任何大小的数据块上;
(2)H能够生成大小固定的输出;
(3)对任意给定的x,H(x)的计算相对简单,使得硬件和软件的实现可行。
3.安全意义上杂凑函数应满足以下特性
4.应用
7.2 杂凑函数的基本攻击方法
7.2.1 自由起始碰撞攻击
-
目的:找到两个不同的报文m1和m2使得H(m1)=H(m2)
碰撞攻击算法的指标分析:
7.2.2 生日攻击
7.3 基于分组密码的杂凑函数设计
杂凑函数的消息填充
7.4 MD5杂凑函数
7.4.1 MD5杂凑算法
-
输入:长度小于264的明文
-
输出:128位的报文摘要
1.MD5报文摘要流程
(1)初始化处理:消息填充
增加填充位,使长度模512等于448;填充长度,用64位表示原始消息长度,低位在前。
-
填充一个1和若干个0及64比特的(未填充)消息长度,使得填充后的消息比特总长度成为512比特的整数倍。
(2)明文分组,每组512位,分为L组
输入信息M按顺序每512位一组进行分组:M = M1,M2,…,Mn-1,Mn
(3)初始化MD缓冲区
MD5算法的中间结果和最终结果保存在128位的缓冲区中,缓冲区用4个32位的变量表示,这些变量被称为链接变量,初始化为(16进制):
A=0x67452301
B=0xEFCDAB89
C=0x98BADCFE
D=0x10325476
(4)处理消息
逐个分组用HMD5处理消息。每组分为16个32位字,M[k], k = 0, 1, 2…, 15
(5)输出
2.压缩函数HMD5
-
若压缩函数具有抗碰撞能力,那么迭代散列函数也具有抗碰撞能力
-
由四轮运算组成,每轮16步,共64步;每步对4个32位寄存器A,B,C,D中的数据进行处理;最后A,B,C,D中的值即为128位摘要
MD5的主循环(记为MD)框图:
(1)MD5主循环使用的轮(圈)
7.4.2 MD5算法的设计特点
-
MD5是一个不要求可逆的、无密钥的分组密码算法。
-
相对于异或运算来说,MD5中使用的四个非线性函数中的非线性运算是“按位或”和“按位与”。单纯从这四个非线性函数来看,它不提供输入比特信息的横向扩散,提供扩散性质的环节是模232加法运算,它不仅由于低位向高位进位的原因,实现了输入、输出的非线性关系,同时提供了使得该环节输入信息的低位向输出比特的高位扩散,再结合循环左移的运算,从而实现输入信息的完全扩散。
MD5强度:
-
MD5的每一位都依赖于消息的所有位
-
逻辑函数F,G,H,I的使用增加了混淆程度
-
MD5可能是128位Hash码中最强的算法
-
MD5抗密码分析的能力较弱
-
生日攻击代价为264数量级
-
王小云教授的碰撞攻击算法效率很高
-
7.5 SHA杂凑函数
7.5.1 SHA-1概述
-
SHA-1建立在MD4算法之上产生160比特消息摘要
-
输入小于264位,输出为160位
7.5.2 SHA-1的压缩函数
1.SHA的主循环(记为SHA)框图
2.SHA使用的轮(或称圈)函数
3.SHA工作过程:
4.SHA-1的消息扩展
5.SHA算法的设计特点
7.6 SHA-1与MD-5的比较A杂凑函数
1.抗强行攻击的安全性
-
SHA-1较强
2.抗密码分析的安全性
-
王小云教授的算法对MD5较高效,对SHA-1偏低
3.速度
-
都是32位加法运算
-
SHA-1执行80步,缓冲区160位
-
MD5执行64步,缓冲区128位
4.简单性和紧凑性
-
都易于实现
5.低字节在前(MD5)和高字节在前结构(SHA-1)
-
没有本质区别