RSA算法公鑰加密算法new_第1頁
RSA算法公鑰加密算法new_第2頁
RSA算法公鑰加密算法new_第3頁
RSA算法公鑰加密算法new_第4頁
RSA算法公鑰加密算法new_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上RSA1978年,MIT的Rivest、Shamir、Adleman提出RSA算法非對稱加密(公開密鑰加密)密碼學的一次革命,定義: KA KB , KA、E和D公開特點: 基于數論原理(大數分解難題) 是目前應用最廣泛的公鑰加密算法 屬于塊加密算法 在數論,對正整數n,歐拉函數是少于或等于n的數中與n互質的數的數目。此函數以其首名研究者歐拉命名,它又稱為Euler's totient function、函數、歐拉商數等。RSA算法原理l 定義:RSA加密算法確定密鑰:1. 找到兩個大質數,p,q2. Let n=pq3. let m=(p-1)(q-1);C

2、hoose e and d such that de=1(%m).4. Publish n and e as public key. Keep d and n as secret key.加密:C=Me(%n)解密:M=(Cd)%n其中 C=Me(%n) 為 C%n=(Me)%n存在的主要問題是大數計算和大數存儲的問題。什么是RSARSA算法是第一個能同時用于加密和數字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優(yōu)秀的公鑰方案之一。RSA的安全性依賴于大數的因子分解,但并沒有從理論上證明破譯RSA

3、的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學界多數人士傾向于因子分解不是NPC問題。RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨著大數分解技術的發(fā)展,這個長度還在增加,不利于數據格式的標準化。目前,SET(Secure Electronic Transaction)協(xié)議中要求CA采用2048比特長的密鑰,其他實體使用1024比特的密鑰。這種算法1978年就出現了,它是第一個既能

4、用于數據加密也能用于數字簽名的算法。它易于理解和操作,也很流行。算法的名字以發(fā)明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。 RSA的算法涉及三個參數,n、e1、e2。 其中,n是兩個大質數p、q的積,n的二進制表示時所占用的位數,就是所謂的密鑰長度。 e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod(p-1)*(q-1)=1。 (n及e1),(n及e2)就是密鑰對。

5、 RSA加解密的算法完全相同,設A為明文,B為密文,則:A=Be1 mod n;B=Ae2 mod n; e1和e2可以互換使用,即: A=Be2 mod n;B=Ae1 mod n; 一、RSA 的安全性RSA的安全性依賴于大數分解,但是否等同于大數分解一直未能得到理論上的證明,因為沒有證明破解 RSA就一定需要作大數分解。假設存在一種無須分解大數的算法,那它肯定可以修改成為大數分解算法。目前, RSA 的一些變種算法已被證明等價于大數分解。不管怎樣,分解n是最顯然的攻擊方法?,F在,人們已能分解多個十進制位的大素數。因此,模數n 必須選大一些,因具體適用情況而定。二、RSA的速度由于進行的都

6、是大數計算,使得RSA最快的情況也比DES慢上倍,無論是軟件還是硬件實現。速度一直是RSA的缺陷。一般來說只用于少量數據加密。三、RSA的選擇密文攻擊RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝( Blind),讓擁有私鑰的實體簽署。然后,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構: ( XM )d = Xd *Md mod n 前面已經提到,這個固有的問題來自于公鑰密碼系統(tǒng)的最有用的特征-每個人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協(xié)議,保證工作過程中實體不對其他實體

7、任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way HashFunction 對文檔作HASH處理,或四、RSA的公共模數攻擊若系統(tǒng)中共有一個模數,只是不同的人擁有不同的e和d,系統(tǒng)將是危險的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質,那末該信息無需私鑰就可得到恢復。設P為信息明文,兩個加密密鑰為e1和e2,公共模數是n,則:C1 = Pe1 mod nC2 = Pe2 mod n密碼分析者知道n、e1、e2、C1和C2,就能得到P。因為e1和e2互質,故用Euclidean算法能找到r和s,滿足:r * e

8、1 + s * e2 = 1假設r為負數,需再用Euclidean算法計算C1(-1),則( C1(-1) )(-r) * C2s = P mod n 另外,還有其它幾種利用公共模數攻擊的方法。總之,如果知道給定模數的一對e和d,一是有利于攻擊者分解模數,一是有利于攻擊者計算出其它成對的e和d,而無需分解模數。解決辦法只有一個,那就是不要共享模數n。 RSA的小指數攻擊。 有一種提高 RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易于實現,速度有所提高。但這樣作是不安全的,對付辦法就是e和d都取較大的值。 RSA算法是第一個能同時用于加密和數字簽名的算法,也易于理解和操作。RSA是被研

