数字签名与鉴别协议_第1页
数字签名与鉴别协议_第2页
数字签名与鉴别协议_第3页
数字签名与鉴别协议_第4页
数字签名与鉴别协议_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络信息安全

数字签名计算机学院信息安全教研室张伟数字签名与鉴别协议数字签名技术是实现安全电子交易的核心技术之一。鉴别技术保证了在信息传送过程中能够正确地鉴别出信息发送方的身份.而且对信息内容的任何修改都可以被检测出来。利用常规加密方法和公开密钥加密方法都可以进行鉴别。

问题当通信双方发生了下列情况时,数字签名技术必须能够解决引发的争端:否认,发送方不承认自己发送过某一报文。伪造,接收方自己伪造一份报文,并声称它来自发送方。冒充,网络上的某个用户冒充另一个用户接收或发送报文。篡改,接收方对收到的信息进行篡改。办法解决:数字签名原理和流程公开密钥算法对信息直接加密(作为数字签名)非常耗时,因此加密人员想出了一种办法来快速地生成一个代表你的报文的简短的、独特的报文摘要,这个摘要可以被发送方的私有加密并作为发送方对该报文的数字签名。通常,产生报文摘要的快速加密算法被称为单向散列函数。一种单向散列函数不使用密钥,它只是一个简单的公式,把任何长度的一个报文转化为一个叫做报文摘要的固定长度的简单字符串。数字签名流程:(1)采用散列算法对原始报文进行运算,得到个固定长度的数字串,称为报文摘要(MessageDigest),不同的报文所得到的报文摘要各异,但对相同的报文它的报文摘要却是惟一的。在数学上保证,只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符,这样就保证了报文的不可更改性。(2)发送方用目己的私有密钥对摘要进行加密来形成数字签名。(3)这个数字签名将作为报文的附件和报文一起发送给接收方。(4)接收方首先对接收到的原始报文用同样的算法计算出新的报文摘要,再用发送方的公开密钥对报文附件的数字签名进行解密,比较两个报文摘要,如果值相同,接收方就能确认该数字签名是发送方的,否则就认为收到的报文是伪造的或者中途被篡改。数字证书数字签名用来保证信息传输过程中信息的完整和提供信息发送者的身份的确认。数字证书采用公开密钥体制(例如RSA)。每个用户设定一仅为本人所知的私有密钥,用它进行解密和签名;同时设定一公开密钥,为一组用户所共享,用于加密和验证签名。数字证书的作用采用数字证书,能够确认以下两点:(1)保证信息是由签名者自己签名发送的,签名者不能否认或难以否认。(2)保证信息自签发后到收到为止未曾做过任何修改,签发的信息是真实信息。鉴别协议报文鉴别往往必须解决如下的问题:(1)报文是由确认的发送方产生的。(2)报文的内容是没有被修改过的。(3)报文是按传送时的相同顺序收到的。(4)报文传送给确定的对方。一种方法是发送方用自己的私钥对报文签名,签名足以使任何人相信报文是可信的。另一种方法常规加密算法也提供了鉴别。但有两个问题,一是不容易进行常规密钥的分发,二是接收方没有办法使第三方相信该报文就是从发送方送来的,而不是接收方自己伪造的。因此,一个完善的鉴别协议往往考虑到四方面的鉴别。报文源报文宿报文内容报文时间性相互鉴别利用常规加密方法进行相互鉴别不得不从Needham—Schroeder协议谈起,它采用了常规加密体制和密钥分配中心KDC技术。尽管这个协议本身存在一定的安全漏洞,但是后来发展的很多鉴别协议都是在NSNeedham—Schroeder协议的基础上扩展而成的。在该协议中,网络中通信的各方与密钥分配中心KDC共享一个主密钥,这个主密钥已通过其他安全的渠道传送完成。密钥分配中心KDC为通信的双方产生短期通信所需的会话密钥,并通过主密钥来保护这些密钥的分发。Needham—Schroeder协议的鉴别通过如下的步骤进行:(1)AKDC:(IDa,IDb,Ra)。

通信方A将由自己的名字IDa,通信方B的名字IDb和随机数Ra组成的报文传给KDC。(2)KDCA:EKa(Ra,IDb,Ks,EKb(Ks,IDa))。KDC产生一随机会话密钥Ks。他用与通信方B共享的秘密密钥Kb对随机会话密钥Ks和通信方A名字组成的报文加密。然后用他和通信方A共享的秘密密钥Ka对通信方A的随机值、通信方B的名字、会话密钥Ks和已加密的报文进行加密,最后将加密的报文传送给通信方A。(3)AB:EKb(Ks,IDa)。

