资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第2章信息安全机制,本章学习目标,通过本章学习,读者应该掌握以下内容,:,对称加密机制及典型算法,非对称加密机制及算法,数字签名的原理,数据完整性验证的原理及典型算法,2.1,加密机制,2.1.1,密码学基础知识,一个密码体制被定义为一对,数据变换,,其中一个变换应用于我们称之为,明文,的数据项,变换后产生的相应数据项称为,密文,;而另一个变换应用于密文,变换后的结果为明文。这两个变换分别称为,加密变换(,Encryption,)和解密变换(,Decryption,),。加密变换将明文和一个称为,加密密钥,的独立数据值作为输入,输出密文;解密变换将密文和一个称为,解密密钥,的数据值作为输入,加密和解密,加密,解密,M,:明文,C,:密文,K,E,:加密密钥,K,D,:解密密钥,2.1.2,对称加密算法,加密:,E,k,(M)=C,解密:,D,k,(C)=M,序列密码算法(,stream cipher,),分组密码算法,(block cipher),加密过程主要是重复使用混乱和扩散两种技术,混乱(,confusion,)是改变信息块使输出位和输入位无明显的统计关系。扩散(,diffusion,)是将明文位和密钥的效应传播到密文的其它位。,对称密码算法有很多种,:,DES,、,triple DES,、,IDEA,、,RC2,、,RC4,、,RC5,、,RC6,、,GOST,、,FEAL,、,LOKI,2.1.3 DES,算法,首先把明文分成若干个,64-bit,的分组,,算法以一个分组作为输入,通过一个,初始置换(,IP,),将明文分组分成左半部分(,L,0,)和右半部分(,R,0,),各为,32-bit,。然后进行,16,轮完全相同的运算,这些运算我们称为,函数,f,,在运算过程中数据与密钥相结合。经过,16,轮运算后,左、右两部分合在一起经过一个,末转换(初始转换的逆置换,IP,-1,),,输出一个,64-bit,的密文分组。,1,、算法描述,密钥位移位,从密钥的,56,位中选出,48,位,。通过一个,扩展置换,将数据的左半部分扩展成,48,位,并通过一个,异或操作,与,48,位密钥结合,通过,8,个,S,盒,(,substitution box,)将这,48,位替代成新的,32,位,再依照,P-,盒置换,一次。以上四步构成,复杂函数,f,(图中虚线框里的部分)。,然后通过另一个异或运算,将复杂函数,f,的输出与左半部分结合成为新的右半部分,。,每一轮的运算过程,:,密钥通常表示为,64-bit,,但每个第,8,位用作奇偶校验,实际的密钥长度为,56-bit,。在,DES,的每一轮运算中,从,56-bit,密钥产生出不同的,48-bit,的子密钥(,K,1,K,2,K,16,)。首先,,56-bit,密钥分成两部分(以,C,、,D,分别表示这两部分),每部分,28,位,然后每部分分别循环左移,1,位或,2,位(从第,1,轮到第,16,轮,相应左移位数分别为:,1,、,1,、,2,、,2,、,2,、,2,、,2,、,2,、,1,、,2,、,2,、,2,、,2,、,2,、,2,、,1,)。再将生成的,56-bit,组经过一个压缩转换(,compression permutation,),舍掉其中的某,8,个位并按一定方式改变位的位置,生成一个,48-bit,的子密钥,K,i,。,每一轮中的子密钥的生成,48-bit,组被分成,8,个,6-bit,组,每一个,6-bit,组作为一个,S,盒的输入,输出为一个,4-bit,组。每个,S-,盒是一个,4,行,16,列的表,表中的每一项都是一个,4-bit,的数。,S,盒的,6-bit,的输入确定其输出为表中的哪一个项,其方式是:,6-bit,数的首、末两位数决定输出项所在的行;中间的四位决定输出项所在的列。例如:第,6,个,S,盒如表,2-1,所示,假设第,6,个,S-,盒的输入为,110101,,则输出为第,3,行第,10,列的项(行或列的记数从,0,开始),即输出为,4-bit,组,0001,。,S-,盒置换,三重,DES,如上所言,,DES,一个致命的缺陷就是密钥长度短,并且对于当前的计算能力,,56,位的密钥长度已经抗不住穷举攻击,而,DES,又不支持变长密钥。但算法可以一次使用多个密钥,从而等同于更长的密钥。三重,DES,算法表示为:,C=E,K3,(,D,K2,(,E,K1,(,M,),通常取,K,3,=K,1,,则上式变为:,C=E,K1,(,D,K2,(,E,K1,(,M,),2.1.4 RC5,算法,RC5,是,Ron Revist,发明的。,RSA,实验室对,64bit,分组的,RC5,算法进行了很长时间的分析,结果表明对,5,轮的,RC5,,差分攻击需要,2,64,个明文;对,10,轮需要,2,45,个明文;对,15,轮需要,2,68,个明文,而这里最多只可能有,2,64,个明文,所以对,15,轮以上的,RC5,的攻击是失败的。,Rivest,推荐至少使用,12,轮。,RC5,是具有参数变量的分组密码算法,其中可变的参量为:分组的大小、密钥的大小和加密的轮次。该算法主要使用了三种运算:异或、加、循环。,RC5,的分组长度是可变的,下面我们将采用,64bit,的分组来描述算法。加密需要使用,2r+2,(其中,r,表示加密的轮次)个与密钥相关的,32bit,字,分别表示为,S,0,、,S,1,、,S,2,S,2r+1,。创建这个与密钥相关的数组的运算如下:首先将密钥的字节拷贝到,32bit,字的数组,L,,如果需要,最后一个字可以用零填充。然后利用线性同余发生器初始化数组,S,:,S,0,=P,S,i,=(S,i-1,+Q)mod 2,32,(,其中,i=1 to 2(r+1)-1,,,P=0 xb7e15163,Q=0 x9e3779b9),最后将,L,与,S,混合:,初始化:,i=j=0,A=B=0,然后做,3n,次循环:,(,其中,c,为密钥所占,32bit,字数目,亦即数组,L,的长度,,n,为,2(r+1),和,c,中的最大值,),。,A=S,i,=(S,i,+A+B)3,B=L,j,=(L,j,+A+B)(A+B),i=(i+1)mod 2(r+1),j=(j+1)mod c,加密过程:,首先将明文分组(,64bit,)分成两个,32,位字,A,和,B,(假设字节进入字的顺序为第一个字节进行寄存器的低位置),然后进行如下的运算:,A=A+S,0,B=B+S,1,for(i=1;i=r;i+),A=(AB)B)+S,2i;,B=(BA)=1;r-),B=(B-S,2i+1,)A),A;,A=(A-S,2i,)B),B;,B=B-S,1,A=A-S,0,此时输出的,A,、,B,为解密后得到的明文。,2.1.5,非对称加密体制,公开密钥体制把信息的加密密钥和解密密钥分离,通信的每一方都拥有这样的一对密钥。其中加密密钥可以像电话号码一样对外公开,由发送方用来加密要发送的原始数据;解密密钥则由接收方秘密保存,作为解密时的私用密钥。公开密钥加密算法的核心是一种特殊的数学函数,单向陷门函数(,trap-door one way function,)。即该函数从一个方向求值是容易的,但其逆变换却是极其困难的,因此利用公开的加密密钥只能作正向变换,而逆变换只有依赖于私用的解密密钥这一,“,陷门,”,才能实现,。,公开密钥体制最大的优点就是不需要对密钥通信进行保密,所需传输的只有公开密钥。这种密钥体制还可以用于数字签名,即信息的接收者能够验证发送者的身份,而发送者在发送已签名的信息后不能否认。公开密钥体制的缺陷在于其加密和解密的运算时间比较长,这在一定程度上限制了它的应用范围。公开密钥体制在理论上被认为是一种比较理想的的计算密码的方法,但现在真正实用的公开密钥算法还不是很多,目前公认比较安全的要算,RSA,算法及其变种,Rabin,算法。算法表示为:,E,k1,(M)=C,D,k2,(C)=M,D,k2,(E,k1,(M)=M (,其中,k1,和,k2,为一对密钥中的私有密钥和公开密钥,),2.1.6 RSA,算法,RSA,算法的思路如下:为了产生两个密钥,先取两个大素数,,p,和,q,。为了获得最大程度的安全性,两数的长度一样。计算乘积,n=p*q,,然后随机选取加密密钥,e,,使,e,和,(p-1)*(q-1),互素。最后用欧几里得(,Euclidean,)扩展算法计算解密密钥,d,,,d,满足,ed,1 mod(p-1)(q-1),,即,d,e,-1,mod(p-1)(q-1),。则,e,和,n,为公开密钥,,d,是私人密钥。两个大数,p,和,q,应该立即丢弃,不让任何人知道。一般选择公开密钥,e,比私人密钥,d,小。最常选用的,e,值有三个,3,,,17,,,65537,。,加密消息时,首先将消息分成比,n,小的数据分组(采用二进制数,选到小于,n,的,2,的最大次幂),设,m,i,表示消息分组,,c,i,表示加密后的密文,它与,m,i,具有相同的长度。,加密过程:,c,i,=m,i,e,(mod n),解密过程:,m,i,=c,i,d,(mod n),2.1.7,密钥与密码破译方法,1,、密钥的穷尽搜索,破译密文最简单的方法,就是尝试所有可能的钥匙组合。,2,、密码分析,在不知道钥匙的情况下,利用数学方法破译密文或找到秘密钥匙的方法,称为密码分析。密码分析有两个基本目标:利用密文发现明文,利用密文发现钥匙。,3,、其它密码破译方法,2.2,数据完整性机制,密码学除了为数据提供保密方法以外,还可以用于其他的作用:,鉴别(,authentication,),:消息的接收者可以确定消息的来源,攻击者不可能伪装成他人。,抗抵赖(,nonrepudiation,),:发送者事后不能否认自己已发送的消息。,完整性(,integrity,),:消息的接收者能够验证消息在传送过程中是否被修改;攻击者不可能用假消息来代替合法的消息。,2.2.1,数据完整性验证,消息的发送者用要发送的消息和一定的算法生成一个附件,并将附件与消息一起发送出去;消息的接收者收到消息和附件后,用同样的算法与接收到的消息生成一个新的附件;把新的附件与接收到的附件相比较,如果相同,则说明收到的消息是正确的,否则说明消息在传送中出现了错误。,2.2.2,单向散列函数,单向散列函数(,one-way hash function,),也叫压缩函数、收缩函数,它是现代密码学的中心,是许多协议的另一个结构模块。散列函数长期以来一直在计算机科学中使用,散列函数是把可变长度的输入串(叫做预映射,,pre-image,)转换成固定长度的输出串(叫做散列值)的一种函数。,利用单向散列函数生成消息的指纹可以分成两种情况,。一种是不带密钥的单向散列函数,,这种情况下,任何人都能验证消息的散列值;,另一种是带密钥的散列函数,,散列值是预映射和密钥的函数,这样只有拥有密钥的人才能验证散列值。单向散列函数的算法实现有很多种,如,Snefru,算法、,N-Hash,算法、,MD2,算法、,MD4,算法、,MD5,算法,,SHA-1,算法等等。,MD5,算法描述,MD5,以,512bit,的分组来处理输入文本,每一分组又划分为,16,个,32bit,的子分组。算法的输出由,4,个,32bit,分组组成,将它们级联形成一个,128bit,的散列值。首先填充消息使用其长度恰好为一个比,512,的倍数仅小,64bit,的数。填充方法是在消息后面附一个,1,,然后填充上所需要的位数的,0,,然后在最后的,64,位上附上填充前消息的长度值。这样填充后,可使消息的长度恰好为,512,的整数倍,且保证不同消息在填充后不相同。,2.2.3,消息摘要算法,MD5,2.3,数字签名机制,数字签名机制需要实现以下几个目的:,l,可信,:消息的接收者通过签名可以确信消息确实来自于声明的发送者。,l,不可伪造,:签名应是独一无二的,其它人无法假冒和伪造。,l,不可重用,:签名是消息的一部分,不能被挪用到其它的文件上。,l,不可抵赖,:签名者事后不能否认自己签过的文件。,2.3.1,数字签名的基本原理,数字签名实际上是附加在数据单元上的一些数据或是对数据单元所作的,密码变换,,这种数据或变换能使数据单元的接收者确认数据单元的,来源和数据的完整性,,,并保护数据,防止被人(如接收者)伪造。,签名机制的本质特征是该签名只有通过签名者的私有信息才能产生,也就是说,一个签名者的,签名只能唯一地由他自己产生,。当收发双方发生争议时,第三方(仲裁机构)就能够根据消息上的数字签名来裁定这条消息是否确实由发送方发出,从而实现抗抵赖服务。另外,数字签名应是所发送数据的函数,即,签名与消息相关,,从而防止数字签名的伪造和重用。,2.3.2,数字签名的实现方法,1,、使用对称加密和仲裁者实现数字签名,2,、使用公开密钥体制进行数字签名,公开密钥体制的发明,使数字签名变得更简单,它不再需要第三方去签名和验证。签名的实现过程如下:,l,A,用他的私人密钥加密消息,从而对文件签名;,l,A,将签名的消息发送给,B,;,l,B,用,A,的公开密钥解消息,从而验证签名;,3,、使用公开密钥体制与单向散列函数进行数字签名,4,、加入时间标记的签名,5,、多重签名,6,、盲签名,
展开阅读全文