9、究得最廣泛的公鑰算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優(yōu)秀的公鑰方案之一。RSA的安全性依賴于大數的因子分解,但并沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學界多數人士傾向于因子分解不是NPC問題。 RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨著大數分解技術的發(fā)展,這個長度還在增加,不利于數據格式的標準化

10、。目前,SET( Secure Electronic Transaction )協(xié)議中要求CA采用比特長的密鑰,其他實體使用比特的密鑰。在許多應用領域, 公鑰密碼技術在保障安全方面起了關鍵的作用在某些場合由于不便頻繁更換私人密鑰如權威機構的證書密鑰、金融機構的簽名密鑰等, 確保密鑰的安全就至關重要防止密鑰泄露的一項決定性措施是采用門限密碼技術, , 它將一部分密碼的功能分散給多人, 而只有一定數量的成員合作方可完成密碼運算另外, 在一些特殊場合也須謹防密鑰的持有者權力過于集中而濫用職權, 這也要求對密鑰進行分散管理, 以克服權力過于集中的弊端實現密鑰分散管理的門限密碼, 需要解決秘密的分享、密

11、碼算法以及結合這兩者而設計出新的加密方式密碼算法的研究一直是密碼理論的主體, 目前已有許多算法可供選擇使甩對秘密分享也早有雌, 它是指將系統(tǒng)的秘密s, 分解為N個部分秘密s1,s2,s3,sn, 系統(tǒng)的N個成員P1,P2,.Pn分別擁有各自的部分秘密, 使得任何少于T個成員都無法從他們的部分秘密得到任何關于系統(tǒng)秘密s信息;借助有效的算法, 任意T成員可從相應的部分秘密得到系統(tǒng)的秘密s.這就是所謂的, (T,N)一門限秘密分享系統(tǒng)在實際應用中,秘密分享系統(tǒng)存在著不可回避的問題, 即由誰來完成從部分秘密恢復系統(tǒng)秘密的工作因為不論是誰, 他一旦得到了個部分秘密, 就可導出系統(tǒng)的秘密而獨享, 除非秘密

12、的恢復是由一個可信的“ 黑盒子”完成, 為了避免系統(tǒng)秘密的泄露, 文獻2提出利用部分密鑰將加密的部分結果發(fā)給指定的人或機器, 再由部分結果產生最終的結果, 而又不暴露系統(tǒng)的秘密目前, 門限密碼已成為密碼學中非?;钴S的領域.RSA算法(轉)2008-06-05 10:39<一>基礎RSA算法非常簡單,概述如下:找兩素數p和q取n=p*q取t=(p-1)*(q-1)取任何一個數e,要求滿足e<t并且e與t互素(就是最大公因數為1)取d*e%t=1這樣最終得到三個數: n   d   e設消息為數M (M <n)設c=(M*d)%n就得

13、到了加密后的消息c 設m=(c*e)%n則 m = M,從而完成對c的解密。注:*表示次方,上面兩式中的d和e可以互換。在對稱加密中:n d兩個數構成公鑰,可以告訴別人;n e兩個數構成私鑰,e自己保留,不讓任何人知道。給別人發(fā)送的信息使用e加密,只要別人能用d解開就證明信息是由你發(fā)送的,構成了簽名機制。別人給你發(fā)送信息時使用d加密,這樣只有擁有e的你能夠對其解密。rsa的安全性在于對于一個大數n,沒有有效的方法能夠將其分解從而在已知n d的情況下無法獲得e;同樣在已知n e的情況下無法求得d。<二>實踐接下來我們來一個實踐,看看實際的操作:找兩個素數:p=47q=59這樣n=p*

14、q=2773t=(p-1)*(q-1)=2668取e=63,滿足e<t并且e和t互素用perl簡單窮舉可以獲得滿主 e*d%t =1的數d:C:Temp>perl -e "foreach $i (1.9999) print($i),last if $i*63%2668=1 "847即d847最終我們獲得關鍵的n=2773d=847e=63取消息M=244我們看看加密:c=M*d%n = 244*847%2773用perl的大數計算來算一下:C:Temp>perl -Mbigint -e "print 244*847%2773"465即用

15、d對M加密后獲得加密信息c465解密:我們可以用e來對加密后的c進行解密,還原M:m=c*e%n=465*63%2773 :C:Temp>perl -Mbigint -e "print 465*63%2773"244即用e對c解密后獲得m=244 , 該值和原始信息M相等。<三>字符串加密把上面的過程集成一下我們就能實現一個對字符串加密解密的示例了。每次取字符串中的一個字符的ascii值作為M進行計算,其輸出為加密后16進制的數的字符串形式,按3字節(jié)表示,如01F代碼如下:#!/usr/bin/perl -w#RSA 計算過程學習程序編寫的測試程序#wat

