RSA公鑰回密演算法原理

科技小能手發表於2017-11-12

一、公鑰密碼學概述。

  公開金鑰密碼演算法的提出是整個密碼學歷史上最大的而且也許是最唯一真正的變革。從最初一直到現代,幾乎所有密碼系統都建立在基本的替代和置換工具的基礎 上。在用了數千年的本質上可以手算完成的演算法之後,常規的密碼學隨著轉輪加密/解密機的發展才出現了一個重大進步。機電式變碼旋轉軟體使得極其複雜的密碼 系統被研製出來。有了計算機後,更加複雜的系統被設計出來。但是不管是轉輪機還是後來的DES(資料加密標準),雖然代表了重要的進展,卻仍然依賴於替代 和置換這樣的基本工具。

  公鑰密碼學則與以前的所有方法都截然不同。一方面公開金鑰演算法基於數學函式而不是替代和置換,更重要的是,公開金鑰密碼學是非對稱的,它用到兩個不同的金鑰,而對稱的常規加密則只使用一個金鑰。使用兩個金鑰對於保密通訊,金鑰分配和鑑別等領域都有著深遠的影響。 

對於公鑰密碼加密有幾個誤解。

誤解一、公開金鑰加密在防範密碼分析上比常規加密更加安全。

[解釋] 事實上,任何加密方案的安全性都依賴於金鑰的長度和破譯密碼所包含的計算工作量。從抗擊密碼分析的角度講,無論常規還是公開金鑰加密原則上都沒有比對方優越的地方。

誤解二、公開金鑰加密是一個使得常規加密已經過時的通用技術。

[解釋] 事實上,由於當前公開金鑰加密在計算上的巨大開銷,在可以預見的未來常規加密並不會被拋棄。目前大家幾乎普遍接受的觀點是公開金鑰密碼演算法只限於金鑰管理和數字簽名等應用。

誤解三、與使用常規加密時涉及金鑰分配中心的相當繁瑣的握手過程相比,使用公開金鑰加密後金鑰分配就變的非常簡單。

[解釋] 事實上,使用公開金鑰加密仍然需要某種形式的協議,一般這會涉及到一箇中心代理,而且整個過程比常規加密中的過程既不簡單也不更有效。

        

 

二、什麼是公鑰密碼演算法

  目前存在兩種金鑰體制:對稱金鑰體制和非對稱金鑰體制。對稱金鑰體制就是加密和解密用同一個金鑰。這很好理解,相當於你用你家的鑰匙既可以鎖上你家的門, 也可以開啟你家的門。非對稱金鑰體制就是加密和解密不是同一個金鑰。也就是說一個金鑰所加密的資料用另一個金鑰解密。舉個生活中的例子,類似於在機場、火 車站、超市以及很多其他公共場所看到的非對稱的存物箱。為了安全儲存你的財物,你把它們放入存物箱並且投入錢幣鎖上它。就如同你的住宅鑰匙鎖上大門一樣, 錢幣鎖上了存物箱—在某種意義上,你的錢幣就是金鑰。鎖上門後,你得到另外一把鑰匙—也許是一把真正的鑰匙;也許只是一張寫有號碼的紙條。要開啟 存物箱,你就要使用該鑰匙或在鍵盤上輸入號碼。而這個時候,你投入多少錢幣也是打不開存物箱的。

  類似地,我們可以產生一個密碼演算法,其中一個金鑰用來加密資料,另一個用來解密。這個模型的另一說法就是公鑰密碼學。要加密和解密資料,兩個金鑰都需要使 用,所以其中一個可以公開而不會危害安全性。這個金鑰就是公鑰。另一個則稱之為私鑰。我們用公鑰加密資料,用私鑰解密資料。就好象例子中的任何人都知道用 錢幣(公鑰)鎖上存物箱,但仍然打不開存物箱。只有擁有鑰匙或寫有號碼的紙條(私鑰)的人才能開啟存物箱。

  1976年後,提出了多種公開金鑰演算法,其中許多是不安全的。而那些被視為安全的演算法,有許多卻不實用,要麼金鑰太大,要麼密文遠大於明文。只有少數幾個 演算法既安全又實用。其中有三種演算法可以很好的用於加密和數字簽名:RSA、ElGamal和Rabin。不過它們都很慢。它們加密和解密速度比對稱演算法要 慢的多,通常是太慢以致無法用於許多快速資料加密。基於這點考慮,很多時候使用混合密碼系統。使用帶隨機會話金鑰的對稱演算法來加密訊息,使用公開金鑰演算法 來加密隨機會話金鑰。

 

