RSA算法原理

RSA算法原理

RSA加密算法是一種非對稱加密算法。對稱加密算法中加密和解密都得用同一個祕鑰,必須保證祕鑰不泄露才能保證數據的安全,加解密兩方之間密鑰的傳遞是存在安全隱患的。非對稱加密算法中加密和解密使用不同的祕鑰(公鑰和私鑰)。比如:甲方可以使用乙方給的公鑰進行加密,乙方收到密文後使用自己的私鑰進行解密。

RSA算法是一種基於大數分解的非對稱加密算法,由已知加密密鑰推導出解密密鑰在計算上是不可行的。

相關數論知識

使用一個祕鑰進行加密,使用另外一個祕鑰可以解密成功,這對祕鑰在數學上肯定存在某種聯繫。爲了便於理解RSA算法,應該先了解一些相關的數論知識。

互質關係

如果兩個正整數,除了1以外,沒有其他公因子,我們就稱這兩個數是互質關係。關於互質關係,有以下結論:

  • 任意兩個質數構成互質關係,比如13和61。
  • 一個數是質數,另一個數只要不是前者的倍數,兩者就構成互質關係,比如3和10。
  • 如果兩個數之中,較大的那個數是質數,則兩者構成互質關係,比如97和57。
  • 1和任意一個自然數是都是互質關係,比如1和99。
  • p是大於1的整數,則p和p-1構成互質關係,比如57和56。
  • p是大於1的奇數,則p和p-2構成互質關係,比如17和15。

歐拉函數

在數論中,歐拉函數φ(n)表示小於n的正整數中與n互質的數的數目。例如φ(8)=4,因爲1,3,5,7均和8互質。

歐拉函數的值可以使用下列等式進行計算:

φ(n)=n(11p1)(11p2)(11p2)...(11pr)

p1p2...prn

當n爲質數時,n只有一個質因子n,則φ(n)=n(11n)=n1

歐拉定理

歐拉定理:如果兩個正整數a和n互質,則n的歐拉函數φ(n)可以讓下面的等式成立。

aφ(n)1(mod n)

上式表示a的φ(n)次方除以n餘數爲1,或者說aφ(n)mod n=1 。這裏我們就不證明歐拉定理了,有興趣的可以自己搜索相關資料。

費馬小定理

費馬小定理是歐拉定理的一個特殊情形,即 假設正整數a與質數p互質,因爲質數p的φ(p)等於p-1,則歐拉定理可以寫成:

ap11(mod p)

這個就是費馬小定理。

模反元素

如果兩個正整數a和n互質,那麼一定可以找到整數b,使得ab-1被n整除,或者說ab被n除的餘數是1。

ab1(mod n)

這裏把b叫做a的模反元素。比如3和11互質,因爲3x4-1可以被11整除,所以4是3的一個模反元素。模反元素不止一個。

歐拉定理可以來證明模反元素一定存在。

aφ(n)=aaφ(n)11(mod n)

上式可見,aφ(n)1 就是a的模反元素。

RSA祕鑰生成步驟

加密和解密過程可以通過下列式子來表示:

Cipher=PlainEmodNPlain=CipherDmodN

式中Plain爲明文數據,Cipher爲密文數據,那麼公鑰和私鑰則爲:

PublicKey=(E,N)PrivateKey=(D,N)

下來來計算祕鑰中的E/D/N。

  1. 選擇兩個不相等的質數p&q,計算兩者的乘積作爲N=pq 。(實際使用中這兩個質數越大越難破解,而且可以使用多個質數,但是通常使用兩個)。
  2. 計算N的歐拉函數值φ(N)=(p1)(q1)
  3. 選擇一個整數e,條件是1<e<φ(n) ,且e與φ(n) 互質。
  4. 求得e關於φ(n) 的模反元素d,ed1(modφ(N))
  5. 把N和e封裝爲公鑰,把N和d封裝成私鑰。

RSA算法證明

實際數據驗證

假設要使用公鑰鑰(N, e)對明文數據m進行加密,m必須是整數(計算機中字符串可以取ASCII值作爲數字進行加解密),且m必須小於N。這裏我們選擇數字65作爲明文,m=65

1. 選擇兩個不相等的質數p和q,這裏我們使用61和53兩個數字作爲p和q。

p=61,q=53

2. 計算二者的乘積作爲N。

N=pq=6153=3233

3. 計算N的歐拉函數

φ(N)=(p1)(q1)=6052=3120

4. 隨機選一個整數e,滿足條件1<e<φ(n) 且與φ(n) 互質

這裏我們選擇17作爲e,e=17

5. 計算e對於φ(n) 的模反元素,即使得ed被φ(n) 整除的餘數爲1

ed1(modφ(N))11d=1(mod3120)
這裏不詳細介紹模反元素的算法了,模反元素可能有多個,當d=2753時,公式成立,即172753=46801=312015+1 。所以d=2753

6. 加密

使用公鑰(e,N)=(17,3233) 對數字65進行加密,Plain=65。
6517mod 3233=2790 ,即加密後的數字,即Cipher=2790。

7. 解密

使用私鑰(d,N)=(2753,3233)
27902753mod 3233=65 。即解出明文爲65,解密成功。

公式推導證明

我們來證明爲什麼用私鑰解密,一定可以正確地得到明文m。也就是證明下面這個式子:

PlainCipherd(mod n)

因爲,根據加密規則

CipherPlaine(mod n)

於是,Cipher可以寫成下面的形式:

Cipher=Plainekn

將Cipher代入要我們要證明的那個解密規則:

(Plainekn)dmod nPlain

它等同於求證

Plained (mod n)Plain

由於

ed1(mod φ(n))

所以

ed=hφ(n)+1

將 ed 代入:

Plainhφ(n)+1(mod n)Plain

接下來,分成兩種情況證明上面這個式子。

1. Plain與n互質。

根據歐拉定理,

Plainφ(n)1(mod n)

得到

(Plainφ(n))hPlainPlain(mod n)

  原式得到證明。

2. Plain與n不是互質關係。

由於n等於質數p和q的乘積,所以Plain必然等於 kp 或 kq。

以 Plain = kp 爲例,考慮到這時k與q必然互質,則根據歐拉定理,下面的式子成立:

(kp)q11(mod q)

進一步得到

[(kp)q1]h(q1)kpkp(mod q)

(kp)edkp(mod q)

將它改寫成下面的等式

(kp)ed=tq+kp

這時t必然能被p整除,即 t=t’p

(kp)ed=tpq+kp

因爲 Plain=kp,n=pq,所以

Plainedm(mod n)

原式得到證明。

參考

阮一峯 RSA算法原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章