實驗三-DSA數(shù)字簽名算法_第1頁
實驗三-DSA數(shù)字簽名算法_第2頁
實驗三-DSA數(shù)字簽名算法_第3頁
實驗三-DSA數(shù)字簽名算法_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

實驗三DSA數(shù)字簽名算法姓名:學(xué)號:學(xué)院:信息工程學(xué)院指導(dǎo)老師:鄭明輝DSA算法原理數(shù)字簽名是數(shù)據(jù)在公開行信道中傳輸?shù)钠桨脖U?,能夠?qū)崿F(xiàn)數(shù)據(jù)的公開、公正、不可抵賴等特點的方法,只能公開的密鑰、密碼簽名算法。國際供認(rèn)的公開密鑰簽字算法主要有RSA算法、ElGAMAL算法或者其變形的簽名算法。DSA(DigiteSignatureArithmotic)是Schnore和ElGamal算法的變型。美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)1994年5月19日公布了數(shù)字簽名標(biāo)準(zhǔn)的(DSS),標(biāo)準(zhǔn)采用的算法便是DSA,密鑰長度為512~1024位。密鑰長度愈長,簽名速度愈慢,制約運算速度的只要因素是大數(shù)的模指數(shù)運算。DSA簽名中的參數(shù)參數(shù)描述:DigitalSignatureAlgorithm(DSA)是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSS(DigitalSignatureStandard)。算法中應(yīng)用了下述參數(shù):p:Lbits長的素數(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可由一組用戶共享,但在實際應(yīng)用中,使用公共模數(shù)可能會帶來一定的威脅。簽名及驗證協(xié)議如下:1.P產(chǎn)生隨機數(shù)k,k<q;2.P計算r=(g^kmodp)modqs=(k^(-1)(H(m)+xr))modq簽名結(jié)果是(m,r,s)。3.驗證時計算w=s^(-1)modqu1=(H(m)*w)modqu2=(r*w)modqv=((g^u1*y^u2)modp)modq假設(shè)v=r,那么認(rèn)為簽名有效。DSA是基于整數(shù)有限域離散對數(shù)難題的,其平安性與RSA相比差不多。DSA的一個重要特點是兩個素數(shù)公開,這樣,當(dāng)使用別人的p和q時,即使不知道私鑰,你也能確認(rèn)它們是否是隨機產(chǎn)生的,還是作了手腳。RSA算法卻做不到。源碼描述#include"stdafx.h"#include<string.h> #include<stdio.h>#include"BigInt.h"#include"sha1.h"#include"time.h"intshas1(constunsignedintx[],unsignedchardigest[20]){ SHA1_CTXcontext; unsignedcharbuffer[16384];//,digest[20];// FILE*file;SHA1Init(&context); SHA1Update(&context,buffer,1);SHA1Final(digest,&context);return0;}CBigIntsha(CBigInty){ SHA1_CTXcontext;CBigIntX; unsignedcharbuffer[16384],digest[20];CStringstr; char*t="0123456789ABCDEF"; if((y.m_nLength==1)&&(y.m_ulValue[0]==0)) { str="0"; X.Mov(0); returnX; } str="";inta;charch='\0'; str.Insert(0,ch);X.Mov(y);while(X.m_ulValue[X.m_nLength-1]>0){a=X.Mod(16);ch=t[a];str.Insert(0,ch);X.Mov(X.Div(16));} inti=0; while(str[i]>0) i++; for(a=i,i=0;i<a;i++) buffer[i]=str[i]; for(i=a;i<64;i++)buffer[i]='\0';SHA1Init(&context); SHA1Update(&context,buffer,1);SHA1Final(digest,&context);intlen=str.GetLength(),k;X.Mov(0);for(i=0;i<20;i++){X.Mov(X.Mul(256));//if((digest[i]>='0')&&(digest[i]<='9')) k=digest[i];//elseif((digest[i]>='A')&&(digest[i]<='F'))k=digest[i]-55;//elseif((digest[i]>='a')&&(digest[i]<='f'))k=digest[i]-87;//elsek=0;X.Mov(X.Add(k));} returnX;}CBigIntmakerandnumber(unsignedintlen){ srand(time(NULL));CBigIntX; X.m_nLength=(len+31)/32;//X.Mov(0); for(unsignedintj=0;j<X.m_nLength;j++) { X.m_ulValue[j]=rand()*0x10000+rand(); } X.m_ulValue[0]=X.m_ulValue[0]|0x1; X.m_ulValue[j-1]=X.m_ulValue[j-1]|0x80000000; returnX;}CBigIntpow2(constintx,inty){ CBigIntp,q,t; p.Mov(1); q.Mov(x); while(y>0) { if(y%2==0){q.Mov(q.Mul(q));y/=2;} else{p.Mov(p.Mul(q));y-=1;} } returnp;}CBigIntpow3(CBigIntx,CBigInty,CBigIntm){ CBigIntp,t; p.Mov(1); t.Mov(0); while(y.Cmp(t)>0) { if(y.m_ulValue[0]&0x1==0) {x.Mov(x.Mul(x));x.Mov(x.Mod(m));

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論