三、RSA公鑰密碼演算法原理

  RSA演算法是第一個比較完善的公開金鑰演算法。它既能用於加密也能用於數字簽名。在已提出的公開金鑰演算法中,RSA是最容易理解和實現的。RSA以它的三個 發明者Ron Rivest、Adi Shamir和Leonard Adleman的名字命名。該演算法已經經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否認RSA的安全性,但這恰恰說明了該演算法有一定的可 信度。

  RSA的安全基於大數分解的難度。其公開金鑰和私人金鑰是一對大素數(100到200個十進位制數或更大)的函式。從一個公開金鑰和密文中恢復出明文的難度等價於分解兩個大素數之積。

  要了解RSA演算法需要從瞭解一些數論的基本原理開始。

 

1.剩餘系

[定義1] 設m>0, Cr = {a | a=r+qm, q∈Z}(r=0,1,…,m-1), 則C0 ,C1 ,…,Cm-1 稱為模數m的剩餘系。在C0 ,C1 ,…,Cm-1 中各取一數aj∈Cj ,j=0,1,…,m-1,此m個數a0 ,a1 ,…,am-1 稱為模數m的一組完全剩餘系。特別地,完全剩餘系0,1,…,m-1稱為模數m的非負最小完全剩餘系。如果Cj 裡面的數與m互素,稱Cj 為與模數m互素的剩餘類。在與m互素的全部剩餘類中,各取一數所組成的集合就稱為模數m的一組既約剩餘系。

 

2.尤拉函式和尤拉定理

[定義2] 尤拉函式Φ(n)是一個定義在正整數集合上的函式,Φ(n)的值等於序列0,1,…,n-1中與n互素的數的個數。

由定義得Φ(1)=1,Φ(2)=1,Φ(3)=2,…。當p是素數時,Φ(p)=p-1。

 

性質:

  • 模數m的一組既約剩餘系含Φ(m)個數。

  • Φ(m)個數作成模數m的一組既約剩餘系的充分必要條件是兩兩對模數m不同餘且都與m互素。

  • gcd(m1 ,m2 )=1時,Φ(m1 ,m2 )=Φ(m1 )Φ(m2 )。

  • p為素數,k為正整數時,Φ(pk )=pk -pk-1 =pk-1 (p-1)。

(尤拉定理) 若gcd(a,m)=1, 則aΦ(m)≡1(mod m)。

當m=p為素數時,即得到費馬小定理。

 

(費馬小定理) 若p為素數,則ap≡a(mod p)。

 

 

 

3.RSA演算法

 

RSA公鑰密碼體制描述如下:

<1>. 選取兩個大素數p,q。

<2>. 計算n=pq, Φ(n)=(p-1)(q-1)。

<3>. 隨機選取正整數e, 1Φ(n), 滿足gcd(e,Φ(n)) = 1。

<4>. 計算d,滿足de≡1(mod Φ(n))。p,q,Φ(n), d是保密的,丟棄p,q,Φ(n);只保留d,則n,d 為私鑰;n,e是公開,為公鑰。

<5>.  加密變換:對明文m, 1e (mod n)。

<6>.  解密變換:對密文c, 1d (mod n)。

 

證明:

由於de≡1(mod Φ(n)),所以存在正整數t,使得de = 1 + tΦ(n))。 對於任意明文m, 1

  • 當gcd(m,n)=1時,根據尤拉定理有cd≡(me )d≡(mΦ(n) )t m≡1t m≡m(mod n);

  • 當gcd(m,n)≠1時,因為n=pq且p,q是兩個素數,所以gcd(m,n)=p或q。不妨設gcd(m,n)=p,則m=bp, 1≤bq-1≡1(mod q),從而mtΦ(n) =(mq-1 )t(p-1)≡1(mod q),於是存在一個整數s, 使得mtΦ(n) =1 + sq, 此式兩端用m=bp同乘,就得到mtΦ(n)+1 =m+bsn, 從而cd≡mtΦ(n)+1≡m(mod n)。

證畢。

 

舉例:如果p=47,q=71,那麼n=pq=3337,Φ(n)=(p-1)(q-1)=3220 。加密金鑰e滿足gcd(e,Φ(n))=1,則隨機選取e,如79,那麼  d=e-1 (mod Φ(n))=79-1 (mod 3220)=1019。這時獲得:

公鑰:e,n 即79,3337



本文轉自 拾瓦興閣 51CTO部落格,原文連結:http://blog.51cto.com/ponyjia/1911406


相關文章