加密和解密使用的是兩個不一樣的祕鑰,這種算法叫作非對稱加密。非對稱加密又稱爲公鑰加密,RSA只是公鑰加密的一種。算法
現實生活中有簽名,互聯網中也存在簽名。簽名的做用有兩個,一個是身份驗證,一個是數據完整性驗證。數字簽名經過摘要算法來確保接收到的數據沒有被篡改,再經過簽名者的私鑰加密,只能使用對應的公鑰解密,以此來保證身份的一致性。安全
數字證書是將我的信息和數字簽名放到一塊兒,經由CA機構的私鑰加密以後生成。固然,不通過CA機構,由本身完成簽名的證書稱爲自簽名證書。CA機構做爲互聯網密碼體系中的基礎機構,擁有至關高級的安全防範能力,全部的證書體系中的基本條件就是CA機構的私鑰不被竊取。bash
CA證書的生成過程以下: 函數
證書參與信息傳遞完成加密和解密的過程以下: 加密
互質關係:互質是公約數只有1的兩個整數,1和1互質,13和13就不互質了。 歐拉函數:表示任意給定正整數 n,在小於等於n的正整數之中,有多少個與 n 構成互質關係,其表達式爲:spa
狀況一:φ(1)=1;
1和任何數都互質,因此φ(1)=1;3d
狀況二:n 是質數, φ(n)=n-1;
由於 n 是質數,因此和小於本身的全部數都是互質關係,因此φ(n)=n-1;code
狀況三:若是 n 是質數的某一個次方,即 n = p^k ( p 爲質數,k 爲大於等於1的整數),則φ(n)=(p-1)p^(k-1);
由於 p 爲質數,因此除了 p 的倍數以外,小於 n 的全部數都是 n 的質數;cdn
狀況四:若是 n 能夠分解成兩個互質的整數之積,n = p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2);
好比,φ(30)=φ(5×6)=φ(5)×φ(6)=4×2=8。此種狀況能夠經過"中國剩餘定理"證實,證實過程再也不本文討論範圍內。blog
狀況五:基於狀況四,若是 p1 和 p2 都是質數,且 n=p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)=(p1-1)(p2-1)
例如,φ(39) = φ(3×13) = φ(3)φ(13)=2 × 12 = 14;
而 RSA 算法的基本原理就是歐拉函數中的第五種狀況,即: φ(n)=(p1-1)(p2-1);
若是兩個正整數 a 和 n 互質,那麼必定能夠找到整數 b,使得 ab-1 被 n 整除,或者說ab被n除的餘數是1。這時,b就叫作a的「模反元素」。歐拉定理能夠用來證實模反元素必然存在。
能夠看到,a的 φ(n)-1 次方,就是a對模數n的模反元素。
n=p x q = 3233,3233寫成二進制是110010100001,一共有12位,因此這個密鑰就是12位。
在實際使用中,通常場景下選擇1024位長度的數字,更高安全要求的場景下,選擇2048位的數字,這裏做爲演示,選取p=61和q=53;
由於n、p、q都爲質數,因此φ(n) = (p-1)(q-1)=60×52= 3120
1< e <3120,注意,這裏是和φ(n) 互互質而不是n!假設選擇的值是17,即 e=17;
模反元素就是指有一個整數 d,可使得 ed 被 φ(n) 除的餘數爲1。表示爲:(ed-1)=φ(n)y --> 17d=3120y+1,算出一組解爲(2753,15),即 d=2753,y=-15,也就是(172753-1)/3120=15。
注意,這裏不能選擇 3119,不然公私鑰相同.
公鑰:(n,e)=(3233,2753) 私鑰:(n,d)=(3233,17)
公鑰是公開的,也就是說 m=p*q=3233 是公開的,那麼怎麼求 e ?e 是經過模反函數求得,17d=3120y+1,e是公開的等於 17,這時候想要求d就要知道 3120,也就是 φ(n),也就是 φ(3233),說白了,3233 是公開的,你能對 3233 進行因數分解,你就能知道 d,也就能破解私鑰。
正常狀況下,3233 咱們能夠因數分解爲 61*53,可是對於很大的數字,人類只能經過枚舉的方法來因數分解,因此RSA安全性的本質就是:對極大整數作因數分解的難度決定了 RSA 算法的可靠性。換言之,對一極大整數作因數分解愈困難,RSA 算法愈可靠。
人類已經分解的最大整數是:
這我的類已經分解的最大整數爲 232 個十進制位,768 個二進制位,比它更大的因數分解,尚未被報道過,所以目前被破解的最長RSA密鑰就是 768 位。因此實際使用中的 1024 位祕鑰基本安全,2048 位祕鑰絕對安全。
已經得出公私鑰的組成: 公鑰:(n,e)=(3233,2753) 私鑰:(n,d)=(3233,17) 加密的過程就是
m^e ≡ c (mod n)
複製代碼
解密過程以下:
c^d ≡ m (mod n)
複製代碼
其中 m 是要被加密的數字,c 是加密以後輸出的結果,且 m < n ,其中解密過程必定成立能夠證實的,這裏省略證實過程。
總而言之,RSA的加密就是使用模反函數對數字進行加密和求解過程,在實際使用中由於 m < n必須成立,因此就有兩種加密方法:
分段加密
使用對稱加密加密原文,使用RSA加密對稱加密中使用的祕鑰
對稱加密存在雖然快速,可是存在致命的缺點就是祕鑰須要傳遞。非對稱加密雖然不須要傳遞祕鑰就能夠完成加密和解密,可是其致命缺點是速度不夠快,不能用於高頻率,高容量的加密場景。因此纔有了二者的互補關係,在傳遞對稱加密的祕鑰時採用非對稱加密,完成祕鑰傳送以後採用對稱加密,如此就能夠完美互補。