密码学-散列函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SHA-1和MD5的比较
对强行攻击的安全性(160bits vs 128bits ) 对密码分析的安全性(对SHA-1没有已知的 有效攻击方法) 速度(SHA-1稍慢) 简单性和紧凑性(都具备) 小数在前结构和大数在前结构(MD5—小 数在前;SHA-1—大数在前)
3、RIPEMD-160
RIPEMD-160的单步操作
RIPEMD-160的设计原则
使用两条包含五个循环的并行处理线增加 了在循环间寻找冲突的复杂性 为了简单,两条线本质上相同,但又有很 多差异 算法的单步处理步骤和MD5几乎相同 精心设计的排列ρ和π 精心设计的循环移位
1、 MD5算法 2、 SHA-1算法 3、RIPEMD-160算法
1、MD5算法
MD5报文摘要算法由Ron Rivest设计 该算法与MD2, MD4算法为一个系列 算法输入是任意长度的报文分组,算法输 出为 128 比特的散列值,输入是按512比特 的分组进行处理的 直到最近,MD5算法是使用最为广泛的安 全散列算法 该算法也是Internet 标准 ( RFC 1321)
2、Merkle-Damgard结构
这样一个迭代结构的特例是Merkle-Damgard结构。对于 这个结构可以证明,如果压缩函数compress是抗碰撞的, 那么迭代函数的合成值一定也是抗碰撞的。
CV0=IV
CVi = f(CVi-1, Yi-1) H(M) = CVL
三、现代实用的散列函数
SHA-1压缩函数
SHA-1基本单步操作
SHA-1四个循环中每一步可表示如下:
(A,B,C,D,E) (E+f(t,B,C,D) + S5(A) + Wt+ Kt), A, (B<<30), C, D) A,B,C,D,E:缓存中的5个字; t:步骤数(0<= t <=79); f(t, B, C, D):步骤 t 的逻辑函数(非线性); Sk:32比特参数循环左移 k 位; Wt:由当前512比特分组导出的一个32比特的字; Kt:一个额外的常数,使用4个不同的值; +:模232的加法;
5、输出,所有L个512比特的分组处理完毕后, 第L阶段产生的输出便是128比特的报文摘要(散列 值)
MD5处理一个512bit分组
MD5压缩函数
MD5的每一循环由对缓存ABCD的16步操作组成, 每一步操作的形式为 a = b + ( ( a + g(b,c,d) + X[k] + T[i] ) <<<s ) a,b,c,d : 缓存中的4个字,在不同的步骤中有 指明的顺序 ; g : 原始函数F,G,H,I中的一个; <<< s : 32bit循环左移s比特; X[k]: 当前512bit分组中第k个32bit的字; T[i]: 矩阵T中的第 i 个32bit的字; + : 模232加法;
MD5 单步操作
MD5 单步操作说明
在每一步中,4个字(a,b,c,d)被用来产生字 级别的循环右移,以更新这些字的内容; 并且4个字中只有一个被更新。在整个一个 循环中(16步),每个字被更新4次; 在每个循环的16步中分别使用1个不同的非 线性函数g(b,c,d), 总共有4个这样的函数, 标记为F,G,H,I;这4个函数有3个32比特的 输入,并产生一个32比特的输出,均按位 运算;
MD5的强度
MD5产生的散列值的每一比特均是输入报文中每 一比特的函数 Rivest认为MD5作为128比特的散列码是足够强的 目前对MD5的攻击已经有一些方法 目前,从密码分析的角度看,MD5被认为是易受 攻击的;从强行攻击的角度看,由于MD5的散列 码只有128比特, 其对抗生日攻击的有效级是264, 从现在的角度看也太小 因此,需要更强的散列函数来代替MD5
2、散列函数的需求
1、H能用于任意长度的数据分组; 2、H产生定长的输出; 3、对任意给定的X,H(X)要容易计算; 4、对任何给定的h,寻找 x 使得H(x)=h,在计算 上不可行(单向特性); 5、对任意给定的分组 x,寻找不等于 x 的 y,使 得 H(x)=H(y), 在计算上不可行(弱抗碰撞); 6、寻找任意的一对分组(x,y), 使得 H(x)=H(y) , 在计算上不可行(强抗碰撞)。
生日攻击可能的实施步骤
可用如下方法对散列函数进行生日攻击(假设散列函数的 输出长度为 m bit):
1)攻击者对合法报文创建 2m/2 个变种,所有这些变种本质上都和 合法报文表示同样的意思; 2)同样,攻击者再对伪造报文创建 2m/2 个变种; 3)比较这两个集合,以期发现任意一对能产生相同散列值的报文 对(合法报文变种、伪造报文变种),根据生日悖论,找到这样一对 报文的概率Pr > 0.5; 4)攻击者向签名者出示合法报文变种,让签名者对合法报文变种 的散列值签名;然后攻击者用伪造报文变种代替合法报文变种, 并声称签名者对伪造报文变种签名了。由于这两个报文具有相同 的散列值,因此欺骗总能成功。
SHA-1基本单步操作示意图
Kt的值
步数
0 <=t<= 19
16进制
5A827999
取整部分
[230 * sqrt(2)]
20 <=t<= 39
40 <=t<= 59
6ED9EBA1
8F1BBCDC
[230 * sqrt(3)]
[230 * sqrt(5)]
60 <=t<= 79
CA62C1D6
SHA-1总体逻辑
1)附加填充比特,使报文长度与448模512 同余; 2)附加长度值,共64比特; 3)初始化MD缓存(A,B,C,D,E)为 (67452301,efcdab89,98badcfe,10325476, c3d2e1f0) 4)处理512比特(16个字)报文分组序列; 5)输出;
[230 * sqrt(7)]
f(t, B, C, D)函数
步数 0 <=t<= 19 20 <=t<= 39 函数值
( B C ) (B D)
BC D
40 <=t<= 59 60 <=t<= 79
( B C ) ( B D) (C D)
BC D
Wt序列的生成过程
散列函数的目的是为文件、报文或其他分组数据 产生“指纹”,以保障数据的完整性; 散列函数常用于报文鉴别和数字签名; 散列函数是一个多对一的函数;
因此在理论上,必定存在不同的报文对应同样的散列, 但这种情况在实际中必须不可能出现(计算上不可行) 散列函数没有密钥的参与,散列值仅仅是报文的函数
散列函数本身不是保密的;
MD5算法概况图
MD5算法步骤
1、填充报文,使报文长度(比特数)模512等于 448(即填充长度为512的整倍数减去64)
填充比特的最高位为1,其余各位均为0
2、将用64比特表示的初始报文长度附加在步骤1 的结果后,这样填充后的报文长度为512比特的 整倍数 3、初始化由4个32比特寄存器(A,B,C,D)构成的 MD缓存(共128比特),该缓存用来存放MD5的中 间及最终结果
散列函数
Last Modified: 2008.04
一、散列函数
1、概况 2、散列函数的需求 3、生日悖论和生日攻击 4、散列函数的有效安全级别
1、散列函数
散列函数以一个变长的报文M作为输入,产生一 个定长的输出(散列码)的函数,可记为
h = H(M) ( |M| > |h| )
MD5的附加数字数组T
MD5的F、G、H、I函数
循环 1 2 3 4
函数g
g(b,c,d)
(b c) (b d) (b d) (c d)
bcd
F(b,c,d) G(b,c,d) H(b,c,d) I(b,c,d)
c (b d)
MD5 单步操作说明
32比特字数组X[0..15]保存当前512比特待 处理的输入分组的值,在一次循环的每一 步内,这16个字X[i]中的每一个只被使用一 次,但这些字的使用顺序在不同的循环中 不同; 在移次循环的一步中,表T中的64个32比特 字元素中的每一个也只被使用一次; 每个循环要使用4个不同的循环左移,且在 不同的循环中使用的不同;
生日攻击对散列函数的要求
生日攻击决定了一个仅依赖于散列值的集 合大小的散列函数的必要安全条件。
它意味着安全的消息散列的长度有一个 下界:
40 bit 的散列长度将非常不安全(因此仅仅在 220≈100万 个随机的散列值中就有 50% 的概 率发现一个碰撞); 一般建议最小的报文散列的长度为128bit,实 际中常采用160bit。
生日攻击
生日悖论实际上是如下问题的特例:已知一个在 1 到 n 之 间均匀分布的整数型随机变量,若该变量的一个 k 个取值 的集合中至少有两个取值相同的概率大于 0.5,则 k 至少 多大? 该问题的一般结论是:k≈1.18 * n1/2 例如对于生日悖论,有 n=365,因此 k ≈ 22.5。 通过“生日悖论”可以引出对散列函数的生日攻击法 通过这种方法,只要对超过 n1/2 个随机元素(n 是散列 函数输出集合的大小,如散列函数的输出为 m bit,则 n=2m)计算散列值,那么将有 0.5 的概率出现一个碰 撞。
ຫໍສະໝຸດ Baidu
4、散列函数的有效安全级别
综上,假设散列函数的输出为 m 比特,可以将其 抗各种攻击的有效安全级别表示为:
单向 弱抗碰撞 强抗碰撞
2m 2m 2m/2
二、散列函数的结构
1、安全散列函数的一般结构; 2、 Merkle-Damgard结构;
1、安全散列算法的一般结构
现代通用的散列函数一般都是通过将一个 有限定义域上的散列函数(也称为压缩函 数compress),通过迭代方式延拓为具有 无限定义域的散列函数; 通过这种方式构造的散列函数称为迭代散 列函数。
候选者为 SHA-1 和 RIPEMD-160
2、Secure Hash Algorithm (SHA-1)
SHA(安全散列算法)由NIST在1993年公 布(FIPS PUB 180),并在1995年进行了 修订,称为SHA-1( FIPS PUB 180-1); 算法是以MD4为基础进行设计的,做了重 要的改进; 算法产生160比特的散列码; SHA-1是目前首选的散列算法;
A = 67452301 C = 98BADCFE B = EFCDAB89 D = 10325476
MD5算法步骤
4、处理512比特(16个字)的报文分组序列
该步骤是整个MD5算法的核心,包括一个4个循环的压 缩函数。这4个循环都以当前正在处理的512比特的分 组和128比特的缓存值ABCD为输入,然后更新缓存的 内容; 4个循环具有相似的结构,但每次循环使用不同的原始 逻辑函数,分别为F, G, H, I; 每个循环还使用一个64元素表T[1..64]的四分之一,该 表通过正弦函数构建;
RIPEMD-160是在欧洲RIPE项目中由研究 人员开发而成的
RIPEMD-160总体逻辑
1)附加填充比特,使报文长度与448模512 同余; 2)附加长度值,共64比特; 3)初始化MD缓存(A,B,C,D,E)为 (67452301,efcdab89,98badcfe,10325476, c3d2e1f0) 4)处理512比特(16个字)报文分组序列; 5)输出;
不同安全特性的比较
显然,强抗碰撞特性包含弱抗碰撞特性; 另外可以证明,强抗碰撞特性包含单向特 性; 因此,散列函数满足强抗碰撞特性是充分 的,安全的散列函数只需要满足强抗碰撞 特性即可。
3、生日悖论
生日悖论问题
随机选 k个人,要其中至少有两个人生日相同的概率大 于 0.5,问 k 的最小值是多少? 对这个问题直观的考虑可能认为需要 k>=100,但实际 上可以证明:只需要 23人(k=23),他们中间至少有 两人生日相同的概率就会大于0.5。这个结果比人们的 直观想象要小得多,因此被称为“悖论”。 与此相对,如要求选择 K 个人,其中至少有一个人的 生日和某个指定的生日相同的概率大于 0.5,问 k 的最 小值是多少?(结论是 k >= 365/2 ≈183)