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只有一個質因子n,則 。
歐拉定理
歐拉定理:如果兩個正整數a和n互質,則n的歐拉函數φ(n)可以讓下面的等式成立。
上式表示a的φ(n)次方除以n餘數爲1,或者說 。這裏我們就不證明歐拉定理了,有興趣的可以自己搜索相關資料。
費馬小定理
費馬小定理是歐拉定理的一個特殊情形,即 假設正整數a與質數p互質,因爲質數p的φ(p)等於p-1,則歐拉定理可以寫成:
這個就是費馬小定理。
模反元素
如果兩個正整數a和n互質,那麼一定可以找到整數b,使得ab-1被n整除,或者說ab被n除的餘數是1。
這裏把b叫做a的模反元素。比如3和11互質,因爲3x4-1可以被11整除,所以4是3的一個模反元素。模反元素不止一個。
歐拉定理可以來證明模反元素一定存在。
上式可見, 就是a的模反元素。
RSA祕鑰生成步驟
加密和解密過程可以通過下列式子來表示:
式中Plain爲明文數據,Cipher爲密文數據,那麼公鑰和私鑰則爲:
下來來計算祕鑰中的E/D/N。
- 選擇兩個不相等的質數p&q,計算兩者的乘積作爲 。(實際使用中這兩個質數越大越難破解,而且可以使用多個質數,但是通常使用兩個)。
- 計算N的歐拉函數值 。
- 選擇一個整數e,條件是 ,且e與φ(n) 互質。
- 求得e關於 的模反元素d, 。
- 把N和e封裝爲公鑰,把N和d封裝成私鑰。
RSA算法證明
實際數據驗證
假設要使用公鑰鑰(N, e)對明文數據m進行加密,m必須是整數(計算機中字符串可以取ASCII值作爲數字進行加解密),且m必須小於N。這裏我們選擇數字65作爲明文, 。
1. 選擇兩個不相等的質數p和q,這裏我們使用61和53兩個數字作爲p和q。
2. 計算二者的乘積作爲N。
3. 計算N的歐拉函數
4. 隨機選一個整數e,滿足條件 且與 互質
這裏我們選擇17作爲e, 。
5. 計算e對於 的模反元素,即使得ed被 整除的餘數爲1
。
這裏不詳細介紹模反元素的算法了,模反元素可能有多個,當d=2753時,公式成立,即 。所以 。
6. 加密
使用公鑰 對數字65進行加密,Plain=65。
,即加密後的數字,即Cipher=2790。
7. 解密
使用私鑰 ,
。即解出明文爲65,解密成功。
公式推導證明
我們來證明爲什麼用私鑰解密,一定可以正確地得到明文m。也就是證明下面這個式子:
因爲,根據加密規則
於是,Cipher可以寫成下面的形式:
將Cipher代入要我們要證明的那個解密規則:
它等同於求證
由於
所以
將 ed 代入:
接下來,分成兩種情況證明上面這個式子。
1. Plain與n互質。
根據歐拉定理,
得到
原式得到證明。
2. Plain與n不是互質關係。
由於n等於質數p和q的乘積,所以Plain必然等於 kp 或 kq。
以 Plain = kp 爲例,考慮到這時k與q必然互質,則根據歐拉定理,下面的式子成立:
進一步得到
即
將它改寫成下面的等式
這時t必然能被p整除,即 t=t’p
因爲 Plain=kp,n=pq,所以
原式得到證明。