實驗三-DSA數(shù)字簽名算法_第1頁
實驗三-DSA數(shù)字簽名算法_第2頁
實驗三-DSA數(shù)字簽名算法_第3頁
實驗三-DSA數(shù)字簽名算法_第4頁
實驗三-DSA數(shù)字簽名算法_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實驗三 DSA數(shù)字簽名算法姓 名: 學 號: 學 院: 信息工程學院 指導老師: 鄭明輝 1. DSA算法原理 數(shù)字簽名是數(shù)據(jù)在公開行信道中傳輸?shù)陌踩U?,能夠?qū)崿F(xiàn)數(shù)據(jù)的公開、公正、不可抵賴等特點的方法,只能公開的密鑰、密碼簽名算法。國際供認的公開密鑰簽字算法主要有RSA算法、ElGAMAL算法或者其變形的簽名算法。DSA(Digite Signature Arithmotic )是Schnore和ElGamal算法的變型。美國國家標準技術(shù)研究所(NIST)1994年5月19日公布了數(shù)字簽名標準的(DSS),標準采用的算法便是DSA,密鑰長度為5121024位。密鑰長

2、度愈長,簽名速度愈慢,制約運算速度的只要因素是大數(shù)的模指數(shù)運算。2. DSA簽名中的參數(shù)參數(shù)描述:Digital Signature Algorithm (DSA)是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSS(DigitalSignature Standard)。算法中應用了下述參數(shù): p:L bits長的素數(shù)。L是64的倍數(shù),范圍是512到1024; q:p - 1的160bits的素因子; g:g = h(p-1)/q) mod p,h滿足h < p - 1, h(p-1)/q) mod p > 1; x:x < q,x為私鑰 ; y:y =

3、gx mod p ,( p, q, g, y )為公鑰; H( x ):One-Way Hash函數(shù)。DSS中選用SHA( Secure Hash Algorithm )。 p, q, g可由一組用戶共享,但在實際應用中,使用公共模數(shù)可能會帶來一定的威脅。簽名及驗證協(xié)議如下: 1. P產(chǎn)生隨機數(shù)k,k < q; 2. P計算 r = ( gk mod p ) mod q s = ( k(-1) (H(m) + xr) mod q 簽名結(jié)果是( m, r, s )。 3. 驗證時計算 w = s(-1)mod q u1 = ( H( m ) * w ) mod q u2 = ( r * w

4、 ) mod q v = ( gu1 * yu2 ) mod p ) mod q 若v = r,則認為簽名有效。 DSA是基于整數(shù)有限域離散對數(shù)難題的,其安全性與RSA相比差不多。DSA的一個重要特點是兩個素數(shù)公開,這樣,當使用別人的p和q時,即使不知道私鑰,你也能確認它們是否是隨機產(chǎn)生的,還是作了手腳。RSA算法卻做不到。3. 源碼描述 #include "stdafx.h"#include <string.h>#include <stdio.h>#include "BigInt.h"#include "sha1.h&

5、quot;#include "time.h"int shas1(const unsigned int x, unsigned char digest20)SHA1_CTX context;unsigned char buffer16384; /,digest20;/FILE *file; SHA1Init(&context);SHA1Update(&context, buffer, 1); SHA1Final(digest, &context); return 0;CBigInt sha(CBigInt y)SHA1_CTX context; CBi

6、gInt X;unsigned char buffer16384,digest20; CString str;char *t="ABCDEF"if(y.m_nLength=1)&&(y.m_ulValue0=0)str="0"X.Mov(0);return X;str="" int a; char ch='0'str.Insert(0,ch); X.Mov(y); while(X.m_ulValueX.m_nLength-1>0) a=X.Mod(16); ch=ta; str.Insert(0,

7、ch); X.Mov(X.Div(16); int i=0;while (stri>0) i+;for (a=i,i=0;i<a;i+)bufferi=stri;for (i=a;i<64;i+) bufferi='0' SHA1Init(&context);SHA1Update(&context, buffer, 1); SHA1Final(digest, &context); int len=str.GetLength(),k; X.Mov(0); for(i=0;i<20;i+) X.Mov(X.Mul(256);/ if(

8、digesti>='0')&&(digesti<='9') k=digesti;/ else if(digesti>='A')&&(digesti<='F')k=digesti-55;/ else if(digesti>='a')&&(digesti<='f')k=digesti-87;/ else k=0; X.Mov(X.Add(k); return X;CBigInt makerandnumber( unsig

9、ned int len)srand(time(NULL); CBigInt X;X.m_nLength=(len+31)/32;/ X.Mov(0);for (unsigned int j=0;j<X.m_nLength;j+)X.m_ulValuej=rand()*0x10000+rand();X.m_ulValue0=X.m_ulValue0|0x1; X.m_ulValuej-1=X.m_ulValuej-1|0x; return X;CBigInt pow2( const int x, int y)CBigInt p,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; return p;CBigInt pow3(CBigInt x, CBigInt y, CBigInt m)CBigInt p,t;p.Mov(1);t.Mov(0);while (y.Cmp(t)>0)if (y.m_ulValue0&0x1=0) x.Mov(x.Mul(x); x.Mov(x.Mod(m); x.M

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論