16、ercloud 2003-8-12#use strict;use Math:BigInt;my %RSA_CORE = (n=>2773,e=>63,d=>847); #p=47,q=59my $N=new Math:BigInt($RSA_COREn);my $E=new Math:BigInt($RSA_COREe);my $D=new Math:BigInt($RSA_COREd);print "N=$N   D=$D   E=$En"sub RSA_ENCRYPT    

17、0; my $r_mess = shift _;     my ($c,$i,$M,$C,$cmess);     for($i=0;$i < length($r_mess);$i+)              $c=ord(substr($r_mess,$i,1);         $M=Math:BigInt

18、->new($c);         $C=$M->copy(); $C->bmodpow($D,$N);         $c=sprintf "%03X",$C;         $cmess.=$c;          return $

19、cmess;sub RSA_DECRYPT      my $r_mess = shift _;     my ($c,$i,$M,$C,$dmess);     for($i=0;$i < length($r_mess);$i+=3)              $c=substr($r_mess,$i,3);   

20、60;     $c=hex($c);         $M=Math:BigInt->new($c);         $C=$M->copy(); $C->bmodpow($E,$N);         $c=chr($C);      

21、   $dmess.=$c;          return $dmess;my $mess="RSA 娃哈哈哈"$mess=$ARGV0 if ARGV >= 1;print "原始串:",$mess,"n"my $r_cmess = RSA_ENCRYPT($mess);print "加密串:",$r_cmess,"n"my $r_dmess = RSA_DECRYPT($r_cmess

22、);print "解密串:",$r_dmess,"n"#EOF測試一下:C:Temp>perl rsa-test.plN=2773   D=847   E=63原始串:RSA 娃哈哈哈加密串:5CB6CD6BC58AAA74A0AA74A0AA74A6C70A46C70A46C70A4解密串:RSA 娃哈哈哈C:Temp>perl rsa-test.pl 安全焦點(xfocus)N=2773   D=847   E=63原始串:安全焦點(xfocus)加密串:33

23、93EC12F0A466E0AA9510D025D7BA0712DC3379F47D51C325D67B解密串:安全焦點(xfocus)<四>提高前面已經提到,rsa的安全來源于n足夠大,我們測試中使用的n是非常小的,根本不能保障安全性,我們可以通過RSAKit、RSATool之類的工具獲得足夠大的N 及D E。通過工具,我們獲得1024位的N及D E來測試一下:n=0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A85F5005DBDCDED9BDFCB3C4C265AF164AD5

24、5884D8278F791C7A6BFDAD55EDBC4F017F9CCF1538D4CB383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DDD2ED173CCA50ED7E2BCd=0x10001e=0xE760A3804ACDE1E8E3D7DC0197F9CEF6282EF552E8CEBBB7434B01CB19A9D87A3106DD28C523C29954C5D86B36EE4919CA8CE08718C3BA98F635EB9EA9200B25906D91B80A47B77324E66AFF2C4D70D8B1C69

25、C50A9D8B4B7A3C9EE05FFF3A16AFCDDA1DCABE9861A4789BD782A592D2B1965設原始信息M=0x33完成這么大數字的計算依賴于大數運算庫,用perl來運算非常簡單:A) 用d對M進行加密如下:c=M*d%n :C:Temp>perl -Mbigint -e " $x=Math:BigInt->bmodpow(0x2233, 0x10001, 0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A85F5005DBDCDED9BDFC

26、B3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F017F9CCF1538D4CB383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD6D2ED173CCA50ED7E2BC);print $x->as_hex"0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8ab304de288a8d4434b73d2576bd45692b007f3a2f7c5f5aa1d99ef3866af26a8eed1d4cc4b293e26bc0a1dc

27、67ecaa6b3028f9461a3b1533ec0cbf10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91fc3f6d90898即用d對M加密后信息為:c=0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8ab304de288a8d4434b73d2576bd45692b007f3a2f7c5f5aa1d99ef3866af26a8eed1d4cc4b293e26bc0a1dc67ecaa6b3028f9461a3b1533ec0cbf10d8ad47452a12db0601c5e8beda686d

28、d96d2acd59ea89b91fc3f6d90898B) 用e對c進行解密如下:m=c*e%n :C:Temp>perl -Mbigint -e " $x=Math:BigInt->bmodpow(0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8ab304de288a8d4434b73d2576bd45692b007f3a2f7c5f5aa1d99ef3866af26a8eed1d4cc4b293e26bc0a1dc67ecaa6b3028f9461a3b1533ec0cb65f10d8ad47452a12db0601c5

