數(shù)字簽名與鑒別協(xié)議_第1頁
數(shù)字簽名與鑒別協(xié)議_第2頁
數(shù)字簽名與鑒別協(xié)議_第3頁
數(shù)字簽名與鑒別協(xié)議_第4頁
數(shù)字簽名與鑒別協(xié)議_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

網(wǎng)絡(luò)信息安全

數(shù)字簽名計(jì)算機(jī)學(xué)院信息安全教研室張偉數(shù)字簽名與鑒別協(xié)議數(shù)字簽名技術(shù)是實(shí)現(xiàn)安全電子交易的核心技術(shù)之一。鑒別技術(shù)保證了在信息傳送過程中能夠正確地鑒別出信息發(fā)送方的身份.而且對信息內(nèi)容的任何修改都可以被檢測出來。利用常規(guī)加密方法和公開密鑰加密方法都可以進(jìn)行鑒別。

問題當(dāng)通信雙方發(fā)生了下列情況時,數(shù)字簽名技術(shù)必須能夠解決引發(fā)的爭端:否認(rèn),發(fā)送方不承認(rèn)自己發(fā)送過某一報(bào)文。偽造,接收方自己偽造一份報(bào)文,并聲稱它來自發(fā)送方。冒充,網(wǎng)絡(luò)上的某個用戶冒充另一個用戶接收或發(fā)送報(bào)文。篡改,接收方對收到的信息進(jìn)行篡改。辦法解決:數(shù)字簽名原理和流程公開密鑰算法對信息直接加密(作為數(shù)字簽名)非常耗時,因此加密人員想出了一種辦法來快速地生成一個代表你的報(bào)文的簡短的、獨(dú)特的報(bào)文摘要,這個摘要可以被發(fā)送方的私有加密并作為發(fā)送方對該報(bào)文的數(shù)字簽名。通常,產(chǎn)生報(bào)文摘要的快速加密算法被稱為單向散列函數(shù)。一種單向散列函數(shù)不使用密鑰,它只是一個簡單的公式,把任何長度的一個報(bào)文轉(zhuǎn)化為一個叫做報(bào)文摘要的固定長度的簡單字符串。數(shù)字簽名流程:(1)采用散列算法對原始報(bào)文進(jìn)行運(yùn)算,得到個固定長度的數(shù)字串,稱為報(bào)文摘要(MessageDigest),不同的報(bào)文所得到的報(bào)文摘要各異,但對相同的報(bào)文它的報(bào)文摘要卻是惟一的。在數(shù)學(xué)上保證,只要改動報(bào)文中任何一位,重新計(jì)算出的報(bào)文摘要值就會與原先的值不相符,這樣就保證了報(bào)文的不可更改性。(2)發(fā)送方用目己的私有密鑰對摘要進(jìn)行加密來形成數(shù)字簽名。(3)這個數(shù)字簽名將作為報(bào)文的附件和報(bào)文一起發(fā)送給接收方。(4)接收方首先對接收到的原始報(bào)文用同樣的算法計(jì)算出新的報(bào)文摘要,再用發(fā)送方的公開密鑰對報(bào)文附件的數(shù)字簽名進(jìn)行解密,比較兩個報(bào)文摘要,如果值相同,接收方就能確認(rèn)該數(shù)字簽名是發(fā)送方的,否則就認(rèn)為收到的報(bào)文是偽造的或者中途被篡改。數(shù)字證書數(shù)字簽名用來保證信息傳輸過程中信息的完整和提供信息發(fā)送者的身份的確認(rèn)。數(shù)字證書采用公開密鑰體制(例如RSA)。每個用戶設(shè)定一僅為本人所知的私有密鑰,用它進(jìn)行解密和簽名;同時設(shè)定一公開密鑰,為一組用戶所共享,用于加密和驗(yàn)證簽名。數(shù)字證書的作用采用數(shù)字證書,能夠確認(rèn)以下兩點(diǎn):(1)保證信息是由簽名者自己簽名發(fā)送的,簽名者不能否認(rèn)或難以否認(rèn)。(2)保證信息自簽發(fā)后到收到為止未曾做過任何修改,簽發(fā)的信息是真實(shí)信息。鑒別協(xié)議報(bào)文鑒別往往必須解決如下的問題:(1)報(bào)文是由確認(rèn)的發(fā)送方產(chǎn)生的。(2)報(bào)文的內(nèi)容是沒有被修改過的。(3)報(bào)文是按傳送時的相同順序收到的。(4)報(bào)文傳送給確定的對方。一種方法是發(fā)送方用自己的私鑰對報(bào)文簽名,簽名足以使任何人相信報(bào)文是可信的。另一種方法常規(guī)加密算法也提供了鑒別。但有兩個問題,一是不容易進(jìn)行常規(guī)密鑰的分發(fā),二是接收方?jīng)]有辦法使第三方相信該報(bào)文就是從發(fā)送方送來的,而不是接收方自己偽造的。因此,一個完善的鑒別協(xié)議往往考慮到四方面的鑒別。報(bào)文源報(bào)文宿報(bào)文內(nèi)容報(bào)文時間性相互鑒別利用常規(guī)加密方法進(jìn)行相互鑒別不得不從Needham—Schroeder協(xié)議談起,它采用了常規(guī)加密體制和密鑰分配中心KDC技術(shù)。盡管這個協(xié)議本身存在一定的安全漏洞,但是后來發(fā)展的很多鑒別協(xié)議都是在NSNeedham—Schroeder協(xié)議的基礎(chǔ)上擴(kuò)展而成的。在該協(xié)議中,網(wǎng)絡(luò)中通信的各方與密鑰分配中心KDC共享一個主密鑰,這個主密鑰已通過其他安全的渠道傳送完成。密鑰分配中心KDC為通信的雙方產(chǎn)生短期通信所需的會話密鑰,并通過主密鑰來保護(hù)這些密鑰的分發(fā)。Needham—Schroeder協(xié)議的鑒別通過如下的步驟進(jìn)行:(1)AKDC:(IDa,IDb,Ra)。

