RSA 算法图解+数学证明
目錄
1. RSA交互流程
2. RSA的加密
3.?RSA的解密
4. RSA求解E、D、N流程
5.?RSA數學證明
1. RSA交互流程
我下面以使用最為廣泛的RSA算法(三位發明者名字的縮寫)為例來介紹公鑰密碼的原理,并通過數學公式做一個簡要的證明。當然這個需要的數學定理和公式有點多,我也不太擅長高等數學┭┮﹏┭┮,哦,高等數學中也沒有講mod運算呀,它是數論的概念,也是數論里的最重要的工具。
2. RSA的加密
RSA的加密過程可以通過一個公式來表示:
加密過程中用到了兩個數:E, N。他們是什么呢?
從上面的加密公式可以看出,加密報文只需要知道E,N便可以完成,因此只需要知道這兩個數字,任何人都可以完成加密操作,因此我們將(E,N)稱之為加密密鑰。
不同于對稱加密中的復雜操作,將數據加、減、乘、除、異或,拆來拆去,挪來挪去,揉來揉去等等,復雜的簡直不要不要滴。而RSA只是將明文做了E個乘方運算,然后再取余,簡潔而不失優美。
3.?RSA的解密
RSA解密流程同加密流程一樣簡潔,可以使用下面的公式表達:
也就是說我們求出密文的D次方,然后對N求余便可以實現報文的解密。而這里的(D,N)就是解密密鑰。
從上面可以看出:
RSA加解密的數學形式完全相同:
- 加密是“求E次方,然后mod N”;
 - 解密是“求D次方,然后mod N”;
 
可以說是相當的美妙。
這里的D,E在數學上必須滿足一定關系才行,否則無法對報文進行解密。 那么應該滿足D,E什么關系呢?
這里先拋開mod運算,但就指數運算做一個類似說明,后面在詳細的進行證明:
因此需要滿足D·E=1。即D, E互為倒數。
如果加上mod運算,原理差不多,只不過條件是:D·E mod N = 1。 即D,E 模N互為倒數
4. RSA求解E、D、N流程
通過上文已經知道:RSA加密是求“E次方的mod N”, 解密則是求“D次方的mod N”。這里用到了三個數:E,D,N, 他們是如何得到的呢?
RSA密鑰對的生成步驟如下:
(1)求N
(2)求Φ(Φ僅僅密鑰對的生成過程中使用)
(3)求E
(4)求D
下面對每一個步驟做一個詳細的講解說明:
(1)求N
首先準備兩個很大的質數p,q。
p, q 太小的話,容易被暴力破解,太大的話計算量也會相應的增大,一般p,q選取512比特,N是1024比特。p,q一般都是借助于偽隨機數生成器,然后判斷生成的數是否為質數,如果不是則重新使用偽隨機數生成器生成另外一個測試,如此往復,直到找到質數為止。(注:這里判斷一個數是否為質數,不是將其進行因式分解,數學上有較為簡單的判斷方法)。
將準備好的兩個大質數相乘,其結果就是N。即:
(2)求Φ
Φ在RSA加解密的過程中都不會用到,它只出現在生成密鑰對的過程中。
在數論中Φ(v)用來表示變量v的歐拉函數,它表示[1, v-1]范圍內那些與v互質(最大公約數為1)的正整數的個數。
下面說兩個定理:
|   定理①  | |
|   定理②  | 
只解釋下定理①:如果一個數n為質數,那么說明n在[1,n]范圍內,除了1和它本身沒有另外的公約數,也就是說在[1,n-1]范圍內,所有的數與n的最大公約數為1,即互質,因此歐拉函數的值(互質的個數)就是n-1,即:
(3)求E
E是一個介于(1,Φ(N))之間的正整數。此外E,N互質,即E與Φ(N)的最大公約數(greatest common divisor)為1。
用公式表示就是:
要找出一個滿足gcd?(E,?ΦN=1) 的數,依然需要借助隨機數生成器。我們可以利用輾轉相除法來計算兩個數的最大公約數。
為了保證在解密報文時,一定存在一個與E對應的D。(數論中的一個定理)
(4)求D
D要求與E具有一一對應關系,那么具體D,E,Φ之間有什么關系呢?
只要D, E, ΦN滿足上述條件,那么通過(E,N)加密的報文,一定可以通過(D,N)來解密。
D×E?modΦN=1? 存在的關鍵在于,EN互質。這便是在(3)中求解E時,要求兩者互質的原因。
至此,D,E,N已經全部計算得出,重新整理下他們之間的關系:
|   (1)求N  |   隨機數生成兩個大質數p,q,則N=p?×q  | 
|   (2)??Φ(N)  |   N的歐拉函數:Φ(N)=(p?1)(q?1)  | 
|   (3)求E  | |
|   (4)求D  | 
圖解RSA如下:
5.?RSA數學證明
符號約定:明文m; 密文c。
已知條件:
其中:
涉及到的數學定理:
定理一:Euler定理
?
定理二:乘法逆元存在定理(定理專業名字忘了,且表達式做了等價轉換)
?
有了以上的基礎,便可以證明RSA加解密流程了:
?
下面分情況討論:
(一般情況下,明文m是遠遠小于 N的,如果明文m大于N,解密時會出錯)
那么,明文m應該為p或者q的倍數,但不能同時是p,q的倍數,因為m<N。
不妨假設m=tp,則m與q應該互質,則有:
 等式兩邊同時取kΦ(p)的冪次方,則等式依然成立,即:
所以有:
將m=t?𝑝同時乘以等式兩邊,則有
然后等式兩邊對N取模
?證明完畢。
總結
以上是生活随笔為你收集整理的RSA 算法图解+数学证明的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: SPI实验
 - 下一篇: delphi 中几种多线程操作方式