《密码学基础》课件第4章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《密码学基础》课件第4章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码学基础 密码学 基础 课件
- 资源描述:
-
1、4.1 Hash函数与随机预言模型 4.2 迭代Hash函数 4.3 MD 4.4 SHA-1 4.5 MD5与SHA-1的比较*4.6 消息认证码(MAC)习题 4.1.1 Hash函数函数数据的完整性是指数据从发送方产生,经过传输或存储以后,未被以未授权的方式修改的性质。密码学中的Hash函数在现代密码学中扮演着重要的角色,该函数不同于计算机应用领域中的Hash函数,本书中所讲的都是密码学中的Hash函数。Hash函数是一个将任意长度的消息序列映射为较短的、固定长度的一个值的函数。密码学上的Hash函数能够保障数据的完整性,它通常被用来构造数据的“指纹”(即函数值),当被检验的数据发生改变
2、的时候,对应的“指纹”信息也将发生变化。这样,即使数据存储在不安全的地方,也可以通过数据的“指纹”信息来检测数据的完整性。4.1 Hash函数与随机预言模型函数与随机预言模型设H是一个Hash函数,x是消息,不妨假设x是任意长度的二元序列,相应的“指纹”定义为y=H(x),Hash函数值通常也称为消息摘要(Message Digest)。一般要求消息摘要是相当短的二元序列,常用的消息摘要是160位。如果消息x被修改为x,则可以通过计算消息摘要y=H(x)并且验证y=y是否成立来确认数据x是否被修改的事实。如果yy,则说明消息x被修改,从而达到了检验消息完整性的目的。对于Hash函数的安全要求,
3、通常采用下面的三个问题来进行判断。如果一个Hash函数对这三个问题都是难解的,则认为该Hash函数是安全的。用X表示所有消息的集合(有限集或无限集),Y表示所有消息摘要构成的有限集合。定义定义4.1.1 原像问题(Preimage Problem)设H:XY是一个Hash函数,yY。是否能够找到xX,使得H(x)=y。如果对于给定的消息摘要y,原像问题能够解决,则(x,y)是有效的。不能有效解决原像问题的Hash函数称为单向的或原像稳固的。定义定义4.1.2 第二原像问题(Second Preimage Problem)设H:XY是一个Hash函数,xX。是否能够找到xX,使得xx,并且H(x
4、)=H(x)。如果第二原像问题能够解决,则(x,H(x)是有效的二元组。不能有效解决第二原像问题的Hash函数称为第二原像稳固的。定义定义4.1.3 碰撞问题(Collision Problem)设H:XY是一个Hash函数。是否能够找到x,xX,使得xx,并且H(x)=H(x)。对于碰撞问题的有效解决并不能直接产生有效的二元组,但是,如果(x,y)是有效的二元组,并且x,x是碰撞问题的解,则(x,y)也是一个有效的二元组。不能有效解决碰撞问题的Hash函数称为碰撞稳固的。实际应用中的Hash函数可分为简单的Hash函数和带密钥的Hash函数。带密钥的Hash函数通常用来作为消息认证码(Mes
5、sage Authentication Code)。假定Alice和Bob有一个共享的密钥k,通过该密钥可以产生一个Hash函数Hk。对于消息x,Alice和Bob都能够计算出相应的消息摘要y=Hk(x)。Alice通过公共通信信道将二元组(x,y)发送给Bob。当Bob接收到(x,y)后,它可以通过检验y=Hk(x)是否成立来确定消息x的完整性。如果y=Hk(x)成立,说明消息x和消息摘要y都没有被篡改。下面给出带密钥的Hash函数族的定义。定义定义4.1.4 一个带密钥的Hash函数族包括以下构成要素:(1)X:所有消息的集合(有限集或无限集);(2)Y:所有消息摘要构成的有限集合;(3)
6、K:密钥空间,是所有密钥的有限集合;(4)对任意的kK,都存在一个Hash函数HkH,Hk:XY。如果Hk(x)=y,则二元组(x,y)XY称为在密钥k下是有效的。Hash函数的目的是为文件、报文或者其他的分组数据提供完整性检验。要实现这个目的,设计的Hash函数H必须具备以下性质:(1)H能够用于任何大小的数据分组;(2)H产生定长的输出;(3)对任意给定的x,H(x)要易于计算,便于软件和硬件实现;(4)对任意给定的消息摘要y,寻找x使得y=H(x)在计算上是不可行的;(5)对任意给定的消息x,寻找x,xx,使得H(x)=H(x)在计算上是不可行的;(6)寻找任意的(x,x),使得H(x)
7、=H(x)在计算上是不可行的。以上6个条件中,前3个条件是Hash函数能够用于消息认证的基本要求;第4个条件是指Hash函数具有单向性;第5个条件用于消息摘要被加密时防止攻击者的伪造;第6个条件用于防止生日攻击。生日攻击的思想来源于概率论中一个著名的问题生日问题。该问题是问一个班级中至少要有多少个学生才能够使得有两个学生生日相同的概率大于1/2。该问题的答案是23。即只要班级中学生的人数大于23人,则班上有两个人生日相同的概率就将大于1/2。基于生日问题的生日攻击意味着要保证消息摘要对碰撞问题是安全的,则安全消息摘要的长度就有一个下界。例如,长度为40比特的消息摘要是非常不安全的,因为仅仅在2
8、20(大约为一百万)个随机Hash函数值中就有50%的概率发现一个碰撞。所以对于安全的消息摘要,现在通常建议可接受的最小长度为128比特(此时生日攻击需要超过264个Hash函数值)。而实际使用的消息摘要一般为160比特甚至更长。4.1.2 随机预言模型随机预言模型本小节介绍一种Hash函数的某种理想化模型,该模型对于每一个消息,都试图得到一个理想的Hash函数值。由Bellare和Rogaway提出的随机预言模型(Random Oracle Model)是一种“理想化”的Hash函数数学模型。在这个模型中,随机从FX,Y中选出一个Hash函数H:XY,仅仅允许预言器访问函数H,这表示对于任一
9、个消息x,随机预言模型都不会给出一个公式或者算法来计算消息摘要H(x)的值。因此,计算H(x)值的惟一方法是询问预言器,这种Hash函数模型相当于根据给出的消息x,在一本关于随机数的书中查询H(x)的值,对于每一个x,都有一个完全随机的H(x)与之对应。定义定义4.1.5 令FX,Y是所有从X到Y的函数集合。假定|X|=N,|Y|=M,则|FX,Y|=MN。任何Hash函数族FFX,Y被称为一个(N,M)Hash族。对于随机预言模型,以下结论是成立的。定理定理4.1 随机选择HFX,Y并取子集合X0X。假设当且仅当xX0时,H(x)的值由查询预言器确定,那么对于所有的xXX0和yY,P(H(x
10、)=y)=。在以上结论中,概率P(H(x)=y)实际上是对任意的xX,计算相应的函数H(x)的值,从而得到指定值的条件概率。通过该结论可知,M的值越大,相应地产生碰撞的概率就越小。M14.2 迭代迭代Hash函数函数本节讨论一种可以将有限定义域上的Hash函数延拓到具有无限定义域上的Hash函数的方法迭代Hash函数。目前使用的Hash函数大多数都是迭代Hash函数,例如被广泛使用的MD5、安全Hash算法(SHA-1)等。在本节中,假设Hash函数的输入和输出都是位串。把位串的长度记为|x|,把位串x和y的串联记为xy。下面给出一种构造无限定义域上Hash函数H的方式,该方式通过将一个已知的
11、压缩函数compress:0,1 m+t0,1 m(m1,t1)扩展为可以具有无限长度输入的Hash函数H来达到目的。通过这种方法构造的Hash函数称为迭代Hash函数。基于压缩函数compress构造迭代Hash函数包括以下三步:(1)预处理。输入一个消息x,其中|x|m+t+1,基于x构造相应的位串y(|y|0 mod t)的过程如下:y=y1y2yr其中,|yi|=t,1ir,r为消息分组的个数。(2)迭代压缩。设z0是一个公开的初始位串,|z0|=m。具体的迭代过程如下:z1compress(z0y1)z2compress(z1y2)zrcompress(zr-1yr)最终得到长度是m
12、的位串zr。(3)后处理。设g:0,1 m0,1 t是一个公开函数,定义H(x)=g(zr)。则有 在上述预处理过程中常采用以下方式实现:y=xpad(x)其中,pad(x)是填充函数,一个典型的填充函数是在消息x后填入|x|的值,并填充一些额外的比特,使得所得到的比特串y是t的整数倍。在预处理阶段,必须保证映射xy是单射(如果映射x|y不是一一对应的,就可能找到xx使得y=y,则有H(x)=H(x),从而设计的H将不是碰撞稳固的),同时保证|xpad(x)|是t的整数倍。itmiiH1,01,0:1基于压缩函数compress构造迭代Hash函数的核心技术是设计一种无碰撞的压缩函数compr
13、ess,而攻击者对算法的攻击重点也是compress的内部结构。由于迭代Hash函数和分组密码一样是由compress压缩函数对消息x进行若干轮压缩处理组成的,因此对compress的攻击需通过对各轮之间的位模式的分析来进行,分析过程常常需要先找到compress的碰撞。由于compress是压缩函数,其碰撞是不可避免的,因此在设计compress 时就应保证找出其碰撞在计算上是不可行的。下面介绍几个重要的迭代Hash函数。4.3 MDMD(Message Digest,消息摘要)算法由Ron Rivest在1990年10月提出,人们通常称之为MD4。MD4对于输入的消息产生128位的消息摘要
14、。由于它的安全性不是基于任何其他的密码体制和已知的单向函数,因此它的安全性只能由时间来证明。MD4算法首次公布后,Bert den Boer和Antoon Bosselaers对三轮算法中的后两轮成功地进行了密码分析。在一个不相关的分析结果中,Ralph Merkle成功地攻击了三轮算法中的前两轮。Eli Biham也讨论了对MD4的前两轮进行差分攻击的可能性。尽管这些攻击算法还没有扩展到整个MD4算法,但是为了增强算法的安全性,Ron Rivest于1992年4月给出了MD4的改进算法MD5。为了介绍MD5,下面先介绍MD4。4.3.1 MD4MD4算法中涉及到如下一些基本运算:(1)XY:
15、X和Y进行逻辑与运算;(2)XY:X和Y进行逻辑或运算;(3)XY:X和Y进行逻辑异或运算;(4):X的逻辑补运算;(5)X+Y:整数模232加法运算;(6)Xs:将X循环左移s位(0s31)。MD4算法的具体过程如下。首先输入任意长度的消息x,由x构造一个数组序列M=M0M1Mn-1其中,|Mi|=32,0in-1,n0 mod 16。X在得到M的基础上,MD4构造Hash函数H(x)的方法如下:(1)给定4个寄存器A、B、C、D(也称为链接变量),对其赋初值:A=67452301B=efcdab89C=98badcfeD=10325476其中,0,1,2,3,4,5,6,7,8,9,a,b
16、,c,d,e,f表示一个十六进制的数字或一个长度为4的二进制序列。(2)计算Xj=M16i+j其中,0i(n/16)-1,0j15。(3)将已有的4个寄存器A、B、C、D中的数组分别存放到另外4个寄存器AA、BB、CC、DD中。(4)执行第一轮操作。具体内容包括:A=(A+F(B,C,D)+X4k)3 D=(D+F(A,B,C)+X4k+1)7C=(C+F(D,A,B)+X4k+2)11B=(B+F(C,D,A)+X4k+3)19其中,0k3,F(X,Y,Z)=(XY)(Z)。X(5)执行第二轮操作。具体内容包括:A=(A+G(B,C,D)+Xk+5a827999)3 D=(D+G(A,B,C
17、)+X4+k+5a827999)5C=(C+G(D,A,B)+X8+k+5a827999)9B=(B+G(C,D,A)+X12+k+5a827999)13其中,0k3,G(X,Y,Z)=(XY)(XZ)(YZ)。(6)执行第三轮操作。具体内容包括:A=(A+H(B,C,D)+X0+6ed9eba1)3D=(D+H(A,B,C)+X8+6ed9eba1)9C=(C+H(D,A,B)+X4+6ed9eba1)11B=(B+H(C,D,A)+X12+6ed9eba1)15A=(A+H(B,C,D)+X2+6ed9eba1)3D=(D+H(A,B,C)+X10+6ed9eba1)9C=(C+H(D,A
18、,B)+X6+6ed9eba1)11B=(B+H(C,D,A)+X14+6ed9eba1)15A=(A+H(B,C,D)+X1+6ed9eba1)3D=(D+H(A,B,C)+X9+6ed9eba1)9C=(C+H(D,A,B)+X5+6ed9eba1)11B=(B+H(C,D,A)+X13+6ed9eba1)15A=(A+H(B,C,D)+X3+6ed9eba1)3D=(D+H(A,B,C)+X11+6ed9eba1)9C=(C+H(D,A,B)+X7+6ed9eba1)11B=(B+H(C,D,A)+X15+6ed9eba1)15其中,H(X,Y,Z)=XY Z。(7)A=A+AA,B=B
19、+BB,C=C+CC,D=D+DD。(8)输出H(x)=ABCD,得到128位的消息摘要。4.3.2 MD5MD5算法以512位的分组长度来处理消息,每一个分组又被划分为16个32位的子分组。算法的输出由4个32位的分组组成,它们串联成一个128位的消息摘要。MD5算法的具体过程如下。首先对消息x进行预处理,使其长度恰好比512的整数倍小64。然后在其后面附上用64位表示的消息长度信息。得到的结果序列长度恰好是512的整数倍。在此基础上,MD5构造Hash函数H(x)的方法如下:(1)对给定的4个寄存器A、B、C、D赋初值:A=01234567B=89abcdefC=fedcba98D=765
20、43210其中,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f表示一个十六进制的数字或一个长度为4的二进制序列。(2)将以上得到的寄存器的值赋给相应的变量AA、BB、CC、DD。然后对512位的消息分组序列应用主循环进行处理,循环的次数是消息中512位的分组数。每一次的主循环都有四轮(注:MD4只有三轮)操作,而且这四轮操作都很相似。每一轮进行16次操作,每次操作对AA、BB、CC、DD中的三个作一次非线性的函数运算,然后将得到的结果加上第四个变量,再加上消息的一个子分组和一个常数。再将所得结果循环右移一个不定的数(在MD5算法中给出了具体的数值),并加上AA、BB、CC、DD
21、其中的一个。最后用得到的结果取代AA、BB、CC、DD其中的一个。以上过程中用到的四个非线性函数分别定义为)(),(),()()(),()()(),(ZXYZYXIZYXZYXHZYZXZYXGZXYXZYXF在此基础上,设Mj表示消息的第j个子分组,0j15。则以上过程中四种基本操作分别定义为AA=FF(AA,BB,CC,DD,Mj,s,tj)=BB+(AA+F(BB,CC,DD)+Mj+tj)s)AA=GG(AA,BB,CC,DD,Mj,s,tj)=BB+(AA+G(BB,CC,DD)+Mj+tj)s)AA=HH(AA,BB,CC,DD,Mj,s,tj)=BB+(AA+H(BB,CC,DD
展开阅读全文