通信方A將由自己的名字IDa,通信方B的名字IDb和隨機(jī)數(shù)Ra組成的報(bào)文傳給KDC。(2)KDCA:EKa(Ra,IDb,Ks,EKb(Ks,IDa))。KDC產(chǎn)生一隨機(jī)會話密鑰Ks。他用與通信方B共享的秘密密鑰Kb對隨機(jī)會話密鑰Ks和通信方A名字組成的報(bào)文加密。然后用他和通信方A共享的秘密密鑰Ka對通信方A的隨機(jī)值、通信方B的名字、會話密鑰Ks和已加密的報(bào)文進(jìn)行加密,最后將加密的報(bào)文傳送給通信方A。(3)AB:EKb(Ks,IDa)。

通信方A將報(bào)文解密并提取Ks。他確認(rèn)Ra與他在第(1)步中發(fā)送給KDC的一樣。然后他將KDC用通信方B的密鑰Kb加密的報(bào)文發(fā)送給通信方B。(4)BA:EKs(Rb)。

通信方B對報(bào)文解密并提取會話密鑰Ks,然后產(chǎn)生另一隨機(jī)數(shù)Rb。他使用會話密鑰Ks加密它并將它發(fā)送給通信方A。(5)AB:EKs(Rb-1)。

通信方A用會話密鑰Ks將報(bào)文解密,產(chǎn)生Rb-1并用會話密鑰Ks對它加密,然后將報(bào)文發(fā)回給通信方B。(6)通信方B用會話密鑰Ks對信息解密,并驗(yàn)證它是Rb-1。這個協(xié)議的最終結(jié)果是把密鑰分配中心KDC產(chǎn)生的會話密鑰Ks安全地分發(fā)給通信方A和通信方B,同時通信雙方A和B都證實(shí)自己的身份和對方的身份。盡管Needham—Schroeder協(xié)議已經(jīng)考慮了重放攻擊,但是設(shè)計(jì)一個完美的沒有漏洞的鑒別協(xié)議往往是很困難的??紤]一下這種情況,如果一個對手已經(jīng)獲得了一個舊的會話密鑰,那么在第(3)步中就可冒充通信方A向通信方B發(fā)送一個舊密鑰的重放報(bào)文,而此時通信方B無法確定這是—個報(bào)文的重放。

