RSA算法詳解

前言

總括: 本文詳細講述了RSA算法詳解,包括內部使用數學原理以及產生的過程。php

相濡以沫。到底須要愛淡如水。前端

正文

以前寫過一篇文章SSL協議之數據加密過程,裏面詳細講述了數據加密的過程以及須要的算法。SSL協議很巧妙的利用對稱加密和非對稱加密兩種算法來對數據進行加密。這篇文章主要是針對一種最多見的非對稱加密算法——RSA算法進行講解。其實也就是對私鑰和公鑰產生的一種方式進行描述。首先先來了解下這個算法的歷史:算法

RSA算法的歷史

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

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

因此誰是RSA算法的發明人呢?很差說,就好像貝爾並非第一個發明電話的人但你們都記住的是貝爾同樣,這個地方咱們做爲旁觀者倒不用較真,重要的是這個算法的內容:加密

RSA算法的過程

RSA算法用到的數學知識特別多,因此在中間介紹這個算法生成私鑰和公鑰的過程當中會穿插一些數學知識。生成步驟以下:blog

1. 尋找兩個不相同的質數

隨意選擇兩個大的質數p和q,p不等於q,計算N=p*q;ip

什麼是質數?我想可能會有一部分人已經忘記了,定義以下:get

除了1和該數自身外,沒法被其餘天然數整除的數(也可定義爲只有1該數自己兩個正因數]的數)。

好比2,3,5,7這些都是質數,9就不是了,由於3*3=9了博客

2. 根據歐拉函數獲取r

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

這裏的數學概念就是什麼是歐拉函數了,什麼是歐拉函數呢?

歐拉函數的定義:

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

互質的定義:

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

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

推導歐拉函數:

(1)若是n = 1, φ(1) = 1;(小於等於1的正整數中惟一和1互質的數就是1自己);

(2)若是n爲質數,φ(n) = n - 1;由於質數和每個比它小的數字都互質。好比5,比它小的正整數1,2,3,4都和他互質;

(3) 若是nak次冪,則 φ(n) = φ(a^k) = a^k - a^(k-1) = (a-1)a^(k-1)

(4) 若m,n互質,則φ(mn) = φ(m)φ(n)

證實:A, B, C是跟m, n, mn互質的數的集,據中國剩餘定理(常常看數學典故的童鞋應該瞭解,剩餘定理又叫韓信點兵,也叫孫子定理),A*BC可創建雙射一一對應)的關係。(或者也能夠從初等代數角度給出歐拉函數積性的簡單證實) 所以的φ(n)值使用算術基本定理便知。(來自維基百科)

3. 選擇一個小於r並與r互質的整數e

選擇一個小於r並與r互質的整數e,求得e關於r的模反元素,命名爲ded = 1(mod r)模反元素存在,當且僅當e與r互質),e咱們一般取65537。

模反元素:

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

好比35互質,3關於5的模反元素就多是2,由於3*2-1=5能夠被5整除。因此很明顯模反元素不止一個,2加減5的整數倍都是3關於5的模反元素{...-3, 2,7,12…} 放在公式裏就是3*2 = 1 (mod 5)

上面所提到的歐拉函數用處實際上在於歐拉定理:

歐拉定理:

若是兩個正整數 an互質,則 n的歐拉函數 φ(n) 可讓下面的等式成立:

a^φ(n) = 1(mod n)

由此可得:aφ(n - 1)次方確定是a關於n的模反元素。

歐拉定理就能夠用來證實模反元素必然存在。

由模反元素的定義和歐拉定理咱們知道,aφ(n)次方減去1,能夠被n整除。好比,3和5互質,而5的歐拉函數φ(5)等於4,因此34次方(81)減去1,能夠被5整除(80/5=16)。

小費馬定理:

假設正整數a與質數p互質,由於質數p的 φ(p)等於 p-1,則歐拉定理能夠寫成

a^(p-1) = 1 (mod p)

這實際上是歐拉定理的一個特例。

4. 銷燬p和q

此時咱們的(N , e)是公鑰,(N, d)爲私鑰,愛麗絲會把公鑰(N, e)傳給鮑勃,而後將(N, d)本身藏起來。一對公鑰和私鑰就產生了,而後具體的使用方法呢?請看:SSL協議之數據加密過程詳解

RSA算法的安全性

咱們知道像RSA這種非對稱加密算法很安全,那麼到底爲啥子安全呢?
咱們來看看上面這幾個過程產生的幾個數字:

  • p,q:咱們隨機挑選的兩個大質數;
  • N:是由兩個大質數pq相乘獲得的。N = p * q
  • r:由歐拉函數獲得的N的值,r = φ(N) = φ(p)φ(q) = (p-1)(q-1)
  • e:隨機選擇和和r互質的數字,實際中一般選擇65537;
  • d: d是以歐拉定理爲基礎求得的e關於r的模反元素,ed = 1 (mod r)

Ne咱們都會公開使用,最爲重要的就是私鑰中的dd一旦泄露,加密也就失去了意義。那麼獲得d的過程是如何的呢?以下:

  1. 好比知道e和r,由於d是e關於r的模反元素;r是φ(N) 的值
  2. φ(N)=(p-1)(q-1),因此知道p和q咱們就能獲得d;
  3. N = pq,從公開的數據中咱們只知道N和e,因此問題的關鍵就是對N作因式分解能不能得出p和q

因此得出了在上篇博客說到的結論,非對稱加密的原理:

將a和b相乘得出乘積c很容易,但要是想要經過乘積c推導出a和b極難。即對一個大數進行因式分解極難

目前公開破譯的位數是768位,實際使用通常是1024位或是2048位,因此理論上特別的安全。

後記

RSA算法的核心就是歐拉定理,根據它咱們才能獲得私鑰,從而保證整個通訊的安全。

相關文章
相關標籤/搜索