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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

實驗三DSA數(shù)字簽名算法姓名:學號:學院:信息工程學院指導老師:鄭明輝DSA算法原理數(shù)字簽名是數(shù)據(jù)在公開行信道中傳輸?shù)钠桨脖U?,能夠實現(xiàn)數(shù)據(jù)的公開、公正、不可抵賴等特點的方法,只能公開的密鑰、密碼簽名算法。國際供認的公開密鑰簽字算法主要有RSA算法、ElGAMAL算法或者其變形的簽名算法。DSA(DigiteSignatureArithmotic)是Schnore和ElGamal算法的變型。美國國家標準技術研究所(NIST)1994年5月19日公布了數(shù)字簽名標準的(DSS),標準采用的算法便是DSA,密鑰長度為512~1024位。密鑰長度愈長,簽名速度愈慢,制約運算速度的只要因素是大數(shù)的模指數(shù)運算。DSA簽名中的參數(shù)參數(shù)描述:DigitalSignatureAlgorithm(DSA)是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSS(DigitalSignatureStandard)。算法中應用了下述參數(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可由一組用戶共享,但在實際應用中,使用公共模數(shù)可能會帶來一定的威脅。簽名及驗證協(xié)議如下:1.P產生隨機數(shù)k,k<q;2.P計算r=(g^kmodp)modqs=(k^(-1)(H(m)+xr))modq簽名結果是(m,r,s)。3.驗證時計算w=s^(-1)modqu1=(H(m)*w)modqu2=(r*w)modqv=((g^u1*y^u2)modp)modq假設v=r,那么認為簽名有效。DSA是基于整數(shù)有限域離散對數(shù)難題的,其平安性與RSA相比差不多。DSA的一個重要特點是兩個素數(shù)公開,這樣,當使用別人的p和q時,即使不知道私鑰,你也能確認它們是否是隨機產生的,還是作了手腳。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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論