非對稱加密算法RSA 學習

非對稱加密算法RSA 學習

RSA加密算法是一種非對稱加密算法。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一塊兒提出的。當時他們三人都在麻省理工學院工做。RSA就是他們三人姓氏開頭字母拼在一塊兒組成的。nginx

1973年,在英國政府通信總部工做的數學家克利福德·柯克斯(Clifford Cocks)在一個內部文件中提出了一個相同的算法,但他的發現被列入機密,一直到1997年才被髮表。web

對極大整數作因數分解的難度決定了RSA算法的可靠性。 換言之,對一極大整數作因數分解愈困難,RSA算法愈可靠。假若有人找到一種快速因數分解的算法的話,那麼用RSA加密的信息的可靠性就確定會極度降低。 但找到這樣的算法的可能性是很是小的。今天只有短的RSA鑰匙纔可能被強力方式解破。到目前爲止,世界上尚未任何可靠的攻擊RSA算法的方式。只要其鑰匙的長度足夠長,用RSA加密的信息其實是不能被解破的。算法

1、舉一個通俗易懂的例子

看一個數學小魔術:app

讓A寫下一個任意3位數,並將這個數和91相乘;而後將積的最後三位數告訴B,這樣B就能夠計算出A寫下的是什麼數字了。函數

  • 好比A寫下的是123,而且A計算出123 * 91等於11193,並把結果的末三位193告訴B ;
  • B只須要把193再乘以11,193 * 11 = 2123 末三位就是A寫下的數字了;

道理很簡單,91乘以11等於1001,而任何一個三位數乘以1001後,末三位顯然都不變(例如123乘以1001就等於123123)。post

知道原理後,能夠構造一個定義域和值域更大的加密解密系統。
例如:學習

  • 任意一個數乘以400000001後,末8位都不變,而400000001 = 19801 * 20201。因而A來乘以19801,B來乘以20201,又一個加密解密不對稱的系統就構造好了;
  • 甚至能夠構造得更大一些 4000000000000000000000000000001 = 1199481995446957 * 3334772856269093,這樣咱們就成功構造了一個30位的加密系統;

若是僅僅按照上面的思路,若是對方知道原理,很是容易窮舉出400000001這個目標值;RSA算法使用的是指數和取模運算,本質上就是上面這套思想。加密

此段落轉載自:
如何用通俗易懂的話來解釋非對稱加密?spa

2、一句話:

對極大整數作因數分解的難度決定了RSA算法的可靠性。code

3、RSA加密算法

3.一、維基百科——RSA加密算法

先看一下維基百科的算法描述:

公鑰與私鑰的產生

  • 一、隨意選擇兩個大的質數 p和 q,p不等於 q,計算 N=pq
  • 二、根據歐拉函數,求得 r
r = φ(N) = φ(p)φ(q) = (p-1)(q-1)
複製代碼
  • 三、選擇一個小於r並與r互質的整數e,求得e關於r的模反元素,命名爲d ( ed ≡ 1(mod r) 模反元素存在,當且僅當e與r互質 );
  • 四、銷燬p和q,此時 (N , e)是公鑰,(N, d)爲私鑰;

加密消息

假設Bob想給Alice發送一個消息 n,他知道Alice產生的 Ne ;用下面這個公式他能夠將 n加密爲 c

c ≡ n^e (mod N)
複製代碼

計算 c並不複雜。Bob算出 c後就能夠將它傳遞給Alice。

解密消息

Alice獲得Bob的消息 c後就能夠利用她的密鑰d來解碼。能夠用如下這個公式來將 c轉換爲 n

n ≡ c^d (mod N)
複製代碼

此段落轉載自:
維基百科——RSA加密算法

3.二、依照算法公式舉個例子

依照算法公式來舉個例子

一、隨意選擇兩個大的質數 p和 q,p不等於 q,計算 N=pq

質數 定義:

除了1和該數自身外,沒法被其餘天然數整除的數。
複製代碼

舉例:

p = 3
q = 5;
N = 3*5 = 15;
複製代碼

二、根據歐拉函數,求得 r

r = φ(N) = φ(p)φ(q) = (p-1)(q-1)。
複製代碼

歐拉函數 定義:

歐拉函數 φ(n)是小於或等於n的正整數中與n互質的數的數目。

例如:φ(8) = 4,由於1,3,5,7均和8互質。
複製代碼

舉例:

r = φ(N) = φ(p)φ(q) = (p-1)(q-1) ;

r = φ(15) = φ(3)φ(5) = (3-1)(5-1) ;
r = 8
複製代碼

三、選擇一個小於r並與r互質的整數e,求得e關於r的模反元素,命名爲d ( ed ≡ 1(mod r) 模反元素存在,當且僅當e與r互質 );

互質 定義:

若是兩個或兩個以上的整數的最大公約數是 1,則稱它們爲互質

例如:1,3,5,7均和8互質
複製代碼

模反元素 定義:

若是兩個正整數a和n互質,那麼必定能夠找到整數b,使得 ab-1 被n整除,或者說ab被n除的餘數是1

例如:好比35互質,3關於5的模反元素就多是2,由於 (3*2)%5=1 。
複製代碼

舉例:

// 選擇一個小於r並與r互質的整數e (1,3,5,7均和8互質):
e = 7;
// 求得e關於r的模反元素,命名爲d (    ed ≡ 1(mod r)     ) 

ed ≡ 1(mod r) ;

7*d ≡ 1(mod 8) ;
7*d%8 = 1
// 這裏取d = 15
d = 15
複製代碼

四、銷燬p和q,此時 (N , e)是公鑰,(N, d)爲私鑰

// 公鑰  (N , e)
15,7 )
// 私鑰 (N, d)
15,15 )
複製代碼

五、加密

假設Bob想給Alice發送一個消息 n,他知道Alice產生的 Ne ;用下面這個公式他能夠將 n加密爲 c

舉例:

// 假設 
n = 2;
// 計算c
c ≡ n^e (mod N) ;

(c^-1 * n^e)%N = 1 ; 
(c^-1 * 2^7)%15 = 1 ;
// 
c = 8;
複製代碼

六、解密

Alice獲得Bob的消息 c後就能夠利用她的密鑰d來解碼。能夠用如下這個公式來將 c轉換爲 n

舉例:

// 計算n
n ≡ c^d (mod N)

n ≡ 8^15 (mod 15) ;
(n^-1 * 8^15)%15 = 1 ;
//
n = 2;
複製代碼

參考

如何用通俗易懂的話來解釋非對稱加密?
維基百科——RSA加密算法
RSA算法詳解

相關文章
相關標籤/搜索