29、e8beda686dd96d2acd59ea89b91fc3f6d90898,   0xE760A3804ACDE1E8E3D7DC0197F9CEF6282EF552E8CEBBB7434B01CB19A9D87A3106DD28C523C29954C5D86B36EE4919CA8CE08718C3BA98F635EB9EA9200B25906D91B80A47B77324E66AFF2C4D70D8B1C69C50A9D8B4B7A3C9EE05FFF3A16AFCDDA1DCABE9861A4789BD782A592D2B1965,   0x32

30、8C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A85F5005DBDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F017F9CCF1538D4CB383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DDD2ED173CCA50ED7E2BC);print $x->as_hex"0x33(我的P4 1.6G的機器上計算了約5秒鐘)得到用e解密后的m=0x33 

31、  = MC) RSA通常的實現RSA簡潔幽雅,但計算速度比較慢,通常加密中并不是直接使用RSA 來對所有的信息進行加密,最常見的情況是隨機產生一個對稱加密的密鑰,然后使用對稱加密算法對信息加密,之后用RSA對剛才的加密密鑰進行加密。最后需要說明的是,當前小于1024位的N已經被證明是不安全的自己使用中不要使用小于1024位的RSA,最好使用2048位的RSA算法的數學原理:    先來找出三個數,   p,   q,   r,     

32、0;   其中   p,   q   是兩個相異的質數,   r   是與   (p-1)(q-1)   互質的數。         p,   q,   r   這三個數便是   private   key。接著,   找出m, 

33、  使得   rm   =   1   mod   (p-1)(q-1).   這個   m   一定存在,   因為   r   與   (p-1)(q-1)   互質,   用輾轉相除法就可以得到了.   再來,   計算   n &#

34、160; =   pq.   m,   n   這兩個數便是   public   key。         編碼過程是,   若資料為   a,   將其看成是一個大整數,   假設   a   <   n.   如果 &

35、#160; a   >=   n   的話,   就將   a   表成   s   進位   (s   <=   n,   通常取   s   =   2t),   則每一位數均小於   n,   然後分段編碼. &

36、#160; 接下來,   計算   b   =   am   mod   n,   (0   <=   b   <   n),   b   就是編碼後的資料.   解碼的過程是,   計算   c   =   br &

37、#160; mod   pq   (0   <=   c   <   pq),   於是乎,   解碼完畢.   等會會證明   c   和   a   其實是相等的   :)   如果第三者進行竊聽時,   他會得到幾個數:   m, 

38、  n(=pq),   b.   他如果要解碼的話,   必須想辦法得到   r.   所以,   他必須先對   n   作質因數分解.   要防止他分解,   最有效的方法是找兩個非常的大質數   p,   q,   使第三者作因數分解時發(fā)生困難.   <定理>   若&#

39、160;  p,   q   是相異質數,   rm   =   1   mod   (p-1)(q-1),   a   是任意一個正整數,   b   =   am   mod   pq,   c   =   br   mod&

40、#160;  pq,   則   c   =   a   mod   pq   證明的過程,   會用到費馬小定理,   敘述如下:   m   是任一質數,   n   是任一整數,   則   nm   =   n   mod

41、   m   (換另一句話說,   如果   n   和   m   互質,   則   n(m-1)   =   1   mod   m)   運用一些基本的群論的知識,   就可以很容易地證出費馬小定理的.   <證明>   因為 &

42、#160; rm   =   1   mod   (p-1)(q-1),   所以   rm   =   k(p-1)(q-1)   +   1,   其中   k   是整數   因為在   modulo   中是   preserve  

43、; 乘法的   (x   =   y   mod   z   and   u   =   v   mod   z   =>   xu   =   yv   mod   z),   所以,   c 

44、0; =   br   =   (am)r   =   a(rm)   =   a(k(p-1)(q-1)+1)   mod   pq   1.   如果   a   不是   p   的倍數,   也不是   q   的倍數時, 

45、;  則   a(p-1)   =   1   mod   p   (費馬小定理)   =>   a(k(p-1)(q-1)   =   1   mod   p   a(q-1)   =   1   mod   q   (費

46、馬小定理)   =>   a(k(p-1)(q-1)   =   1   mod   q   所以   p,   q   均能整除   a(k(p-1)(q-1)   -   1   =>   pq   |   a(k(p-1)(q-1) 

47、;  -   1   即   a(k(p-1)(q-1)   =   1   mod   pq   =>   c   =   a(k(p-1)(q-1)+1)   =   a   mod   pq   2.   如果   a

48、   是   p   的倍數,   但不是   q   的倍數時,   則   a(q-1)   =   1   mod   q   (費馬小定理)   =>   a(k(p-1)(q-1)   =   1   mod   q   =>   c   =   a(k(p-1)(q-1)+1)   =   a   mod   q   =>   q   |   c   -   a   因   p   | 

溫馨提示

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

評論

0/150

提交評論