Denning對Needham—schroeder協(xié)議進(jìn)行了修改,防止這種情況下的重放攻擊,其過程如下:(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確保該會話密鑰是剛產(chǎn)生的,使得通信方A和B雙方都知道這個密鑰分配是一個最新的。單向鑒別第一個需求是電子郵件,報(bào)文的首部必須是明文的,以便報(bào)文能被SMTP處理,而郵件報(bào)文內(nèi)容應(yīng)該加密。第二個需求是鑒別。典型的是,收方想得到某種保證,即該報(bào)文確實(shí)是來自被認(rèn)為的發(fā)方。如果使用常規(guī)加密方法進(jìn)行發(fā)方和收方的直接鑒別,密鑰分配策略是不現(xiàn)實(shí)的。這種方案需要發(fā)方向預(yù)期的收方發(fā)出請求,等待包括一個會話密鑰的響應(yīng),然后才能發(fā)送報(bào)文。??考慮到應(yīng)該避免要求收方B和發(fā)方A同時在線,如下基于常規(guī)加密方法的方案解決了鑒別。(1)AKDC:(IDa,IDb,Ra)。(2)KDCA:EKa(IDb,Ks,Ra,EKb(Ks,IDa))。(3)AB:EKb(Ks,IDa)EKs(M)。這個常規(guī)加密方案提供了對A的認(rèn)證,并且保證只有B可以看到明文,但是會遭到重放攻擊。另外,如果在報(bào)文中加入時間戳,由于電子郵件潛在的時延,時間戳的作用非常有限。

公開密鑰加密方法適合電子郵件AB:EKUb(Ks),Eks(M)關(guān)心機(jī)密,比使用公鑰加密全文更高效AB:M,EKRa(H(M))關(guān)心鑒別,可能換簽名AB:EKUb(M,EKRa(H(M)))機(jī)密+鑒別數(shù)字簽名目前已有大量的數(shù)字簽名算法,如RSA數(shù)字簽名算法、EIGamal數(shù)字簽名算法、橢圓線數(shù)字簽名算法等。美國的數(shù)字簽名標(biāo)準(zhǔn)/算法(DSS/DSA)美國國家標(biāo)準(zhǔn)技術(shù)學(xué)會(NIST)的一個標(biāo)淮,它是ElGamal數(shù)字簽名算法的一個修改。當(dāng)選擇p為512比特的素?cái)?shù)時,ElGamal數(shù)字簽名的尺寸是1024比特,而在DSA中通過選擇一個160比特的素?cái)?shù)可將簽名的尺寸降低為320比特,這就大大地減少了存儲空間和傳輸帶寬。安全散列標(biāo)準(zhǔn)/算法(SHS/SHA)DSS簽名使用FIPS80-1和安全hash標(biāo)淮(SHS)產(chǎn)生和核實(shí)數(shù)字簽名。許多加密者認(rèn)為SHS所指定的安全散列算法(SHA)是當(dāng)今可以得到的最強(qiáng)勁的散列算法。DSS的安全性表現(xiàn)在如下的幾個方面:1)對報(bào)文的簽名不會引起私有密鑰的泄漏2)若不知私有密鑰,沒有人能夠?qū)o定的報(bào)文產(chǎn)生簽名3)沒有人能夠產(chǎn)生匹配給定簽名的報(bào)文4)沒有人能夠修改報(bào)文并且使原有的簽名依然有效數(shù)字簽名方案先對消息M作一個摘要H(M)然后發(fā)送方用自己的私鑰對H(M)進(jìn)行加密,得到簽名EKRa(H(M))連同消息M一起,發(fā)送出去B收到復(fù)合的消息之后,把簽名提取出來B用A的公鑰對簽名解密得到H’B計(jì)算所收到消息的摘要H(M’)如果H’=H(M’),則消息確實(shí)是A產(chǎn)生的問題公鑰的管理,公鑰與身份的對應(yīng)關(guān)系簽名的有效性,私鑰丟失?兩種數(shù)字簽名方案全局公鑰組KUG 簽名隨機(jī)數(shù)k 發(fā)送方私鑰KRaRSA的缺點(diǎn)A)產(chǎn)生密鑰很麻煩,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n至少也要600bits以上,使運(yùn)算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數(shù)量級;且隨著大數(shù)分解技術(shù)的發(fā)展,這個長度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。目前,SET(SecureElectronicTransaction)協(xié)議中要求CA采用2048比特長的密鑰,其他實(shí)體使用1024比特的密鑰。

DSS/DSA算法DigitalSignatureAlgorithm(DSA)是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSS(DigitalSignatureStandard)。

算法中應(yīng)用了下述參數(shù):

p:Lbits長的素?cái)?shù)。L是64的倍數(shù),范圍是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函數(shù)。DSS中選用SHA(SecureHashAlgorithm)。

p,q,g可由一組用戶共享,但在實(shí)際應(yīng)用中,使用公共模數(shù)可能會帶來一定的威脅。簽名及驗(yàn)證協(xié)議如下:1.P產(chǎn)生隨機(jī)數(shù)k,k<q;

2.P計(jì)算r=(g^kmodp)modq

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

簽名結(jié)果是(m,r,s)。

3.驗(yàn)證時計(jì)算w=s^(-1)modq

u1=(H(m)*w)modq

u2=(r*w)modq

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

若v=r,則認(rèn)為簽名有效。

工具DSAToolv13DSA是基于整數(shù)有限域離散對數(shù)難題的,其安全性與RSA相比差不多。DSA的一個重要特點(diǎn)是兩個素?cái)?shù)公開,這樣,當(dāng)使用別人的p和q時,即使不知道私鑰,你也能確認(rèn)它們是否是隨機(jī)產(chǎn)生的,還是作了手腳。RSA算法卻作不到。

加密算法的實(shí)現(xiàn)一些關(guān)鍵問題算法的精確性,需要經(jīng)過嚴(yán)格測試找到權(quán)威的測試數(shù)據(jù)注意字節(jié)的順序(big-endian和little-endian)算法的效率局部運(yùn)算的優(yōu)化可以大大改進(jìn)效率大數(shù)的運(yùn)算一些技巧的使用,比如查表法利用C/C++語言的優(yōu)化技術(shù)局部地方采用匯編代碼提高速度庫本身的安全性專利問題Crypto++Open-source的加密算法庫最新版本為4.2多個編譯器兼容實(shí)現(xiàn)了幾乎所有常用的算法并且給出了各個算法的參考和引用代碼質(zhì)量很高算法實(shí)現(xiàn)的效率代碼本身、封裝已經(jīng)增加了文檔維護(hù),更新例子:加密字符串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;}產(chǎn)生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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論