rsa加密算法

RSA加密算法

RSA加密算法簡史

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

公鑰與密鑰的產生

  假設Alice想要通過一個不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方式來產生一個公鑰和一個私鑰

  1. 隨意選擇兩個大的質數pqp不等於q,計算N=pq
  2. 根據歐拉函數,求得r = (p-1)(q-1)
  3. 選擇一個小於 r 的整數 e,求得 e 關於模 r 的模反元素,命名爲d。(模反元素存在,當且僅當e與r互質)
  4.  p  q 的記錄銷燬。
(N,e)是公鑰,(N,d)是私鑰。Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來。

加密消息

  假設Bob想給Alice送一個消息m,他知道Alice產生的Ne。他使用起先與Alice約好的格式將m轉換爲一個小於N的整數n,比如他可以將每一個字轉換爲這個字的Unicode碼,然後將這些數字連在一起組成一個數字。假如他的信息非常長的話,他可以將這個信息分爲幾段,然後將每一段轉換爲n。用下面這個公式他可以將n加密爲c

  ne ≡ c (mod N)

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

解密消息

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

  cd ≡ n (mod N)

得到n後,她可以將原來的信息m重新復原。

解碼的原理是:

  cd ≡ n e·d(mod N)

以及ed ≡ 1 (mod p-1)和ed ≡ 1 (mod q-1)。由費馬小定理可證明(因爲pq是質數)

  n e·d ≡ n (mod p)   和  n e·d ≡ n (mod q)

這說明(因爲pq不同的質數,所以pq互質)

  n e·d ≡ n (mod pq)

計算公鑰和密鑰
  1. 假設p = 3、q = 11(p,q都是素數即可。),則N = pq = 33;
  2. r = (p-1)(q-1) = (3-1)(11-1) = 20;
  3. 根據模反元素的計算公式,我們可以得出,e·d ≡ 1 (mod 20),即e·d = 20n+1 (n爲正整數);我們假設n=1,則e·d = 21。e、d爲正整數,並且e與r互質,則e = 3,d = 7。(兩個數交換一下也可以。)
  到這裏,公鑰和密鑰已經確定。公鑰爲(N, e) = (33, 3),密鑰爲(N, d) = (33, 7)。



互質數

  百度百科上的解釋是:公因數只有1的兩個數,叫做互質數。;維基百科上的解釋是:互質,又稱互素。若N個整數的最大公因子是1,則稱這N個整數互質。

  常見的互質數判斷方法主要有以下幾種:

  1. 兩個不同的質數一定是互質數。例如,2與7、13與19。
  2. 一個質數,另一個不爲它的倍數,這兩個數爲互質數。例如,3與10、5與 26。
  3. 相鄰的兩個自然數是互質數。如 15與 16。
  4. 相鄰的兩個奇數是互質數。如 49與 51。
  5. 較大數是質數的兩個數是互質數。如97與88。
  6. 小數是質數,大數不是小數的倍數的兩個數是互質數。例如 7和 16。
  7. 2和任何奇數是互質數。例如2和87。
  8. 1不是質數也不是合數,它和任何一個自然數在一起都是互質數。如1和9908。
  9. 輾轉相除法。

哥德巴赫猜想:是否每個大於2的偶數都可寫成兩個素數之和?
孿生素數猜想:孿生素數就是差爲2的素數對,例如11和13。是否存在無窮多的孿生素數?
斐波那契數列內是否存在無窮多的素數?


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

發佈了39 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章