通信方A将报文解密并提取Ks。他确认Ra与他在第(1)步中发送给KDC的一样。然后他将KDC用通信方B的密钥Kb加密的报文发送给通信方B。(4)BA:EKs(Rb)。

通信方B对报文解密并提取会话密钥Ks,然后产生另一随机数Rb。他使用会话密钥Ks加密它并将它发送给通信方A。(5)AB:EKs(Rb-1)。

通信方A用会话密钥Ks将报文解密,产生Rb-1并用会话密钥Ks对它加密,然后将报文发回给通信方B。(6)通信方B用会话密钥Ks对信息解密,并验证它是Rb-1。这个协议的最终结果是把密钥分配中心KDC产生的会话密钥Ks安全地分发给通信方A和通信方B,同时通信双方A和B都证实自己的身份和对方的身份。尽管Needham—Schroeder协议已经考虑了重放攻击,但是设计一个完美的没有漏洞的鉴别协议往往是很困难的。考虑一下这种情况,如果一个对手已经获得了一个旧的会话密钥,那么在第(3)步中就可冒充通信方A向通信方B发送一个旧密钥的重放报文,而此时通信方B无法确定这是—个报文的重放。

Denning对Needham—schroeder协议进行了修改,防止这种情况下的重放攻击,其过程如下:(1)AKDC:(IDa,IDb)。(2)KDCA:EKa(T,IDb,Ks,EKb(T,Ks,IDa))。(3)AB:EKb(T,Ks,IDa)。(4)BA:EKs(Rb)。(5)AB:EKs(Rb-1)。在这个过程中,增加了时间戳T,向通信方A和B确保该会话密钥是刚产生的,使得通信方A和B双方都知道这个密钥分配是一个最新的。单向鉴别第一个需求是电子邮件,报文的首部必须是明文的,以便报文能被SMTP处理,而邮件报文内容应该加密。第二个需求是鉴别。典型的是,收方想得到某种保证,即该报文确实是来自被认为的发方。如果使用常规加密方法进行发方和收方的直接鉴别,密钥分配策略是不现实的。这种方案需要发方向预期的收方发出请求,等待包括一个会话密钥的响应,然后才能发送报文。??考虑到应该避免要求收方B和发方A同时在线,如下基于常规加密方法的方案解决了鉴别。(1)AKDC:(IDa,IDb,Ra)。(2)KDCA:EKa(IDb,Ks,Ra,EKb(Ks,IDa))。(3)AB:EKb(Ks,IDa)EKs(M)。这个常规加密方案提供了对A的认证,并且保证只有B可以看到明文,但是会遭到重放攻击。另外,如果在报文中加入时间戳,由于电子邮件潜在的时延,时间戳的作用非常有限。

