单向杂凑函数解读
第六讲认证与杂凑函数.
多余数字,在信道中可传送的序列集中只有一小部分用于传信。这是认 证和纠错赖以实现的基本条件。纠错码的目的是抗噪声等干扰,要求将 码中各码字配置得尽可能地散开(如最小汉明距离极大化),以保证在干扰 作用下所得到的接收序列与原来的码字最接近。在最大似然译码时可以 使平均译码错误概率极小化。认证码的目的是防止伪造和受骗。对于发 送的任何消息序列(或码字),窜扰者采用最佳策略所引入的代换或模拟伪 造序列应尽可能地散布于信道可传送的序列集中。在认证系统中,密钥 的作用类似于信道的干扰,在它们的控制下变换编码规则,使造出的代 表消息的码字尽可能交义地配置,即将消息空间X最佳地散布于输出空间 (信道传送序列集)Y之中,以使窜扰者在不知道密钥情况下,伪造成功的 概率极小化。
一、 认证与认证系统
log pd -1/2{H(K)-H(XY)+H(Y)} =-1/2{H(K)-H(X|Y) (6—1—19) 证明 对具有保密性的认证有 log pdmax{log pI,-H(K|Y)} (6—1—20) 而对于无保密的认证有 log pdmax{log pI,-H(K|XY)} (6—1—21) 显然 max{log pI,-H(K|Y)1/2{log pI-H(K|Y)} (6—1—22) max{log pI,-H(K|XY)1/2{log pI-H(K|XY) (6—1—23) 将式(6-1-7)代入式(6-1-22)中的pI,并将式(6-1-10)代入式(6-12018/8/13 12 23)中的pI可分别得到:
二、认证码
但其H(KY)=0,因而有I(Y; K)=1 bit,由此可知有pI1/2。但对j,p(yj为认 证码字)=1/2,故有pI=1/2,此为最小可能的取值。但当窜扰者截获到yj后, 就会知道当前所用密钥下认证码的另一个码字,因而总可用代换攻击取 得成功。所以,有 pS 1 pd 2 I (Y ;Z ) 1 / 2 。这一认证方案无安全性可言。 本例说明,代换攻击较模仿攻击更难于防范。
第6章[第2部分]杂凑函数
单向杂凑函数安全性要求
杂凑函数的安全性取决于其抗击各种攻 击的能力,对手的目标是找到两个不同消 息映射为同一杂凑值。一般假定对手知道 杂凑算法,采用选择明文攻击法。
网络工程学院©
单向杂凑函数安全性
对杂凑函数的基本攻击方法: 穷举攻击法:给定h=h(H0, M),其中H0为初值,攻击 者在所有可能的M中寻求有利于攻击者的M’’,使h(H0, M’)=h(H0, M),由于限定了目标h(H0, M)来寻找h(H0, M’), 这种攻击法称为目标攻击。若对算法的初值H0不限定,使 其h(H0', M)等于h(H0, M’),则称这种攻击法为自由起始 目标攻击。 生日攻击:这种攻击法不涉及杂凑算法的结构,可用 于攻击任何杂凑算法。强杂凑函数正是基于生日悖论一类 的攻击法定义的。穷举和生日攻击都属选择明文攻击。生 日攻击给定初值H0,寻找M’M,使h(H0, M’)=h(H0, M), 也 可 对 初 始 值 H0 不 加 限 制 , 即 寻 找 H0’, M’ 使 h(H0’, M’)=h(H0, M)。 网络工程学院©
网络工程学院©
单向杂凑函数基本概念
单向杂凑函数 定义1 若杂凑函数h为单向函数,则称其为单向 杂凑函数。 显然,对一个单向杂凑函数h,由M计算H=h(M)是 容易的,但要产生一个M'使h(M')等于给定的 杂凑值H是件难事。 定义2 弱单向杂凑函数:若单向杂凑函数h,对任 意给定M的杂凑值H=h(M)下,找一M‘使h(M’)=H 在计算上不可行。 定义 3 强单向杂凑函数:对单向杂凑函数h,若要 找任意一对输入M1, M2,M1 M2, 使h(M1)=h(M2) 在计算上不可行。
网络工程学院©
杂凑函数(hash函数)
h是多对一映射
密码学第七章 杂凑函数
报文
杂凑函数H 报文摘要
一、杂凑函数的概念
杂凑函数的应用
完整性认证:(m,H(m)) m的任何改变都将导致杂凑值 H(m) 的改变,
需要完整性认证时,只需计算 H(m) 并与存储的 H(m) 相比较即可。
一、杂凑函数的概念
杂凑函数的应用
数字签名:(m,sig( H(m) )实现真实性 通常用公钥算法进行数字签名时,一般不是
二、基本攻击方法
证明: N个杂凑值互不相同的排列方式总数为
P2Nn 2n (2n 1)(2n 2)(2n N 1)
但从{0,1}n中随机选取N个点的方式有(2n)N种,因
而S中的点互不相同的概率(失败率)为
p P2Nn 2nN
2n (2n
1)(2 n
2)(2n 2nN
N
1)
N 1
(1
成功率分析
定理 设杂凑值为n比特且N远小于2n,则碰撞攻击
的成功率近似为
1 e
N2 2n1
特别地,当 N 2n 时,碰撞攻击的成功率近似为
1 e0.5 1 1 0.393 2.718
特别地,当 N 2n1 时,碰撞攻击的成功率近似为 1 e1 1 1 1 0.368 0.632 2.718
密码学
第七章 杂凑函数
第七章 杂凑函数
1 杂凑函数的概念 2 基本攻击方法 3 基于分组密码的杂凑函数 4 MD5杂凑算法 5 SHA杂凑函数
一、杂凑函数的概念
(一)基本概念
杂凑函数又称为Hash函数,报文摘要函数等。 其目的是将任意长度的报文 m压缩成指定长度的数 据 H(m)。
H(m)又称为m 的指纹。
(二)杂凑函数应满足的条件
(4) 对于任意的h,要发现满足H(m) = h的m是计算 上不可行的; (5) 对于任意给定的m1,要找到满足H(m2)=H(m1), 而 m2≠ m1 的m2,是计算上不可行的; (6) 要发现满足 H(m1) = H(m2),而 m1≠ m2 的对 (m1, m2) 是计算上不可行的。
杂凑函数 散列函数
杂凑函数散列函数一、杂凑函数杂凑函数是一种将任意长度的输入数据(也称为关键字)转换为固定长度的输出数据的方法。
输出数据的长度通常被称为散列值的位数。
由于杂凑函数在处理大量数据时,可以将数据分布到固定长度的散列表中,因此它们在密码学、数据压缩、数据存储等领域得到了广泛应用。
1. 杂凑函数的原理杂凑函数的基本原理是将输入数据通过一系列复杂的数学运算,生成一个散列值。
这些数学运算通常包括哈希函数、压缩函数、置换函数等。
杂凑函数的输出结果应该是散列值,而不是具体的数据,因此其输出结果通常无法直接与输入数据建立一一对应的关系。
2. 杂凑函数的性能指标性能指标主要包括散列值的位数、碰撞率、负载因子等。
散列值的位数决定了输出的散列值可以表示的长度,对于某些应用来说,过短的位数可能会导致数据无法有效存储或检索。
碰撞率是指两个不同的输入数据生成相同散列值的情况,负载因子则是指散列表中存储的键值对数量与散列表容量的比值。
3. 常见杂凑函数算法常见的杂凑函数算法包括MD5、SHA-1、SHA-256等。
这些算法均采用了特定的数学运算方法,如乘法、位移、异或等操作,生成散列值。
此外,这些算法通常还提供了碰撞检测机制,以保证输出的散列值是唯一的。
二、散列函数散列函数是一种将任意长度的数据转换为固定长度的数据的函数,但与杂凑函数不同的是,散列函数通常要求在已知输出结果的情况下,能够通过输入数据重新得到输出结果,而不需要进行其他复杂的数学运算。
散列函数在密码学中具有重要的应用价值,例如哈希链的构建、数字签名等。
1. 散列函数的性能指标散列函数的性能指标主要包括碰撞率、单向性、计算复杂度等。
碰撞率是指两个不同的输入数据产生相同散列值的情况,单向性是指无法从散列值反推出原始输入数据,计算复杂度则是指生成散列值所需的时间和空间。
2. 常见散列函数算法常见的散列函数算法包括MD4、SHA-0、SHA-3等。
这些算法在计算过程中采用了多种不同的技术手段,如特殊的哈希函数结构、位运算等操作,以实现高效的散列计算。
第6章 消息认证和杂凑函数
图6.1 MAC的基本使用方式
2013-8-26源自•如果仅收发双方知道K,且B计算得到的 MAC与接收到的MAC一致,则这一系 统就实现了以下功能:
① 接收方相信发送方发来的消息未被篡改, 这是因为攻击者不知道密钥,所以不能够 在篡改消息后相应地篡改MAC,而如果仅 篡改消息,则接收方计算的新MAC将与收 到的MAC不同。 ② 接收方相信发送方不是冒充的,这是因为 除收发双方外再无其他人知道密钥,因此 其他人不可能对自己发送的消息计算出正 确的MAC。
2013-8-2
12
• 第1轮 已知M1、MAC1,其中 MAC1=CK(M1)。对所有2k个可能的密钥计算 MACi=CKi(M1),得2k-n个可能的密钥。 • 第2轮 已知M2、MAC2,其中 MAC2=CK(M2)。对上一轮得到的2k-n个可能的 密钥计算MACi=CKi(M2),得2k-2×n个可能的密 钥。 • 如此下去,如果k=αn,则上述攻击方式平均需 要α轮。例如,密钥长为80比特,MAC长为32 比特,则第1轮将产生大约248个可能密钥,第2 轮将产生216个可能的密钥,第3轮即可找出正 确的密钥。
2013-8-2
11
• 假定k>n,且敌手已得到M1和MAC1,其中 MAC1=CK1(M1),敌手对所有可能的密钥 值Ki求MACi=CKi(M1),直到找到某个Ki使得 MACi=MAC1。由于不同的密钥个数为2k,因 此将产生2k个MAC,但其中仅有2n个不同, 由于2k>2n,所以有很多密钥(平均有2k/2n=2kn个)都可产生出正确的MAC ,而敌手无法知 1 道进行通信的两个用户用的是哪一个密钥,还 必须按以下方式重复上述攻击:
2013-8-2 17
杂凑函数 散列函数 -回复
杂凑函数散列函数-回复什么是杂凑函数和散列函数?它们有什么不同之处?在现实生活中,我们如何使用它们来保障数据的安全性和完整性?杂凑函数和散列函数是密码学中常用的两种概念。
杂凑函数,也被称为哈希函数,是一种将任意长度的输入映射成固定长度输出的函数。
而散列函数,是一种将输入按特定规则转换为固定长度输出的函数。
虽然它们在概念上类似,但在一些细节上有所不同。
一、杂凑函数杂凑函数的作用是将任意长度的输入转换为固定长度的输出,常见的输出长度有128位、256位等。
它的一大特点是,对于相同的输入,输出的结果也是相同的。
即使输入中只有最小的改动,输出结果也会发生很大的变化。
这使得杂凑函数在数据完整性验证、密码校验等方面具有重要的作用。
杂凑函数的设计要求具备以下特性:1. 独特性:每个不同的输入应产生唯一的输出,确保了数据的独一性。
2. 不可逆性:根据输出结果无法逆推出原始输入,保护了数据的安全性。
3. 雪崩效应:即原始输入的微小变动会引起输出结果的巨大变化。
在实际应用中,杂凑函数常被用于密码校验、数字签名、数据完整性验证等场景。
比如,我们常见的MD5、SHA-1、SHA-256等算法就是用于生成杂凑值的算法。
在密码校验中,系统会将用户输入的密码与预存储的密码进行杂凑计算,对比其结果是否一致,从而判断用户密码是否正确。
二、散列函数散列函数也是一种将输入映射成固定长度的输出,但与杂凑函数相比,散列函数更注重将输入分散在输出空间中,以减少冲突。
假设输入空间为无限大,而输出空间为有限大,散列函数的目标是尽可能均匀地将输入分布到输出空间,以避免碰撞。
散列函数的设计要求具备以下特性:1. 均匀性:将输入映射到输出空间中的每个值的概率相等。
2. 易计算性:计算散列函数的时间复杂度应该尽可能低,以提高效率。
3. 隐蔽性:根据输出结果无法推断出输入的信息,保护了数据的安全性。
在实际应用中,散列函数常被用于数据存储和查找。
比如,哈希表(Hash Table)是一种常见的数据结构,它使用散列函数将键映射为对应的数值,以实现高效的数据存储和查找。
单向Hash函数SHA-256的研究与改进
第6章RFID系统中的安全和隐私管理(院长听课)-9.
有限域
1、非对称密钥
非对称密钥即公钥密码的主要优点是密码管理 容易,其思想是把密码分为公私钥对。公私钥 对的关系是单向关系。公钥对外公布,私钥自 己保存。用公钥加密的数据,用私钥解密;反 之,用私钥加密的数据,用公钥解密。已知公 钥得不出私钥,更确切的说已知公钥很难的私 钥,在计算上是不可行的
2. 历史的发展 1976年,D-H,Diffie-Helman密钥交换体制; 1984年,IBC,Shamir基于标识的签名方案; 1996年,PKI,基于第 三方的签名; 2001年,IBE,B-F, 基于标识的密钥交换; 2003年,CPK,基于标识的签名和密钥交换;
简单背包系统 的例子 给定10元组(43,129,215,473,903, 302,561,1165,697,1523),从中选 几个数使他们的和是3231。
561 43
302
ቤተ መጻሕፍቲ ባይዱ1523
1291165
697 473215 903 3231
大整数分解、有限域离散对数难题、 椭圆曲线都是算法复杂度意义上的单向
非对称密钥涉及的概念——单向思想 1、杂凑(散列)函数 2、大家熟悉的背包系统 3、介绍一下大整数分解、有限域离散对数难题、 有限域椭圆曲线。
单向思想 1、杂凑函数的数学定义(略) 单向杂凑函数的直观理解 功能理解:将长的消息压缩为一个短得多的摘 要,原消息只要有一点改动,摘要的结果就不一 样。不同的消息经过杂凑函数处理过后的结果不 一样。反推不成立,即由摘要结果推原消息不成 立
杂凑函数 散列函数
杂凑函数(散列函数)1. 定义杂凑函数(Hash Function),也称为散列函数,是一种将任意大小的数据映射到固定大小的数据的函数。
它将输入数据通过一系列的计算操作,转换成一个固定长度的输出,通常称为散列值或哈希值。
杂凑函数是密码学、数据完整性校验、数据索引等领域中重要的基础工具。
2. 用途杂凑函数有广泛的应用,主要包括以下几个方面:2.1 数据完整性校验杂凑函数可以用于验证数据的完整性,即通过计算数据的散列值,然后与预先保存的正确散列值进行比对,来判断数据是否被篡改。
这在网络传输、文件存储等场景中非常重要,可以有效防止数据被篡改而不被察觉。
2.2 数据唯一标识杂凑函数可以将数据映射为唯一的散列值。
由于散列值的长度固定,可以大大减小数据的存储空间。
在数据索引、数据库中,可以使用散列值作为数据的唯一标识,提高数据的查询和存储效率。
2.3 密码学杂凑函数在密码学中有重要的应用。
比如,密码存储时通常不会直接保存明文密码,而是将密码的散列值保存在数据库中。
当用户登录时,输入的密码经过散列计算后与数据库中的散列值进行比对,以验证用户的身份。
2.4 数据分片杂凑函数可以将数据按照一定的规则进行分片,将大规模数据分散存储在不同的节点上。
这样可以提高数据的并行处理能力和分布式存储系统的可扩展性。
3. 工作方式杂凑函数的工作方式主要包括两个方面:输入处理和输出生成。
3.1 输入处理杂凑函数接受一个任意长度的输入数据,并经过一系列的计算操作将其转换为固定长度的中间结果。
常见的输入处理操作包括:•消息扩展:将输入数据进行填充,使其长度满足计算要求。
常见的填充方式有补零、补位数等。
•消息分块:将输入数据按照固定长度进行划分,得到多个块。
每个块独立处理,可以提高计算效率。
•迭代计算:对每个数据块进行迭代计算,将当前数据块的计算结果作为下一个数据块的输入,直到处理完所有数据块。
3.2 输出生成经过输入处理后,杂凑函数会生成一个固定长度的输出,即散列值或哈希值。
信息网络安全-第6章+消息认证和杂凑函数
网络安全—技术与实践(第2版)
刘建伟 王育民 编著
清华大学出版社
课件制作人声明
本课件总共有17个文件,版权属于刘建伟所 有,仅供选用此教材的教师和学生参考。 本课件严禁其他人员自行出版销售,或未经 作者允许用作其他社会上的培训课程。
这在计算上是不可行的。
6、抗碰撞Hash函数(CRHF)
定义2:抗碰撞的杂凑函数满足以下条件:
1. 变量x可以是任意长度,而h(x)值具有固定的n bi
ts (如128b...160b)长度。
2. 杂凑函数必须是单向的。 3. 杂凑函数抗碰撞:意味着很“难”找到两个不 同的消息 x 和 y ,杂凑后得到相同的值 h(x)=h(y) 。
发送者发送:m 接收者验证:h(m’)=h(m) ?
MDC数学表示
迭代Hash函数
信息 X 被分为 t 个分组: X1, X2, …, Xt(如必要,需填充补位padding) 计算:H0=IV, Hi=f(Xi, Hi-1), …,h(X)=g(Ht)
h为Hash函数,f为轮函数,g为输出变换
IV(Hash函数的部分)和padding(填充)将对安全 有重要影响。
六. 应用杂凑函数的基本方式
1. 既提供保密性,又提供消息认证
M H
||
E
D
M H(M)
H
比较
k Ek[M||H(M)]
k
六. 应用杂凑函数的基本方式
2. 仅仅提供消息认证
||
M H E
M
D k
H
比较
k
Ek[H(M)]
杂凑函数 散列函数
杂凑函数散列函数杂凑函数(hash function)是密码学和计算机科学中的重要概念,它是一种将任意长度的数据映射为固定长度的数据序列的函数。
它能够将输入数据通过运算转换为二进制序列,使得相同的输入始终生成相同的输出。
杂凑函数被广泛应用于数据完整性校验、密码学安全性等领域。
首先,让我们来了解一下杂凑函数的主要特点。
杂凑函数具有单向性,即从输出推导输入几乎是不可能的。
这意味着无法通过已知的杂凑值来计算出原始输入值,从而确保了数据的安全性。
此外,杂凑函数还具有高度的散列性,即对输入的微小变化会产生明显不同的输出。
这使得杂凑函数在数据完整性校验中非常有用,例如在校验文件的完整性时,通过计算文件的杂凑值,可以轻松检测到文件是否被修改过。
杂凑函数还具有确定性,即相同的输入始终对应相同的输出。
这保证了数据的一致性,使得杂凑函数在密码学领域中得到广泛应用。
例如,在用户密码存储中,通常存储的并不是用户的原始密码,而是其杂凑值。
当用户输入密码进行验证时,系统将计算输入密码的杂凑值,并与存储的杂凑值进行比对,从而验证用户身份。
在实际应用中,选择合适的杂凑函数至关重要。
一个好的杂凑函数应该具备高度的扩散性和混乱性,即微小的输入变化应该能够导致输出的巨大变化。
此外,杂凑函数还应该能够抵抗碰撞攻击,即找到两个不同的输入,使得它们的杂凑值相同。
这需要杂凑函数具有足够的安全性和随机性。
目前,常用的杂凑函数有许多,例如MD5、SHA-1、SHA-256等。
但是,由于计算机算力的快速提升,一些传统的杂凑函数已经被发现存在一些安全问题。
因此,研究人员不断提出新的杂凑函数,以满足日益增长的安全需求。
总结来说,杂凑函数是一种重要的密码学工具,它能够将任意长度的数据映射为固定长度的数据序列,并具备单向性、高度散列性和确定性等特点。
在数据完整性校验、密码学安全性等领域具有广泛应用。
为了确保数据的安全性,选择合适的杂凑函数至关重要。
研究人员将继续努力提出更加安全和高效的杂凑函数,以满足不断增长的安全需求。
第5讲 杂凑函数
X[*]中的*在0到15变化
SHA1
概述
SHA: Secure Hash Algorithm——安全杂凑函数 美国国家标准和技术协会(NIST)提出,93年发 布,95年修订 95 符合Merkle-Damgard结构,基于和模仿MD4 输入任意长度报文,输出160比特的摘要 输入分组长度为512比特,处理过程与MD5相 似
近似例子: 单向函数存在在密码学中是公开问题
对于单向函数F,如果有了某个陷门k,则计算一 个元素a满足b=F(a)也是容易的,那么这个单向函 数称为陷门单向函数 陷门单向函数
近似例子
杂凑函数
什么是杂凑函数(hash function) 杂凑函数的安全要求 杂凑函数的代表性设计模式 杂凑函数实例
MD5 SHA1 MD5和SHA1的安全性
IV=缓存ABCDE的初值,第3步定义
ABCDEq =第q报文分组最后一次循环输出
L=报文的分组数
SHA1的压缩函数f
f由4个循环组成 每个循环包括16步操作 每一步的基本形式如下
A,B,C,D,E←E+f(t,B,C,D)+S5(A)+Wt+Kt),A,S30(B),C,D
A,B,C,D,E =缓存中的5个字 f(t,B,C,D) Kt Wt + =步骤t的原始逻辑函数 Si =32比特常数循环左移i位 t =步骤数;0到79
杂凑函数的代表性设计模式
Merkle-Damgard结构(89年)
Y0 b n b n CV1 n Y1 b n f CVL1 L:输入分组数 n:杂凑输出长度 b:输入分组长度 YL1
IV= CV0
f
f
n
IV:初值 CVi:链接变量 Yi:第i个输入分组 f:压缩函数
第7讲-杂凑函数和数字签名市公开课获奖课件省名师示范课获奖课件
(1) 该算法生成集合S旳计算量是计算N次
杂凑函数;
(2) 对集合S迅速排序并找出全部碰撞旳计
算量为 |N|log2|N| 次比较。 故总旳计算量为
N + |N|log2|N| = O(N)
碰撞攻击算法旳性能指标
表S={(mk, H(mk)): k = 1,2,, N}旳规
成功率分析:
模
定理1 设杂凑值为n比特且N远不大于2n,
[A B C D 9 5 t25] [D A B C 14 9 t26] [C D A B 3 14 t27] [B C D A 8 20 t28] [A B C D 13 5 t29] [D A B C 2 9 t30] [C D A B 7 14 t31] [B C D A 12 20 t32]
[A B C D 8 7 t9] [D A B C 9 12 t10] [C D A B 10 17 t11] [B C D A 11 22 t12] [A B C D 12 7 t13] [D A B C 13 12 t14] [C D A B 14 17 t15] [B C D A 15 22 t16]
a (b, c, d) i s t
a (b, c, d) i s t
[A B C D 1 5 t17] [D A B C 6 9 t18] [C D A B 11 14 t19] [B C D A 0 20 t20] [A B C D 5 5 t21] [D A B C 10 9 t22] [C D A B 15 14 t23] [B C D A 4 20 t24]
现代密码学之04杂凑函数
满足以上前2个特性的杂凑函数叫弱Hash函数,或 称杂凑函数H(x)为弱碰撞自由的;
如果还满足第3个特性,就叫做强Hash函数,或称 凑函数H(x)为强碰撞自由的。
四、在密码学上,杂凑函数主要有以下应用:
性质: (1)H能够应用到任何大小的数据块上; (2)H能够生成大小固定的输出; (3)对任意给定的x,H(x)的计算相对简单,使得
硬件和软件的实现可行。
三、从安全意义上来说,杂凑函数应满足以下特性:
(1)对于任意的h,要发现满足H(x)=h的x是计算上 不可行的;(单向性)
(2)对于任意给定的x,要发现满足H(y)=H(x)而y≠x 的y是计算上不可行的 ;(防止伪造)
杂凑函数的目的:要生成文件、消息或其他数 据块的“指纹”,以实现对消息的完整性认证。
4.1 杂凑函数的性质及应用
一、杂凑函数可分为以下两类: (1)不带密钥的杂凑函数,它只有一个被通常称
为消息的输入参数; (2)带密钥的杂凑函数,它有两个不同的输入,
分别称为消息和密钥。 二、从应用需求上来说,杂凑函数H必须满足以下
M=x || 1 || 0d || L
若报文长度超过264-1,则L是消息比特长度取模264 后的比特长度的二进制表示。
第4部分 杂凑函数
例 如 , 设 x 是 长 度 具 有 20768 比 特 的 消 息 , 由 于 20768÷512=40.5625,故大于或等于512的倍数 的最小整数为 51241=20992
1.数据完整性认证
将杂凑值H(m)“安全地”存贮起来。
2.产生数字签名
3.密钥推导
(M,SigA(H(m)))
第11章杂凑(hash)函数-Read
n
定义 11.2 一个强无碰撞杂凑函数是一个满足下列 条件的函数h。 (1)h可应用于任意长的消息或文件; (2)h的值(杂凑值)是固定长的,但要足够长才能 抵抗生日攻击。 (3)计算h的值h(x)是容易的,即h(x)是多项式时间可 计算的; (4)给定算法h,要找两个不同的消息x1≠x2,使其杂 凑值h(x1)=h(x2)是困难的(计算不可行的),即 是由强无碰撞压缩函数族中的压缩函数所构造的 (构造方法见后)。
A + X[k] T[i] + +
CLSs
B
C g
D
基本MD5操作 单步) 操作(单步 基本 操作
Function g 1 F(b,c,d) 2 G(b,c,d) 3 H(b,c,d) 4 I(b,c,d)
g(b,c,d) (b∧c)∨(b∧d) ∧ ∨ ∧ (b∧d)∨(c∧d) ∧ ∨ ∧ b⊕c⊕d ⊕ ⊕ c⊕(b∨d) ⊕ ∨
15 T 表
T[49] T[50] T[51] T[52] ... = 49b40821 T[64] = EB86D391 = = = = F4292244 432AFF97 AB9423A7 FC93A039
T[1] T[2] T[3] T[4] ...
= = = =
D76AA478 E8C7B756 242070DB C1BDCEEE
1 2 1 2
x1 1 x2 2
定理 11.1 若一个函数族 {h : {0,1} → {0,1} ; n > m}为 一强单向函数族,则它也是一个强无碰撞 压缩函数族。反之,若函数族{h ; n > m}为一强 无碰撞压缩函数族,且对(充分大的)每 个n及x∈{0,1}n,hn(x)的原象集 hn−1 (hn ( x)) 中 至少包含两个原象,则它也是一个强单向 函数族。 强无碰撞压缩函数族中的函数也称无碰撞 压缩函数或单向压缩函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 6 章單向雜湊函數密碼學上的雜湊函數(Cryptographic Hash Function),為一種可以將任意長本文由【中文word文档库】搜集整理。
中文word文档库免费提供海量教学资料、行业资料、范文模板、应用文书、考试学习和社会经济等word文档度的輸入訊息加以濃縮、轉換,成為一相當短的固定長度輸出訊息的函數,此一輸出訊息一般稱為文件摘要(Message Digest)或雜湊值(Hash Value)。
設計或使用雜湊函數於密碼學系統上的主因是因為利用公開金鑰密碼系統簽章時,因其運算速度較慢,若對整份文件加以簽章則效率不彰。
因此加以變通,使用由該文件經過雜湊函數運算所產生之長度較短,但足以區別該文件的文件摘要(Message Digest),或稱文件的數位指紋(Digital Fingerprint),來加以簽章,取代原先對整份文件簽章的方式,以加速數位簽章的應用。
雜湊函數與加密演算法一樣,均是將訊息加以隱藏。
但其不同點在於加密演算法的結果可以藉由適當的方式加以還原,而雜湊函數則必須具單向與不可逆(One-Way)的特性。
因此使得給定文件時,順向計算該文件的雜湊值相單簡單快速,但經過雜湊函數濃縮、運算後的文件摘要,無法反向還原成先前的訊息。
密碼學中所使用的單向雜湊函數(One-Way Hash Function)必須具備以下兩個特性:1.當給定一特定的雜湊輸出值後,欲找出任何文件可以輸出此一特定的雜湊值,為計算上的不可行,此為抗拒事先描繪的特性(PreimageResistance)。
2.即使給定一份文件及其雜湊值後,找出第二份文件可以輸出此一特定的雜湊值,為計算上的不可行,此為抗拒第二事先描繪的特性(Second Preimage Resistance)。
一個單向雜湊函數必須利用有限的資料量(通常為128或160位元)來區別所有文件,必定存在兩份以上的文件具有相同的雜湊值,此即碰撞、衝突或重複(Collision)的現象。
因此,一個可以抗拒碰撞(Collision-Resistance)的單向雜湊函數條件更為嚴苛,除了上述兩條件外,必須使得攻擊者欲找出兩份不相同的文件具有相同的雜湊值,為計算上的不可行。
理想中,一個長度為n位元的文件摘要,應可區別n2份文件,但在生日攻2n,亦擊法(Birthday Attack)的威脅下,已使得此一文件數量大幅減少成為2/2份文件,換言即輸出長度為128位元(16位元組)的文件摘要函數只能區別64之,攻擊者即使利用地毯式搜尋(Brute-force Attack),在最壞的情況下也只要經2次運算,即可找出具有相同文件摘要的兩份文件,由此看來,有必要將訊過64息彙記的輸出長度提升至160位元(10位元組)以上。
大部分的單向雜湊函數或訊息彙記函數之設計理念均極類似,均以固定長度的區塊處理來運作。
先將輸入訊息後端不足區塊長度的部份,加以填補(Padding)成為一完整長度的區塊,再利用一個壓縮函數(Compress Function),反複地將兩個固定長度的區塊訊息資料利用壓縮(Compress)、邏輯轉換(AND,NOT,OR,XOR)及旋轉移位(Rotate or Cycle Shift)等處理,產生一個單一的結果,稱為鏈結變數(Chaining Variable),作為下一回合的輸入值,並反覆使用上述壓縮函數至訊息處理完畢為止,其最後的壓縮函數值即為文件摘要,請參考下圖之說明。
圖6-1 文件彙記產生示意圖常見的單向雜湊函數有RSA公司MD家族之MD2、MD4、MD5,美國國家標準與技術協會(National Institute of Science and Technology,NIST)的SHA、SHA-1、與歐盟(European Union)RIPE專案之RIPEMD、RIPEMD -128、RIPEMD -160等,在以下各個小節我們將分別介紹這些單向雜湊函數。
6.1 MD 家族RSA公司之MD家族包括了MD2、MD4及MD5,都是由設計RSA公開金鑰密碼系統的三位發明人(Rivest、Shamir、Adleman)其中的Rivest所設計發展的,此三個文件摘要函數的內部結構大致相同,均可將任意長度的訊息轉換輸出為128位元的文件摘要,其中MD2是針對8位元的環境予以最佳化,MD4與MD5則是充份利用32位元的環境予以最佳化。
6.1.1 MD2MD2由Rivest發展於1989年,其運作方式如下:[Kaliski92]1.將輸入訊息填補成16位元組(128位元)長區塊的整數倍大小。
2.利用基於圓周率(π)的非線性轉換,計算出一個核對總和值(Checksum)附加於其後。
3.將上述訊息切割為16位元組長的區塊,配合一個固定的初始值,反覆計算其函數值,產生一個16位元組(128位元)的文件摘要。
目前已經可以找出其壓縮函數的“碰撞”,且在省略核對總和值的條件下,更可以找到兩份具有相同訊息彙記的文件。
也就是說,若無核對總和值的幫助,MD2安全強度已經不足。
6.1.2 MD4MD4由Rivest發展於1990年,其運作方式亦與MD2相似,不同的是MD4在輸入的訊息上添加了一個64位元的資料,用以表示輸入訊息的長度,並變更其處理區塊大小為512位元,且此512位元長的資料區塊在壓縮處理上,也必須經過三個回合(Round)的不同處理,其填補訊息的長度亦也與MD2有所不同[Rivest90,Rivest92a,Stinson95]。
而MD5、SHA-1、RIPEMD均以MD4為設計基礎,加以修改發展而成。
德國的Dobbertin,在1995年證明,使用一部普通PC,在一分鐘內即可找到一個MD4的碰撞。
因此,MD4的安全強度也已經不足。
6.1.3 MD5MD5由Rivest發展於1991年,可以說是MD4的加強安全版,比MD4稍慢,除了將壓縮處理過程從MD4的三個回合,增加為四個回合外,其餘均與MD4相同 [Rivest92b ,Stallings99]。
MD5目前的劣勢,在於其壓縮函數的碰撞(包括Pseudo-Collision of Compress Function 及Collision of Compress Function 兩種)已被找到。
已有論文指出,花費1000萬美金的代價(1995),設計找尋碰撞的特製硬體設備,平均可以在24天內找出一個MD5的碰撞。
因此 RSA 公司已發佈新聞指出MD2、MD4與MD5,均不再適合使用於未來的簽章應用,其所推薦適合未來簽章使用的雜湊函數為SHA-1與RIPEMD-160。
欲將文件利用MD5製作文件摘要,則文件必須先被切割為數個512位元的區塊(Block ),而MD5最終將輸出一128位元之文件摘要。
以下將簡述MD5的運作流程:1. 補齊區塊:將文件以512位元為單位切割後,若最後一個區塊長度不足448位元,則必需加入位元將之補齊至448位元;若最後一個區塊長度剛好是448位元,則加入一512位元的區塊。
因此,加入的位元範圍為1~512位元。
2. 附加長度:補齊區塊後,在最後必須添加原文件長度的資訊,此資訊長度為64位元(Least Significant Byte First )。
若原文件長度超過642位元,則只添加較低階的64位元。
即添加的訊息為:642mod 原文件長度。
3. 初設暫存值:在MD5中有一128位元的暫存器,用以暫存經過運算的結果。
在開始製作文件摘要前,MD5會先初設暫存器。
128位元的暫存器視為四個32位元的暫存器),,,(D C B A ,初設如下:10325476988967452301====D BADCFEC EFCDAB B A 暫存器是以Little-Endian 的方式初設。
而MD5運算過程中所利用到的初值IV即為:10325476988967452301::::BA DC FE EF CD AB D C B A word word word word 4. 進行運作:經過前三個步驟後,MD5即可開始以512位元區塊為單位進行運作。
每512位元區塊經過運作後,將產生128位元的輸出。
5. 輸出結果:以初值為始,將每次輸出的128位元值相加再進行模322運算,即可獲得最後128位元的文件摘要。
圖 6-2 為MD5的運作流程:L*512位元IV圖 6-2 MD5運作示意圖在前述MD5運作流程中,步驟四是以512位元區塊為單位進行運算,本段將簡介此運算過程。
512位元區塊運算共分為四回合,每回合各進行16次的單位運算。
假設目前進行第q 次的512位元區塊運算。
取此次進行區塊運算的512位元文件區塊q Y ,將其以128位元為單位分為四部份,分別輸入四個回合。
取前次512位元區塊的運算結果q CV (0CV 即為初值IV ),將其以32位元為單位分為),,,(D C B A 四部份,並將此四部份輸入第一回合。
經過第一回合共16次的單位運算後,將有),,,(D C B A 四部份共128位元的輸出。
再將此),,,(D C B A 輸入第二回合進行運算。
依此模式進行運算,直至第四回合輸出),,,(D C B A 。
將原),,,(D C B A 與),,,(D C B A 分別相加後,再分別進行模322運算,合併四部份的結果,即為最後128位元之輸出,如圖 6-3所示。
CV 1q Y : 相加後再模322 圖 6-3 MD5對512位元區塊運作圖在每次的回合運算中,都將進行16次的單元運算。
圖6-4為MD5 之基本單元運算的流程,其中的重要元件將一一說明於後。
X[k]T[i]圖6-4 MD5基本單元運作圖1.g:為運算函數F、G、H、I其中之一。
在每次512位元區塊運算中,第一回合g為運算函數F,第二回合g為運算函數G,依此類推。
現將運算函數F、G、H、I的運算功能說明如下:2運算。
2.+:相加後再進行模323.CLS:將數字進行循環位移(Circular Left Shift)共s個位元。
s4.X[k]:在每次512位元區塊運算中,文件Y以32位元為單位q分為X[0]、X[1]、…、X[63]共64份,每回合進行運算時輸入16份,即第一回合運算輸入X[0]、X[1]、…、X[15],第一回合運算輸入X[16]、X[17]、…、X[31]等。
這也就是前文所提及的:512位元的文件區塊Y,q以128位元為單位分為四部份,分別輸入四個回合。
5.T[j]:為一32位元之值,經由查表可得。
此表是利用三角函數sin製作而成。
現將此表羅列如下:綜合前文所述,MD5的運算流程可表示如下:Lq q F q G q H q I q q CV MD CV Y RF Y RF Y RF Y RF CV SUM CV IVCV ===+))))),(,(,(,(,(3210其中,IV :初值,q Y :第q 個512位元的文件區塊,L :512位元文件區塊數,q CV :在MD5運作過程中,第q 個暫存運算值,x RF :利用運算函式x 所進行的回合運算,MD :MD5所產生之文件摘要,32SUM :將兩數質相加後,再進行模322運算。