您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 计算机网络安全技术第5章
第五章数字签名与认证5.1数字签名的基本概念1.数字签名及其特点在信息化社会,签名盖章和识别签名是一个重要的环节,例如,银行业务、电子资金传送、股票、证券交易、合同、协议的签字等,都需要签名。在计算机广泛应用的时代,应用密码学的方法实现数字签名,具有重要的理论意义,更具有重要实际意义。假设发送方sender发送了一个签了名的信息message给收方receiver,那么sender的数字签名必须满足以下条件:1)receiver能够证实sender对信息message的签名;2)任何人包括receiver在内,都不能伪造sender对message的签名;3)假设sender否认对信息message的签名,可以通过仲裁解决sender和receiver之间的争议。假定sender向receiver发送一则消息message,采用公开密码系统的签名过程描述如下:1)sender计算:c=Da(message)对message签名。Da是加密变换,所使用的秘密密钥为sender所私有,任何人,包括receiver在内,由于不知道sender的秘密钥,所以不能伪造sender的签名。2)receiver通过检查Ea(c)是否恢复message来验证sender的签名,Ea是Da的逆变换,Ea变换中所使用的密钥是sender的公开钥。3)如果sender和receiver之间发生争议,仲裁者可以用2)中的方法鉴定sender的签名。例:sender表示一个银行电子支付系统的客户,receiver代表sender所在的银行。Receiver收到sender要求取款1000万日元的信息后,必须确定这个信息确实是由sender签名发出的。如果以后sender否认这一笔取款,receiver能够向仲裁者证实,这个取款单确实是由sender签署的。如果采用公开钥密码系统签名,密秘钥仅为sender所拥有,公开钥大家都知道,sender无法否认自己的签名。别人由于不知道秘密钥也无法冒名顶替sender的签名。在上例中,由于银行和客户之间的业务信息往来应秘密进行,所以这个签名系统除要求生成签名和验证外,还要求加密。当然,和纸上签名一样,并非所有的数字签名系统都要求保密性。以上介绍的数字签名方案属于所谓的“常规数字签名方案”这类方案具有如下特点:1)签名者知道他签署的报文的内容。2)任何人只要知道签名者的公开密钥,就可以在任何时候验证签名的真实性,不需要签名者的“同意”信号或来自其他方面的信号。3)具有基于某种单向函数运算的安全性。但在电子货币、电子商业和其他的网络安全通信的实用中,可能要放宽或加强上列特征中的一个或几个,或添加上其他安全性特征,以适应各种不同的需要。例如,在因特网上购买商品或服务,要向供应商或银行付款,顾客发出包含有他的银行账号或别的重要信息的付款报文,由收款者作出(电子)签名才能有效,但账号之类的信息又不宜泄露给签名者,以保证安全。这种情况,就要使用盲签名方案(BlindSignatureScheme)。盲签名方案的工作原理是这样的:用户A有报文要求用户B签署,但不能让B知道关于报文m的任何信息。设(n,e)是B的公开密钥,(n,d)是他的秘密密钥。A用专用通信软件生成一个与n互质的随机数r,将m’=remmodn发送给B,这样,B收到的是被r“遮蔽”的m值,即m’,它不能从m’获取有关m的信息。接着,B发回签名值s’=(m’)dmodn=(rem)dmodn=remdmodn,A对收到的s’计算s’(re)-1modn=mdmodn,就得到了真正的来自于B的对m的签名s=mdmodn可见,运用盲签名方案,A无法代替或冒充B的签名,而B则不知道他自己所签署的报文的真实内容。除了盲签名方案之外,还有其它几种专用数字签名方案:“小组签名方案”(GroupSignatureScheme):一个小组的任一成员可以签署文件,验证者可以确认签名来自该小组,但不知道是小组的哪一个成员签署了文件。“一次性签名方案”(OnetimeSignatureScheme):仅能签署单个报文的签名方案。“不可抵赖签名方案”(UndeniableSignatureScheme):在签名和验证的常规成分之外添上“抵赖协议”(DisavowalProtocol),则仅在得到签名者许可信息后才能进行验证。“带有数字时间标记系统(DigitalTimestampingSystem)的签名方案”:将不可篡改的时间信息纳入数字签名方案。“多重签名”:使任意n个签名人产生的n个签名组成一个单一的签名。2.数字指纹仅用上述的数字签名是不够的,也是不实用的。因为数字签名不像纸上签名那样,签名和被签署的内容紧密联系在一起,因而不易被篡改。在数字签名中,如果sender的签名未与被签署的文件本身(message)相联系,就留下了篡改、冒充或抵赖的可能性。为了把那些千差万别报文(文件)和数字签名不可分割的结合在一起,即签名与其发送的信息紧密结合起来,需要设法从报文中提取一种确定格式的、符号性的摘要,称为“报文摘要”(messagedigest),更形象的一种说法是“数字指纹”(digitalfingerprint),然后对它进行签名并发出。可以说,真正的数字签名是信息发送者用其秘密密钥对从所传送的报文中提出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时,也确保信息报文在传递过程中未被篡改(即完整性)。当信息接受者受到报文后,就可以用发送者的公开密钥对数字签名进行验证。如果实体A要发送一个需要签署的报文给实体B,通信软件会调用某种报文摘要算法处理报文内容,得出一个数字指纹,然后用自己的秘密密钥将它加密,这才是真正的数字签名,将它同报文一并发送给B。B接到报文和数字签名后,用A的公开密钥将数字签名解密,恢复出数字指纹。接着用A所用的一样的报文摘要算法处理报文内容,将算出的数字指纹和接受到的经解密的数字指纹比较,如果两者完全相同,则A的数字签名被B验证成功,可以相信该报文是真实的,确实是发自于A。否则,报文可能来自别处,或被篡改过,有理由拒绝该报文。用上述方法,别人也不难读取报文并验证数字签名,这在使用中是不妥当的。为使报文本身的内容不泄露给别人,A只要再添加一个操作步骤:用B的公开密钥现将待发的报文加密,当然,B在验证数字签名无误后,要用其自己的秘密密钥解密,才能得到原始机密信息。总之,“报文摘要”是一种防止信息被篡改的方法,在数字签名中有重要作用的摘要算法,即生成报文“数字指纹”的方法,近年来倍受关注,构成了现代密码学的一个重要侧面。它是通过一类特殊的散列函数(Hash)生成的,这些函数的输入可以是任意大小的信息,而输出是一个固定长度的摘要。这些摘要有这样一个性质,如果改变了信息中的任何内容,甚至只改变了一位,输出摘要也将会发生不可预测的改变,即输入信息的每一位都影响输出的摘要。对这些Hash函数的特殊要求是:1)接受的输入报文数据没有长度限制。2)对任何输入报文数据生成固定长度的摘要(数字指纹)输出。3)从报文能方便的算出摘要。4)难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要,即不可逆性。5)两个不同的报文难以生成相同的摘要,即唯一性。显然,上面前三点是实用性的要求,保证对长短不一的报文易于生成同样大小的“数字指纹”;后两点则是安全性的要求,是建立在某种单向函数的基础之上的。这样摘要算法从给定的文本块中产生的数字签名,可以有效地防止从一个签名中获取文本信息或改变文本信息内容的行为。显然,客户机和服务器必须使用相同的算法。数字签名不同于手写签名:数字签名随文本的变化而变化,手写签名反映某个人个人特征,是不变的,数字签名与文本信息是不可分割的,而手写签名是附加在文本之后的,与文本信息是分离的。5.2数字签名算法DSADSA(digitalsignaturealgorithm)算法是美国国家标准与技术学会(NationalInstituteofStandardsandTechnology,NIST)于1994年公布的一个数字签名标准。DSA是一个公开钥数字签名算法,用于检验数据的完整性和一致性,第三方可以使用它来确认数字签名的合法性。1.DSA算法描述DSA是Schnorr和ELGamal数字签名算法的变体,DSA算法使用的参数含义如下:p:L比特长的素数,其中L范围是从512比特到1024比特,并且要求是64的整数倍(在原始标准中p的尺寸固定的512比特,后来p的尺寸由NIST作了改变)。q:160比特的数,并且要求是p-1的因子。g:gh(p-1)/qmodp,其中h是小于p-1的任意数,并且h(p-1)/qmodp1x:小于q的数y:ygxmodp前三个参数p、q、g是公开的,可以由一组网络用户共享。秘密密钥为x,公开密钥为y。DSA算法还利用了单项哈希函数H(m),该标准还规定了安全哈希算法。对信息m进行签名过程可以描述如下:1)发送方sender生成一个随机数k,并且kq2)发送方sender生成签名:r=(gkmodp)modqs=(k-1(H(m)+xr))modq参数r和s是sender的签名,sender把这些信息发送给接收方receiver。3)receiver通过计算验证这些签名:w=s-1modqu1=(H(m)w)modqu2=(rw)modqv=(modp)modq如果v=r,那么签名被证实。)(21uuyg1.使用预先计算来加快速度DSA的实现经常是通过预先计算来加快速度的。注意到r的值不取决于信息(由随机数k确定)。可以生成一串k值,然后再计算对应的r值,也可以计算k对应的k-1。于是,当对消息签名时,可以用给定的r和k-1进行计算。表5.1给出了DSA样本软件速度。表5.1对于不同的模长度带有160比特指数的DSA速度模长度签名验证512比特0.20秒0.35秒768比特0.43秒0.80秒1024比特0.57秒1.27秒如果p取512比特,DSA算法对长期安全强度是不够的,如果取1024比特,DSA算法对长期安全强度是足够的。3.DSA素数生成密码学家Lentra和Haber指出DSA的一些模是容易攻破的。如果一些网络用户使用这样的模,那么他的签名就会被伪造。但是这些模很容易被检测,而且数目很少,以至于选择这样的模的概率很小。NIST学会推荐生成两个素数p、q的一个特别的方法,其中q能整除p-1,p长度为L比特,L范围是512比特到1024比特之间,并且是64的整数倍。素数q长度是160比特。令L-1=160n+b,其中L是p的长度,n和b是两个数,b160。DSA素数生成步骤如下:1)选择至少有160比特的任意序列,称之为S。令g是S的比特长度;2)计算U=SHA(S)SHA((S+1)mod2g,其中,SHA是安全哈希算法;3)设置U的最高有效位和最低有效位为1,形成q;4)检查q是否是素数;5)如果q不是素数,则转会步骤1;6)令C=0且N=2;7)对应k=0,1,2,…,n,令Vk=SHA((S+N+k)mod2g);8)令W是一个整数W=V0+2160V1+…+2160(n-1)Vn-1+2160nVn(mod2b)并且令X=W+2L+1;9)令p=X–((Xmod2q)–1),要求pmod2q=1;10)如果p2L-1则转到步骤13;11)检查p是否是素数;12)如果p是素数,则转到步骤15;13)令C=C+1且N=N+n+1;14)如果C=4096,则转到步骤1,否则转到步骤7;15)存储S和C的值,用于生成p和q。上式中,变量S称作“种子”,C称作“计数器”,N称作“偏移量”。4.用DSA的RSA加密假设DSA算法由一个单独的函数调用实现:DSAsign(p,q,g,k,x,h,r,s)给函数提供参数p,q,g,k,x,h,函数返回签名r,s。使用RSA加密是比较容易的,设模为n,消息为m,公开密钥为e,调用DSAsign(n,n,
本文标题:计算机网络安全技术第5章
链接地址:https://www.777doc.com/doc-1269233 .html