第四章数字签名与身份认证数字签名技术身份认证技术4.1数字签名技术4.1.1数字签名基本原理数字签名的概念和特点数据摘要散列函数对消息处理产生的散列值,也称其为消息的散列值,摘要信息在数字签名中应用过程可以概述为:首先使用某种散列算法,对要发送的数据进行处理,生成数据摘要信息;然后采用公钥密码算法,用私钥加密数据摘要信息一个签名体制一般包括两个部分一是发送方的签名部分,对消息M签名,可以记作S=Sig(K,M),签字算法使用的密钥是秘密的,即是签字者的私钥。二是接收方的认证部分,对签名S的验证可以记作Ver(M,S,K)—{真,假},认证算法使用的密钥是发送方(即签名者)的公钥。4.1数字签名技术1.数字签名的特点(1)信息是由签名者发送的;(2)信息自签发后到收到为止未曾做过任何修改;(3)如果A否认对信息的签名,可以通过仲裁解决A和B之间的争议(4)数字签名又不同于手写签名:数字签名随文本的变化而变化,手写签字反映某个人个性特征,是不变的;数字签名与文本信息是不可分割的,而用手写签字是附加在文本之后的,与文本信息是分离的。2.数字签名的形式化定义“数字签名”系指在数据电文中,以电子形式所含、所附或在逻辑上与数据电文有联系的数据,和与数据电文有关的任何方法,它可用于数据电文有关的签字持有人和表明此人认可数据电文所含信息。4.1数字签名技术一个签名方案由签署算法与验证算法两部分构成。可用五元关系组(P,A,K,S,y)表示,其中,P是由一切可能消息(messages)所构成的有限集合;A是一切可能的签名的有限集合;K为有限密钥空间,是一些可能密钥的有限集合;任意k∈K,有签署算法Sigk∈S,Sigk:P→A,对任意x∈P,有s=Sigk(x),那么s∈S为消息x的签名,将(x,s)发送到签名验证者。对于密钥集合K,有对应的验证算法Verk∈y,满足:Verk:P×A→{真,假}签名者收到(x,s)后,计算Verk(x,y),若y=Sigk(x),则Verk(x,y)=真;若y≠Sigk(x),则Verk(x,y)=假。其中:①任意是k∈K,函数Sigk和Verk都为多项式时间函数。②Verk为公开的函数,而Sigk为秘密函数。③如果坏人要伪造B对x的签名,在计算上是不可能的。也即,给定x,仅有B能计算出签名y,使得Verk(x,y)=真。④一个签名方案不能是五条件安全的,有足够的时间,第三方总能伪造B的签名。4.1数字签名技术3.数字签名的功能(1)身份认证。收方通过发方的电子签名能够确认发方的确切身份,但无法伪造。(2)保密。双方的通信内容高度保密,第三方无从知晓。(3)完整性。通信的内容无法被篡改。(4)不可抵赖。发方一旦将电子签字的信息发出,就不能再否认。数字签名与数据加密完全独立。数据可以只签名或只加密,也可既签名又加密,当然,也可以既不签名也不加密。4.电子签名的法律地位4.1数字签名技术数字签名与手写签名的区别1.数字签名与手书签名的区别在于,手书签名是模拟的,且因人而异2.数字签名是0和1的数字串,因消息而异3.数字签名与消息认证的区别在于,消息认证使收方能验证消息发送者及所发消息内容是否被篡改过4.当收者和发者之间有利害冲突时,单纯用消息认证技术就无法解决他们之间的纠纷,此时须借助满足前述要求的数字签名技术。5.任何一种产生签名的算法或函数都应当提供这两种信息,而且从公开的信息很难推测出用于产生签名的机密信息6.任何一种数字签名的实现都有赖于精心设计的通信协议4.1数字签名技术数字签名方案的分类1.基于数学难题的分类(1)基于离散对数问题的签名方案(2)基于素因子分解问题的签名方案(3)上述两种的结合签名方案2.基于签名用户的分类(1)单个用户签名的数字签名方案(2)多个用户的数字签名方案。3.基于数字签名所具有特性的分类(1)不具有自动恢复特性的数字签名方案(2)具有消息自动恢复特性的数字签名方案4.基于数字签名所涉及的通信角色分类(1)直接数字签名(仅涉及通信的源和目的两方)(2)需仲裁的数字签名(除通信双方外,还有仲裁方)4.1数字签名技术数字签名使用模式与使用原理1.数字签名使用模式(1)智慧卡式(2)密码式(3)生物测定式2.数字签名使用原理数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公开密钥进行解密这是一个一对多的关系:任何拥有发送方公开密钥的人都可以验证数字签名的正确性。而私有密钥的加密解密则使用的是接收方的密钥对,这是多对一的关系:任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。通常一个用户拥有两个密钥对,另一个密钥对用来对数字签名进行加密解密,一个密钥对用来对私有密钥进行加密解密。这种方式提供了更高的安全性。4.1数字签名技术利用散列函数进行数字签名和验证的文件传输过程:(1)发送方首先用哈希函数从原文得到数字摘要,然后采用公开密钥体系用发送方的私有密钥对数字摘要进行签名,并把签名后的数字摘要附加在要发送的原文后面。(2)发送一方选择一个秘密密钥对文件进行加密,并把加密后的文件通过网络传输到接收方。(3)发送方用接收方的公开密钥对秘密密钥进行加密,并通过网络把加密后的秘密密钥传输到接收方。(4)接受方使用自己的私有密钥对密钥信息进行解密,得到秘密密钥的明文。(5)接收方用秘密密钥对文件进行解密,得到经过加密的数字摘要。(6)接收方用发送方的公开密钥对数字签名进行解密,得到数字摘要的明文。(7)接收方用得到的明文和哈希函数重新计算数字摘要,并与解密后的数字摘要进行对比。如果两个数字签名是相同的,说明文件在传输过程中没有被破坏。4.1数字签名技术上述流程:图4—1数字签名过程4.1数字签名技术4.1.2常规数字签名体制RSA数字签名体制1.数字签名框图图4-2RSA数字签名框图4.1数字签名技术2.签名过程(1)计算消息的散列值H(M)。(2)用私钥(d,n)加密散列值:s=(H(M))dmodn。答名结果就是s。(3)发送消息和签名(M,s)。当然,消息M很短的时候,可以直接对M用私钥加密,可以表达为:s=Sig(M)=Mdmodn,签名时使用私钥(d,n)。3.认证过程接收方收到(M,s)之后(1)取得发送方的公钥(e,n)(2)解密签名s:h=semodn。(3)计算消息的散列值H(M)。(4)比较,如果h=H(M),表示签名有效;否则,签名无效。如果消息M很短的时候,可以直接对M用公钥解密以验证签名的有效性,可以表达为:Ver(M,s)=真〈=〉M=semodn4.1数字签名技术DSS数字签名体制1.DSS介绍图4-3DSS数字签名体制4.1数字签名技术2.数字签名算法(DSA)(1)DSA算法参数说明DSA算法中应用了下述参数:P:Lbit长的素数。L是64的倍数,范围是512-1024;Q:p-1的160bit的素因子;G:g=h(p-1)/qmodp,h满足1hp-1,h(p-1)/qmodp1;X:1xq,x为私钥;Y:y=gxmodp,(p,q,g,y)为公钥;H(x):单向Hash函数。在DSS中选用安全散列算法(SecureHashAlgorithm,SHA)[3]。P,q,g:可由一组用户共享,但在实际应用中,使用公开模数可能会带来一定的威胁。4.1数字签名技术(2)签名及验证协议p产生随机数k,k﹤q。p计算r=(gkmodp)modq和s=(k-1(H(m)+xr))modq。签名结果是(m,r,s)。验证时,计算w=s-1modqu1=(H(m)·w)modqu2=(r·w)modqv=((gu1·yu2)modp)modq若v=r,则认为签名有效。4.1数字签名技术DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,也能确认它们是否是随机产生的。而RSA算法确做不到。图4-4描述了DSS的签名和验证函数。图4-4DSS签名和验证4.1数字签名技术椭圆曲线数字签名算法(ECDSA)1.ECDSA的签名算法签名的时候,自然有待签署的消息m;全局参数D=(q,FR,a,b,G,n,h),还有签名者的公钥私钥对(Q,d)。(1)选择一个随机数k,k∈[1,n—1];(2)计算kG=(x1,y1);(3)计算r=xlmodn;如果r=0,则回到步骤(1);(4)计算k-1modn;(5)计算e=SHA1(m);(6)计算s=k-1(e+dr)modn,如果s=0,则回到步骤(1);(7)对消息的签名为(r,s);最后签名者就可以把消息m和签名(r,s)发送给接收者。4.1数字签名技术2.ECDSA的认证算法签名的时候,自然有待签署的消息m;全局参数D=(q,FR,a,b,G,n,h),还有签名者的公钥私钥对(Q,d)。当接收者收到消息m和签名(r,s)之后,验证对消息签名的有效性,需要取得这些参数:全局参数D=(q,FR,a,b,G,n,h),发送者的公钥Q。(1)检查r、s,要求r、s∈[1,n-1];(2)计算e=SHA1(m);(3)计算w=s-1modn;(4)计算u1=ewmodn;u2=rwmodn;(5)计算X=ulG十u2Q;(6)如果X=O,表示签名无效;否则,X=(x1,y1),计算v=x1modn;(7)如果v=r,表示签名有效;否则表示签名无效:4.1数字签名技术4.1.3特殊数字签名体制不可否认数字签名失败-终止数字签名对每个可能的公开密钥,对应着很多的私有密钥,它们都可以正常工作。而签名者仅仅持有并知道众多私有密钥中的一个;所以强大的攻击者恢复出来的私有密钥,刚好是签名者持有的私有密钥的情况出现概率是非常小的。而不同的私有密钥产生的签名是不相同的,以此可以鉴别出伪造者的签名。盲签名图4-5盲签名原理4.1数字签名技术完全盲签名签名者在文件上的签名是有效的,签名是其签署文件的证据。如果把文件给签名者看,他可确信他签署过这份文件。但是,签名者不能把签署文件的行为与签署了的文件相关联。即使他记下了他所做的每一个盲签名,他也不能确定他在什么时候签署了该文件。批量签名批量签名(BatchSignature),是指能够用一次签名动作,完成对若干个不同的消息的签名;并且以后可以对每一条消息独立的进行认证。群签名1.群签名特点(1)只有团体内的成员才能够代表团体签名;(2)接收到签名的人可以验证该签名是属于某—团体的;(3)但是,接收者不知道签名的是该团体中的哪一个成员;(4)在出现争议时,可以由团体的成员或第三方识别出签字者。4.1数字签名技术2.一个简单的群签名协议该协议使用了一个可信赖的第三方,假设该团体有n个成员,下面简单的描述该协议的步骤:(1)第三方产生n×m对密钥(公钥私钥对);然后给每一个成员m对互异的密钥;(2)第三方把n×m个公钥用随机的顺序加以公开,作为群体的公钥表;并且第三方记住每—个成员对应哪m对密钥:(3)当群体中某—个成员签名时,从自己的m个私钥中随机选择一个,进行签名。(4)而验证签名时,用该团体的公钥表进行签名认证即可。(5)当发生争议时,第三方知道密钥对与成员之间的对应关系,所以可以确定出签名者是团体中哪一个成员。当然,上述协议的较大缺陷在于需要—个第三方。4.1数字签名技术代理签名代理签名(ProxySignature),就是指定某人来代替自己签署,也称为委托签名。代理签名一般应该具有如下特点:(1)可区分性(Distinguishability),代理签名与某人的通常签名是可以区分的。(2)不可伪造性(Unforgeability),只有原来的签名者和所托付的代理人可以建立合法的代理签名。(3)代理签名的差异(Deviation),代理签名者不可能制造一个合法代理签名,而不被检查出来其是一个代理签名。(4)可证实性(Verifiability),从代理签字中,验证者能够相信原始的签名者认同了这份签名的消息。(5)可识别性(Ident