公开密钥加密方法适合电子邮件AB:EKUb(Ks),Eks(M)关心机密,比使用公钥加密全文更高效AB:M,EKRa(H(M))关心鉴别,可能换签名AB:EKUb(M,EKRa(H(M)))机密+鉴别数字签名目前已有大量的数字签名算法,如RSA数字签名算法、EIGamal数字签名算法、椭圆线数字签名算法等。美国的数字签名标准/算法(DSS/DSA)美国国家标准技术学会(NIST)的一个标淮,它是ElGamal数字签名算法的一个修改。当选择p为512比特的素数时,ElGamal数字签名的尺寸是1024比特,而在DSA中通过选择一个160比特的素数可将签名的尺寸降低为320比特,这就大大地减少了存储空间和传输带宽。安全散列标准/算法(SHS/SHA)DSS签名使用FIPS80-1和安全hash标淮(SHS)产生和核实数字签名。许多加密者认为SHS所指定的安全散列算法(SHA)是当今可以得到的最强劲的散列算法。DSS的安全性表现在如下的几个方面:1)对报文的签名不会引起私有密钥的泄漏2)若不知私有密钥,没有人能够对给定的报文产生签名3)没有人能够产生匹配给定签名的报文4)没有人能够修改报文并且使原有的签名依然有效数字签名方案先对消息M作一个摘要H(M)然后发送方用自己的私钥对H(M)进行加密,得到签名EKRa(H(M))连同消息M一起,发送出去B收到复合的消息之后,把签名提取出来B用A的公钥对签名解密得到H’B计算所收到消息的摘要H(M’)如果H’=H(M’),则消息确实是A产生的问题公钥的管理,公钥与身份的对应关系签名的有效性,私钥丢失?两种数字签名方案全局公钥组KUG 签名随机数k 发送方私钥KRaRSA的缺点A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n至少也要600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(SecureElectronicTransaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。

DSS/DSA算法DigitalSignatureAlgorithm(DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignatureStandard)。

算法中应用了下述参数:

p:Lbits长的素数。L是64的倍数,范围是512到1024;

q:p-1的160bits的素因子;

g:g=h^((p-1)/q)modp,h满足h<p-1,h^((p-1)/q)modp>1;

x:x<q,x为私钥;

y:y=g^xmodp,(p,q,g,y)为公钥;

H(x):One-WayHash函数。DSS中选用SHA(SecureHashAlgorithm)。

p,q,g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。签名及验证协议如下:1.P产生随机数k,k<q;

2.P计算r=(g^kmodp)modq

s=(k^(-1)(H(m)+xr))modq

签名结果是(m,r,s)。

3.验证时计算w=s^(-1)modq

u1=(H(m)*w)modq

u2=(r*w)modq

v=((g^u1*y^u2)modp)modq

若v=r,则认为签名有效。

工具DSAToolv13DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却作不到。

加密算法的实现一些关键问题算法的精确性,需要经过严格测试找到权威的测试数据注意字节的顺序(big-endian和little-endian)算法的效率局部运算的优化可以大大改进效率大数的运算一些技巧的使用,比如查表法利用C/C++语言的优化技术局部地方采用汇编代码提高速度库本身的安全性专利问题Crypto++Open-source的加密算法库最新版本为4.2多个编译器兼容实现了几乎所有常用的算法并且给出了各个算法的参考和引用代码质量很高算法实现的效率代码本身、封装已经增加了文档维护,更新例子:加密字符串char*EncryptString(constchar*instr,constchar*passPhrase){ unsignedintlen=strlen(instr); char*outstr; DefaultEncryptorWithMACencryptor(passPhrase,

newHexEncoder()); encryptor.Put((byte*)instr,len); encryptor.Close(); unsignedintoutputLength=encryptor.MaxRetrieveable(); outstr=newchar[outputLength+1]; encryptor.Get((byte*)outstr,outputLength); outstr[outputLength]=0; returnoutstr;}例子:加解密文件voidEncryptFile(constchar*in,constchar*out,constchar*passPhrase){ FileSourcef(in,true,

newDefaultEncryptorWithMAC(passPhrase,newFileSink(out)));}voidDecryptFile(constchar*in,constchar*out,constchar*passPhrase){ DefaultDecryptorWithMAC*p; FileSourcefile(in,false,p=newDefaultDecryptorWithMAC(passPhrase)); file.Pump(256); if(p->CurrentState()!=DefaultDecryptorWithMAC::KEY_GOOD) { cerr<<"Incorrectpassphrase.\n"; return; } file.Attach(newFileSink(out)); file.PumpAll(); file.Close(); if(p->CurrentState()!=DefaultDecryptorWithMAC::MAC_GOOD) cerr<<"InvalidMAC.Thefilemayhavebeentemperedwith.\n";}例子:摘要voidDigestFile(constchar*filename){ MD5md5; SHAshs; RIPEMD160ripemd; BufferedTransformation*outputs[]={newHashFilter(md5),

newHashFilter(shs),newHashFilter(ripemd)}; FileSourcefile(filename,true,newFork(3,outputs)); cout<<"MD5:"; outputs[0]->Attach(newHexEncoder(newFileSink(cout))); cout<<endl; cout<<"SHA:"; outputs[1]->Attach(newHexEncoder(newFileSink(cout))); cout<<endl; cout<<"RIPEMD-160:"; outputs[2]->Attach(newHexEncoder(newFileSink(cout))); cout<<endl;}产生RSA公钥对voidGenerateRSAKey(unsignedintkeyLength,constchar*privFilename,constchar*pubFilename,constchar*seed){ RandomPoolrandPool; randPool.Put((byte*)seed,strlen(seed)); RSAES_OAEP_SHA_Decryptorpriv(randPool,keyLength); HexEncoderprivFile(newFileSink(privFilename)); priv.DEREncode(privFile); privFile.Close(); RSAES_OAEP_SHA_Encryptorpub(priv); HexEncoderpubFile(newFileSink(pubFilename)); pub.DEREncode(pubFile); pubFile.Close();}例子:RSA加密char*RSAEncryptString(constchar*pubFilename,constchar*seed,constchar*message){ FileSourcepubFile(pubFilename,true,newHexDecoder); RSAES_OAEP_SHA_Encryptorpub(pubFile); if(strlen(message)>pub.MaxPlainTextLength()){ cerr<<"messagetoolongforthiskey\n";abort(); } RandomPoolrandPool; randPool.Put((byte*)seed,strlen(seed)); char*outstr=newchar[2*pub.Ciphe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论