1第五章消息认证与数字签名2保证信息的完整性主要通过信息认证和数字签名来实现。公钥密码体制最重要的一种应用是数字签名。而数字签名通常需要与散列函数结合起来使用。本章先介绍信息认证,然后介绍散列函数,最后介绍数字签名。35.1消息认证•消息认证主要是用来保证信息的完整性当接收方收到发送方的报文时,接收方能够验证收到的报文是真实的未被篡改的。•检验内容应包括:(1)证实报文的源和宿(2)报文内容是否曾受到偶然的或有意的篡改(3)报文的序号和时间栏总之,消息认证使接收者能识别消息的源,内容的真伪,时间性和意定的信宿.4•这种认证只在相应通信的双方之间进行,而不允许第三者进行上述认证。•保密和认证同时是信息系统安全的两个方面,但它们是两个不同属性的问题,认证不能自动提供保密性,而保密性也不能自然提供认证功能5认证则主要是为了防止第三方的主动攻击。认证系统的目的有两个:(一)信源识别,即验证发信人确实不是冒充的;(二)检验发送信息的完整性,也就是说,即使信息确实是经过授权的信源发送者发送的,也要验证在传送过程中是否被篡改,重放或延迟。在认证理论中一般将信源识别和发送信息的完整性检验两者作为一个整体进行讨论。认证系统6认证系统可以按下列4种方式进行分类①:条件安全认证系统与无条件安全认证系统。无条件安全性又称理论安全性,敌方破译认证系统所作的任何努力都不会比随机选择碰运气更优。条件安全性又称实际安全性,即认证系统的安全性是根据破译该系统所需的计算量来评价的。如果破译一个系统在理论上是可行的,但依赖现有的计算工具和计算资源不可能完成所要求的计算量,称之为在计算上是安全的。如果能够证明破译某个体制的困难性等价于解决某个数学难题,称为是可证明安全的。7②:有保密功能的认证系统与无保密功能的认证系统有保密功能的认证系统能够同时提供认证和保密两种功能;无保密功能的认证系统只是纯粹的认证系统。8③:有仲裁认证系统与无仲裁认证系统。传统的认证系统只考虑了通信双方互相信任,共同抵御敌方的主动攻击的情形,此时系统中只有参与通信的发方和接收方及发起攻击的敌方,而不需要裁决方。因此,称之为无仲裁人的认证系统。但在现实生活中,常常遇到的情形是通信双方并不互相信任,比如,发信方发送了一个消息后,否认曾发送过该消息;或者收信方接收到发方发送的消息后,否认曾接收到该消息或宣称接收到了自己伪造的不同于接收到的消息的另一个消息。一旦这种情况发生,就需要一个仲裁方来解决争端。这就是有仲裁人认证系统的含义。有仲裁人认证系统又可分为单个仲裁人认证系统和多仲裁人认证系统。9④:有分裂的认证系统与无分裂的认证系统。一个认证系统中,发方在将信源信息发送给合法接收方时,先将该信息利用共同约定的编码规则编码成为消息,把消息在公共信道上发送;接收方接收到从发方发来的消息后,利用掌握的编码规则破解消息得到实际发方要发送的信息。一般地,编码规则将一个信息编码成为一个对应的消息,这时称为无分裂的认证码;若编码规则编码一个信息成为多个消息,则称为是有分裂的认证码。10产生认证符的方法分为以下三类:•信息加密(Messageencryption):将明文加密后以密文作为认证符•消息认证码MAC(MessageAuthenticationCode,MAC):用一个密钥控制的公开函数作用后,产生固定长度的数值作为认证符,也称为密码校验和•散列函数(HashFunction):定义一个函数将任意长度的消息映射为定长的散列值,以散列值作为认证符11加密认证信息加密函数(2种)•信息加密能够提供一种认证措施,具体有两种加密体制•对称密码体制加密认证A使用只有他与接收者B知道的密钥K加密信息并发送给接收者。因为A是除B以外惟一拥有密钥的一方,攻击者不知道如何通过改变密文来产生明文中所期望的变化,所以B能够知道解密得到的明文是否被改变。这样对称加密就提供了消息认证功能。•问题:B如何能知道解密后得到的是没被改过的?可采用的方法之一是强制明文有某种结构。这种结构易于识别,但不能复制并且不求助于加密。例如,在加密前对消息附加检错码。12•公钥密码体制加密认证使用公开密钥加密明文只能提供保密而不能提供认证。因为任何人都可以得到公钥,为了提供认证,发送者A用私钥对信息的明文进行加密。这样在效果上也起到签名的作用。13消息认证码(MAC)(或称密码检验和)是在密钥的控制下将任意长的消息映射到一个简短的定长数据分组,并将它附加在消息后。设M是变长的消息,K是仅由收发双方共享的密钥,则M的MAC由如下的函数C生成MAC=Ck(M)这里Ck(M)是定长的。发送者每次将MAC附加到消息中。接受者通过重新计算MAC来对消息进行认证。如果收到的MAC与计算到的相同,则接受者可认为:消息未被更改过消息来自其他共享密钥的发送者。注意:由于收发双方共享相同的密钥,上述过程只能提供认证而不能提供保密,也不能提供数字签名消息认证码(MAC)145.2散列函数•散列函数(又称杂凑函数)是对不定长的输入产生定长输出的一种特殊函数,目的是为文件、消息或其他的分组数据产生“指纹”。•h=H(M),其中M是变长的消息,h是定长的散列值(或称为消息摘要)。•散列函数H是公开的,散列值被附加在消息上,接收方通过重新计算散列值来确认消息未被篡改。传送过程中对散列值需要另外的加密保护。15散列函数的性质•H能用于任何大小的数据分组,都能产生定长的输出•对于任何给定的x,H(x)要相对易于计算•对任何给定的散列码h,寻找x使H(x)=h在计算上不可行•对任何给定的分组x,寻找不等于x的y,使得H(x)=H(y)在计算上不可行(弱抗冲突)•寻找任何的(x,y),使得H(x)=H(y)在计算上不可行(强抗冲突)16散列码不同的使用方式可以提供不同需求的消息认证•使用对称密码机制对附加了散列码的消息进行加密。此方式与用对称密码体制加密在附加检错码的消息在结构上是一致的,认证原理相同,提供加密性。•使用对称密码体制仅对附加的散列码进行加密。将散列函数与加密函数合并成一个整体函数实际上就是一个MAC函数。•使用公钥密码体制,但发送方的私有密钥仅对散列码进行加密。与前种方式一样提供认证,还提供数字签名。•发送者将消息M与通信各方共享的一个秘密值S串接,然后计算出散列值,并将散列附在消息M之后发送出去。由于秘密值S并不发送,攻击者将无法产生假消息17散列函数的结构•采用分块填充链接的模式,结构是迭代型。•输入数据分为L个固定长度为b比特的分组。•压缩函数f有两个输入:一个是前一步的n比特输出,称为链接变量,另一个是b比特的分组。•算法开始时指定一个初始的V0。最后的VL就是散列值。通常bn。18安全散列算法(SHA)••安全散列算法SHA(SecureHashAlgorithm)是由美国国家标准和技术协会(NIST)提出的,并作为联邦信息处理标准(FIPSPUB180)在1993年公布。1995年又发布了一个修订版FIPSPUB180-1,通常称为SHA-1。•基于MD4算法•算法输入──不长于264位的任意消息算法输出──160位的消息摘要(可表示为40位16进制数)分组长度──512位19SHA-1描述•消息填充在原始的消息后附加填充比特串,使得数据长度(比特数)与448模512同余。填充是必须的,填充的比特数从1到512。填充比特串的第1位是1,其余各位均是0。•附加消息长度用64比特的二进制数表示原始消息的长度,再将所得的64比特数据附加在上面一步所得的数据后(高位字节优先)20•初始化MD缓存用一个160比特的缓存来存放该散列函数的中间及最终结果。该缓存可以表示为5个32比特的寄存器(A,B,C,D,E)。这些寄存器被初始化为以下32比特长的整数(十六进制):A=67452301B=EFCDAB89C=98BADCFED=10325476E=C3D2E1F0SHA-1描述21•分组扩展将512比特的分组扩展为80个32比特的字Wt(0=t=79),前16个Wt取自分组的原始数据,当t=16时,Wt=S1(Wt-3⊕Wt-8⊕Wt-14⊕Wt-16)(S1表示循环左移一位)SHA-1描述22•80轮迭代变换(由4次循环组成,每个循环又由20个处理步骤组成。)其中一轮迭代如下:初始输入ABCDEA=E+f(t,B,C,D)+S5(A)+Wt+Kt(mod232)B=AC=S30(B)D=CE=D其中公式中t的取值为0到790=t=195A827999f(t,B,C,D)=(B∧C)∨(┐B∧D)20=t=396ED9EBA1f(t,B,C,D)=(B⊕C⊕D)40=t=598F1BBCDCf(t,B,C,D)=(B∧C)∨(B∧D)∨(C∧D)60=t=79CA62C1D6f(t,B,C,D)=(B⊕C⊕D)SHA-1描述23•A,B,C,D,E(E+f(t,B,C,D)+S5(A)+Wt+Kt),A,S30(B),C,DSHA-1的压缩函数SHA-1压缩算法中的一个循环。A,B,C,D和E是这个state中的32位元文字;F是会变化的非线性函数;n代表bit向左循环移动n个位置。n因操作而异。田代表mod232之下的加法,Kt是一个常数。24a=h0=0x67452301b=h1=0xEFCDAB89c=h2=0x98BADCFEd=h3=0x10325476e=h4=0xC3D2E1F0(Pre-processing:)paddedmessage=(message)append1whilelength(paddedmessage)mod512448:paddedmessage=paddedmessageappend0paddedmessage=paddedmessageappend(length(message)in64-bitformat)(Processthemessageinsuccessive512-bitchunks:)while512-bitchunk(s)remain(s):breakthecurrentchunkintosixteen32-bitwordsw(i),0=i=15(Extendthesixteen32-bitwordsintoeighty32-bitwords:)forifrom16to79:w(i)=(w(i-3)xorw(i-8)xorw(i-14)xorw(i-16))leftrotate1伪代码(Mainloop:)forifrom0to79:temp=(aleftrotate5)+f(b,c,d)+e+k+w(i)(note:alladditionismod2^32)where:(0=i=19):f(b,c,d)=(bandc)or((notb)andd),k=0x5A827999(20=i=39):f(b,c,d)=(bxorcxord),k=0x6ED9EBA1(40=i=59):f(b,c,d)=(bandc)or(bandd)or(candd),k=0x8F1BBCDC(60=i=79):f(b,c,d)=(bxorcxord),k=0xCA62C1D6e=dd=cc=bleftrotate30b=aa=temph0=h0+ah1=h1+bh2=h2+ch3=h3+dh4=h4+edigest=hash=h0appendh1appendh2appendh3appendh4255.3数字签名体制消息认证能保护通信双方不受第三方的攻击,但却无法防止通信双方中的一方对另一方的欺骗。故除了认证之外还需要其他机制来防止通信双方的抵赖行为,最常见的解决方案就是数字签名。数字签名用于电子文档,支持数字信息的“鉴定”,向数字信息的接收者保证发送者的身份和该信息的完整性。26数字签名与传统签名的区别:①签名:手定写签名是被签文件的物理组成部分;而数字签名不是被签消息的物理部分,因而需要