RSA演算法-例項分析
主要講解5個問題:
一,6步生成公鑰和私鑰
二,明文X的加密成密文Y與密文Y的解密
三,例項分析
四,為什麼說RSA是安全的?
五,需要知道一點數論知識:
(1)互質:這個小學就學過了,如果兩個正整數,除了1之外,沒有其他公因子,就稱這兩個數是互質關係(coprime)
(2) 尤拉函式:思考(任意給定一個正整數n,請問在小於等於n的正整數之中,有多少個與n構成關係?比如,在1到8之中,有多少個數與8構成互質關係?)
計算這個值的方法就叫做尤拉函式,以Φ(n)表示。在1到8之中,與8形成的互質關係的是1,3,5,7,所以Φ(n)= 4。
一,(6步)
1,首先選兩個大素數,p,q
2,計算n,n = p*q
3,計算尤拉函式Φ(n)= (p-1)(q-1)
4,隨機取整數e,且1<e<Φ(n),e與Φ(n)互質
5,計算祕密值d,由de ≡ 1modΦ(n),,≡ 為互餘符號即≡號兩邊的數有相同的餘數
6,公鑰PK = (e,n),私鑰SK = (d,n)
二,設明文為X,密文為Y
則密文X經過加密之後的密文Y = Xemod n
密文Y經過解密可得到明文X = Ydmod n
三,舉個例子說明一下:
1,為了方便計算,首先我們選取兩個小的素數,p = 3,q = 11
2,計算n,n = p*q = 3*11 = 33(100001這才六位二進位制數,一般都是1024位,重要的檔案有2048位的)
3,求出尤拉函式Φ(n) = (p-1)(q-1)= (3-1)(11-1) = 20
4,取一個隨機數e=3,(1<e<20且e與20互質)
5,計算祕密數d,de ≡ 1mod Φ(n)因為1modΦ(n)= 1 恆成立,則此算式可以寫成de modΦ(n)= 1
即3d mod 20 = 1 一個個試數解得d = 7
6,綜上得,公鑰PK = (3,33),私鑰SK = (7,33)
假設明文X= key,首先我們需要把它轉換成ASCII碼
01 | 02 | 03 | 04 | 05 |
06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 |
a | b | c | d | e | f | g | h | i | j | k | l | m |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
n | o | p | q | r | s | t | u | v | w | x | y | z |
這裡我們需要注意:如果X過大,則需要對其盡行分組,如本題X——11,05,25
對X進行加密的密文Y= Xe mod n 即 Y=X3 mod 33 ——>113mod 33 = Y mod 33 得Y= 11
053mod 33 = Y mod 33 得Y= 26
253mod 33 = Y mod 33 得Y= 16
對Y進行解密的明文X= Ydmod n 即 X = Y7mod 33——>117mod 33 = X mod 33 得X= 11
267mod 33 = X mod 33 得 X= 05
167mod 33 = X mod 33得 X= 25
四,為什麼說RSA是安全的呢?
我們知道此過程一共用到了6個數 p,q,n,Φ(n),e,d
而公鑰中的e,n是公開的,其餘4個數我們是不知道的
假如我們採取暴力破解的方法:我們只需要解出d,也就知道了私鑰
1,要解出d,de= 1mod Φ(n),需要解出e,Φ(n)
2,Φ(n)= (p-1)(q-1),需要解出p,q
3,n = p*q,也即是需要對n 進行分解,由上面的例項,我們也許可能回想,這不是很簡答的事嗎,但是當p,q超級大時,而我們目前的技術還無法分解兩個超大素數
所以,就目前來說,時安全的。
而目前被破解的最長RSA金鑰是(232個十進位制數)768個二進位制數,而我們用的一般為1024位或者2048位。所以限制人類分解大整數的是計算機的計算能力,相信如果有一天真正的量子計算機問世後,又會引發一輪安全加密競賽。