1、2018/10/13,Ch5-消息认证与数字签名,1,第5章 消息认证与数字签名,主要知识点:- 认证- 认证码- 散列函数- MD5- SHA-512- 数字签名,2018/10/13,Ch5-消息认证与数字签名,2,5.1认证,认证则是防止主动攻击的重要技术,可以防止如下一些攻击 : 伪装:攻击者生成一个消息并声称这条消息是来自某合法实体,或者攻击者冒充消息接收方向消息发送方发送的关于收到或未收到消息的欺诈应答。 内容修改:对消息内容的修改,包括插入、删除、转换和修改。 顺序修改:对通信双方消息顺序的修改,包括插入、删除和重新排序。 计时修改:对消息的延迟和重放。在面向连接的应用中,攻击者
2、可能延迟或重放以前某合法会话中的消息序列,也可能会延迟或重放是消息序列中的某一条消息。,2018/10/13,Ch5-消息认证与数字签名,3,认证的目的,第一,验证消息的发送者是合法的,不是冒充的,这称为实体认证,包括对信源、信宿等的认证和识别; 第二,验证信息本身的完整性,这称为消息认证,验证数据在传送或存储过程中没有被篡改、重放或延迟等。,2018/10/13,Ch5-消息认证与数字签名,4,认证的目的,可提供认证功能的认证码的函数可分为三类: 加密函数:使用消息发送方和消息接收方共享的密钥对整个消息进行加密,则整个消息的密文作为认证符。 消息认证码:它是消息和密钥的函数,产生定长度值,该
3、值作为消息的认证符。 散列函数:它是将任意长的消息映射为定长的hash值的函数,以该hash值作为认证符。,2018/10/13,Ch5-消息认证与数字签名,5,基本的认证系统模型,2018/10/13,Ch5-消息认证与数字签名,6,5.2 消息认证码,消息认证码,简称MAC (Message Authentication Code),是一种使用密钥的认证技术,它利用密钥来生成一个固定长度的短数据块,并将该数据块附加在消息之后。 在这种方法中假定通信双方A和B共享密钥K。若A向B发送消息M时,则A使用消息M和密钥K,计算MACC(K,M),2018/10/13,Ch5-消息认证与数字签名,7
4、,消息认证码的使用,2018/10/13,Ch5-消息认证与数字签名,8,消息认证码的使用(续),2018/10/13,Ch5-消息认证与数字签名,9,MAC的安全要求,MAC中使用了密钥,这点和对称密钥加密一样,如果密钥泄漏了或者被攻击了,则MAC的安全性则无法保证。 在基于算法的加密函数中,攻击者可以尝试所有可能的密钥以进行穷举攻击,一般对k位的密钥,穷举攻击需要2(k-1)步。,2018/10/13,Ch5-消息认证与数字签名,10,对MAC的攻击,第一轮给定M1, MAC1CK(M1)对所有2k个密钥判断MACiCKi(M1)匹配数2(k-n) 。第二轮给定M2, MAC2CK(M2)
5、对循环1中找到的2(k-n)个密钥判断MACiCKi (M2)匹配数2(k-2n) 。 攻击者可以按此方法不断对密钥进行测试,直到将匹配数缩写到足够小的范围。平均来讲,若k=an,则需a次循环,2018/10/13,Ch5-消息认证与数字签名,11,针对MAC算法的攻击,攻击者针对下面的MAC算法,则不需要使用穷举攻击即可获得密钥信息。 设消息M(X1|X2|Xm),即由64位分组Xi联结而成。定义(M)X1X2 XmCk(M)=EK(M)攻击者可以用任何期望的Y1至Ym-1替代X1至Xm-1,用Ym替代Xm来进行攻击,其中Ym如下计算的:YmY1Y2Ym-1(M)攻击者可以将Y1至Ym-1与
6、原来的MAC连结成一个新的消息M,接收方收到(M, Ck(M)时,由于(M)= Y1 Y2 Ym =(M),因此Ck(M)=EK(M),接受者会认为该消息是真实。用这种办法,攻击者可以随意插入任意的长为64(m-1)位的消息。,2018/10/13,Ch5-消息认证与数字签名,12,MAC的性质,一个安全的MAC函数应具有下列性质: 若攻击者知道M和Ck(M),则他构造满足Ck(M)= Ck(M)的消息M在计算上是不可行的。 Ck(M)应是均匀分布的,即对任何随机选择的消息M和M, Ck(M)=Ck(M)的概率是2-n,其中n是MAC的位数。 设M是M 的某个已知的变换,即M=f(M),则Ck
7、(M)= Ck(M)的概率为2-n。,2018/10/13,Ch5-消息认证与数字签名,13,基于DES的消息认证码,2018/10/13,Ch5-消息认证与数字签名,14,5.3 Hash函数,Hash函数(也称散列函数或杂凑函数)是将任意长的输入消息作为输入生成一个固定长的输出串的函数,即h=H(M)。这个输出串h称为该消息的散列值(或消息摘要,或杂凑值)。,2018/10/13,Ch5-消息认证与数字签名,15,安全的Hash函数的要求,H可以应用于任意长度的数据块,产生固定长度的散列值; 对每一个给定的输入m,计算H(m)是很容易的; 给定Hash函数的描述,对于给定的散列值h,找到满
8、足H(m) = h的m在计算上是不可行的; 给定Hash函数的描述,对于给定的消息m1,找到满足m2m1且H(m2)=H(m1)的m2在计算上是不可行的; 找到任何满足H(m1)=H(m2)且m1 m2的消息对(m1, m2)在计算上是不可行的。,2018/10/13,Ch5-消息认证与数字签名,16,Hash的一般结构,2018/10/13,Ch5-消息认证与数字签名,17,2018/10/13,Ch5-消息认证与数字签名,18,Hash函数的安全要求,1单向性:对任何给定的散列码h,找到满足H(x)h的x在计算上是不可行的。 2抗弱碰撞性:对任何给定的消息x,找到满足yx且H(x)=H(y
9、)的y在计算上是不可行的。 3抗强碰撞性:找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的。,2018/10/13,Ch5-消息认证与数字签名,19,生日攻击(Birthday Attack),如果攻击者希望伪造消息M的签名来欺骗接收者,则他需要找到满足H(M)=H(M)的M来替代M。 对于上述问题换种说法:假设一个函数有n个函数值,且已知一个函数值H(x)。任选k个任意数作为函数的输入值,则k必须为多大才能保证至少找到一个输入值y且H(x)=H(y)的概率大于0.5?,2018/10/13,Ch5-消息认证与数字签名,20,生日悖论,我们可以如下描述这类问题:k为多大时,在k
10、个人中至少找到两个人的生日相同的概率大于0.5?不考虑二月二十九日并且假定每个生日出现的概率相同。,2018/10/13,Ch5-消息认证与数字签名,21,首先k个人的生日排列的总数目是365k。这样,k个人有不同生日的排列数为:因此,k个人有不同生日的概率为不重复的排列数除以总书目,得到:则,k个人中,至少找到两个人同日出生的概率是:,2018/10/13,Ch5-消息认证与数字签名,22,Yuval的生日攻击,(1) 合法的签名方对于其认为合法的消息愿意使用自己的私钥对该消息生成的m位的散列值进行数字签名。 (2) 攻击者为了伪造一份有(1)中的签名者签名的消息,首先产生一份签名方将会同意
11、签名的消息,再产生出该消息的2m/2种不同的变化,且每一种变化表达相同的意义(如:在文字中加入空格、换行字符)。然后,攻击者再伪造一条具有不同意义的新的消息,并产生出该伪造消息的2m/2种变化。,2018/10/13,Ch5-消息认证与数字签名,23,Yuval的生日攻击(续),(3) 攻击者在上述两个消息集合中找出可以产生相同散列值的一对消息。根据“生日悖论”理论,能找到这样一对消息的概率是非常大的。如果找不到这样的消息,攻击者再产生一条有效的消息和伪造的消息,并增加每组中的明文数目,直至成功为止。 (4) 攻击者用第一组中找到的明文提供给签名方要求签名,这样,这个签名就可以被用来伪造第二组
12、中找到的明文的数字签名。这样,即使攻击者不知道签名私钥也能伪造签名。,2018/10/13,Ch5-消息认证与数字签名,24,中间相遇攻击法(Meet in the Middle Attack),(1) 根据已知数字签名的明文,先产生散列函数值h。 (2) 再根据意图伪造签名的明文,将其分成每个64位长的明文分组:Q1, Q2, QN-2。Hash函数的压缩算法为:hi=EQihi-1,1iN-2。 (3) 任意产生232个不同的X,对每个X计算EXhN-2。同样的,任意产生232个不同的Y,对每个Y计算DYG,D是相对应E的解密函数。,2018/10/13,Ch5-消息认证与数字签名,25,
13、中间相遇攻击法(Meet in the Middle Attack)-续,(4) 根据“生日悖论”,有很大的概率可以找到一堆X及Y满足EXhN-2= DYG。 (5) 如果找到了这样的X和Y,攻击者重新构造一个明文:Q1, Q2, , QN-2, X, Y。这个新的明文的散列值也为h,因此攻击者可以使用已知的数字签名为这个构造的明文伪造新的明文的签名。,2018/10/13,Ch5-消息认证与数字签名,26,MD5,MD5(Message-Digest Algorithm 5)是由Ronald L. Rivest(RSA算法中的“R”)这90年代初开发出来的,经MD2、MD3和MD4发展而来。
14、它比MD4复杂,但设计思想类似,同样生成一个128位的信息散列值。其中,MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的计算机。 2004年8月,在美国召开的国际密码学会议(Crypto2004)上,王小云教授给出破解MD5、HAVAL-128、 MD4和RIPEMD算法的报告。给出了一个非常高效的寻找碰撞的方法,可以在数个小时内找到MD5的碰撞。,2018/10/13,Ch5-消息认证与数字签名,27,5.4 数字签名,数字签名是公钥密码学发展过程中的一个重要组成部分,是公钥密码算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对数据信息进行处理,完成对数据的
15、合法“签名”,数据接收方则利用发送方的公钥来验证收到的消息上的“数字签名”,以确认签名的合法性。,2018/10/13,Ch5-消息认证与数字签名,28,为什么需要数字签名,Message authentication用以保护双方之间的数据交换不被第三方侵犯;但它并不保证双方自身的相互欺骗。假定A发送一个鉴别的信息给B,双方之间的争议可能有多种形式: B伪造一个不同的消息,但声称是从A收到的。 A可以否认发过该消息,B无法证明A确实发了该消息。 例如:EFT(电子资金转账 )中改大金额;股票交易指令亏损后抵赖。 防止通信双方间的欺诈和抵赖行为,采用数字签名技术 数字签名功能包含了鉴别的功能。
16、数字签名是手写签名的数字实现,2018/10/13,Ch5-消息认证与数字签名,29,数字签名与手写签名的比较,数字签名与手写签名的区别: 需要将签名与消息绑定在一起。 手写签名是通过与真实签名比较来验证,数字签名是通过已经公开的验证算法来验证,通常任何人都可验证。 要考虑防止签名的复制、重用(加入时间戳)。,2018/10/13,Ch5-消息认证与数字签名,30,数字签名,数字签名是传统签名的数字化,基本要求: 签名不能被伪造 签名者不能否认自己的签名; 能与所签文件“绑定” ,签名必须依赖于被签名信息的比特模式 必须能够认证签名时刻的内容(即签名后不能再修改) 容易被验证 争议发生时,签名
17、必须能够由第三方验证,以解决争议;,2018/10/13,Ch5-消息认证与数字签名,31,数字签名的设计要求,唯一性:签名必须使用某些对发送者是唯一的信息,以防止双方的伪造与否认; 依赖性:签名必须是依赖于被签名的信息; 必须相对容易生成该数字签名; 可验证:必须相对容易识别和验证该数字签名; 抗伪造:伪造该数字签名在计算复杂性意义上具有不可行性,既包括对一个已有的数字签名构造新的消息,也包括对一个给定消息伪造一个数字签名; 可用性:算法简单,并且在存储器中保存一个数字签名备份是现实可行的,2018/10/13,Ch5-消息认证与数字签名,32,数字签名的产生方法,信息发送者使用公开密钥算法
18、技术,产生别人无法伪造的一段数字串。 发送者用自己的私有密钥加密数据连同原文传送给接收者,接收者用发送者的公钥解开数据后,就可确定消息有没有被窜改,同时也是对发送者发送的信息的真实性的一个证明。发送者对所发信息不能抵赖。,公开加密算法用于签名的条件:E(D(X)=X,2018/10/13,Ch5-消息认证与数字签名,33,普通(直接)数字签名(DDS),AB: M| EKRaM只有A具有KRa进行加密;传输中没有被篡改; 任何第三方可以用KUa 验证签名,2018/10/13,Ch5-消息认证与数字签名,34,RSA 公钥:KU=e,n,私钥:KR=d,n 选好这些参数后,将消息划分成块,使得
19、每个消息P长度为m满足0mn。 签名P时,计算y=Sig(P)=Pd(modn) 验证签名时,计算Pye(modn)?=P。,2018/10/13,Ch5-消息认证与数字签名,35,问题,对相当长的文件怎样签名?如一个合法文件有数兆字节长。自然按64比特分划成一块一块,用相同的密钥独立地签每一个块。然而,这样太慢,产生的签名值也非常长。 如果消息x1,x2的签名分别是y1和y2,则拥有x1,x2,y1,y2的任何人可伪造B关于消息x1x2的签名y1y2,因为SigkRB(x1x2)= SigkRB(x1) SigkRB(x2)mod n 任何人能通过对某一y计算x=EkUB(y)伪造一个B随机
20、消息x的签名,因为y=SigkRB(x),2018/10/13,Ch5-消息认证与数字签名,36,解决办法,解决办法:引入可公开的散列函数(Hash function)。它将取任意长度的消息做自变量,结果产生规定长度的消息摘要。如,使用数字签名标准DSS,消息摘要为160比特,然后签名消息摘要。对数字签名来说,散列函数h是这样使用的:消息: x 任意长消息摘要: Z=h(x) 160bits签名: y=sigk(Z) 320 bits (签名一个消息摘要)验证签名:(x,y),其中y= sigk(h(x),使用公开的散列函数h,重构作Z =h(x)。然后Verk(y)=Z,来看Z=Z,2018
21、/10/13,Ch5-消息认证与数字签名,37,2018/10/13,Ch5-消息认证与数字签名,38,RSA签名方案,签名不能提供保密性,2018/10/13,Ch5-消息认证与数字签名,39,数字签名的典型使用,(1) 消息发送方使用散列函数对消息进行计算,得到消息的散列值。 (2) 发送方使用自己的私钥对消息散列值进行计算,得到一个较短的数字签名串。 (3) 这个数字签名将和消息一起发送给接收方。 (4) 接收方首先从接收到的消息中用同样的散列函数计算出一个消息摘要,然后使用这个消息摘要、发送者的公钥以及收到的数字签名,进行数字签名合法性的验证。,2018/10/13,Ch5-消息认证与
22、数字签名,40,常见的数字签名方案,Schnorr数字签名 Dss数字签名 Rsa数字签名下面介绍特殊签名,2018/10/13,Ch5-消息认证与数字签名,41,仲裁数字签名,仲裁签名中除了通信双方外,还有一个仲裁方发送方A发送给B的每条签名的消息都先发送给仲裁者T,T对消息及其签名进行检查以验证消息源及其内容,检查无误后给消息加上日期再发送给B,同时指明该消息已通过仲裁者的检验。仲裁数字签名实际上涉及到多余一步的处理,仲裁者的加入使得对于消息的验证具有了实时性。,2018/10/13,Ch5-消息认证与数字签名,42,盲签名,盲签名是Chaum在1982年首次提出的,并利用盲签名技术提出了
23、第一个电子现金方案。盲签名因为具有盲性这一特点,可以有效的保护所签名的消息的具体内容,所以在电子商务等领域有着广泛的应用。 盲签名允许消息发送者先将消息盲化,而后让签名者对盲化的消息进行签名,最后消息拥有者对签名除去盲因子,得到签名者关于原消息的签名。,2018/10/13,Ch5-消息认证与数字签名,43,盲签名的性质,它除了满足一般的数字签名条件外,还必须满足下面的两条性质: 1. 签名者不知道其所签名的消息的具体内容。 2. 签名消息不可追踪,即当签名消息被公布后,签名者无法知道这是他哪次的签署的。,2018/10/13,Ch5-消息认证与数字签名,44,代理签名,代理签名的目的是当某签
24、名人因某种原因不能行使签名权力时,将签名权委派给其他人替自己行使签名权。由原始签名者(部分)授权代理签名者,使代理签名者产生代替原始签名的签名就是代理数字签名。这个概念是由Mambo,Usada和Okamoto于1996年首先提出的,并且给出了一个代理签名方案。,2018/10/13,Ch5-消息认证与数字签名,45,此外还有群签名、环签名,门限签名等。,2018/10/13,Ch5-消息认证与数字签名,46,第五章 密码学的应用,群数字签名 允许群中各成员以群的名义匿名地签发消息。 只有群的成员能代表这个群签名; 签名接收者能验证它是这个群的合法签名,但不知具体是哪个成员; 在发生争端时,借
25、助群成员或可信机构能识别出那个签名者。 用途:网上投标,数字签名新技术,2018/10/13,Ch5-消息认证与数字签名,47,第五章 密码学的应用,双重签名: 实现三方通信时的信息完整性、真实性和防抵赖的保护。 网上购物:客户和商家之间要完成在线付款,在客户(甲) 、商家(乙)和银行(丙)之间将面临以下问题:甲向乙发送订单和甲的付款信息;乙收到订单后,要同丙交互,以实现资金转帐。但甲不愿让乙看到自己的帐户信息,也不愿让丙看到订购信息。此时甲使用双重签名技术对两种信息作数字签名,来完成以上功能。(SET),2018/10/13,Ch5-消息认证与数字签名,48,SET协议流程: 1)用户向商家
26、发订单和信托书。信托书中的信用卡号是经过加密的,商家无从得知; 2)收单银行收到商家发来的信托书,解密信用卡号,并验证签名; 3)收单银行认可商家并签证此交易; 4)商家向用户传送货物和收据; 5) 交易成功,商家向收单银行索款; 8) 收单银行按合同将货款划给商家;,2018/10/13,Ch5-消息认证与数字签名,49,第五章 密码学的应用,双重数字签名的实现步骤如下: )甲对发给乙的信息M1生成摘要A1; )甲对发给丙的信息M2生成摘要A2 ; )甲把A1和A2合起来生成摘要A3,并用私钥签名A3,Sig(A3); )甲把M1、A2和Sig(A3)用乙的公钥加密生成L1; )甲把M2、A
27、1和Sig(A3)用丙的公钥加密生成L2; 把L1和L2发给乙;,2018/10/13,Ch5-消息认证与数字签名,50,第五章 密码学的应用,)乙接收信息后,将L1解密,对M1生成信息摘要A1,把A1和收到的A2合在一起,并生成新的信息摘要,同时使用甲的公钥对A3的签名进行验证,以确认信息发送者的身份和信息是否被修改过; )丙接收乙转发的信息后,将L2解密,对M2生成信息摘要A2,把A2和收到的A1合在一起,并生成新的信息摘要,同时使用甲的公钥对A3的签名进行验证,以确认信息发送者的身份和信息是否被修改过。,2018/10/13,Ch5-消息认证与数字签名,51,本章总结,消息鉴别 目的 实
28、现方法 数字签名 目的 散列函数应该具有的性质 普通数字签名方法及数字签名新技术,2018/10/13,Ch5-消息认证与数字签名,52,思考与练习,为什么需要消息认证和数字签名 散列函数具有那些性质? 用RSA算法实现数字签名 实现一个双方交互信息的系统,要求实现信息的保密性、完整性、真实性和不可否认性,保密性用对称加密算法。,2018/10/13,Ch5-消息认证与数字签名,53,Reference,William Stallings, Cryptography and network security: principles and practice, Second Edition. 冯登国 裴定一 ,密码学导引, 科学出版社,1999,