密碼學是指研究信息加密,破解密碼的技術科學。算法
非對稱加密算法,須要兩個密鑰,公開密鑰簡稱公鑰(publicKey) 和私有密鑰簡稱私鑰(privateKey)。公鑰加密,私鑰解密;私鑰加密,公鑰解密。安全
講解RSA數學原理以前,必定要明白的幾個概念。網絡
在大於1的天然數中,除了1和它自己之外再也不有其餘因數的天然數。如:二、三、五、七、十一、13。函數
若兩個天然數除了1以外沒有其餘公因子,則這兩個數就是互質關係。如:3和五、7和10。post
題目:給定任意一個正整數n,在小於等於n的正整數中有幾個與n互質?加密
計算這個題的函數就叫歐拉函數,用Φ(n)表示。
舉例:設計
1
、2
、3
、4
、5
、6
與n互質,則Φ(7) = 6。1
、3
、5
、7
與8互質,則Φ(8) = 4。Φ(n) = n - 1
。n = a * b,a和b互質
,則有Φ(n) = Φ(a) * Φ(b)
。n = a * b,a和b均爲質數
,則Φ(n) = Φ(a) * Φ(b) = (a - 1) * (b - 1)
。舉例:code
Φ(56) = Φ(7) * Φ(8) = 6 * 4 = 24。
Φ(35) = Φ(5) * Φ(7) = (5 - 1) * (7 - 1) = 24。巧合了,都是24。
若是
a和b互質
,則a
的Φ(b)次方
減1
必定能夠被b整除
,即:。cdn
接下來咱們能夠對歐拉定理進行一些轉換blog
若是兩個正整
x
和y
互質,則必定能夠找到一個整數z
,使得xz-1
能被y
整除,此時z
就叫作x
相對於y
的模反元素。
即:,也即,k是任意值的常量。
--------------------一條分割線先暫停一下-----------------------
看到小結覺得文章到這就結束了?NONONO,這只是上面那些推導定理的小結。
RSA數學原理所用到的數學定理
及推導定理
到這算是講完了,先總結一下咱們推導出來可使用的條件:
還有推導過程當中咱們用到的一些基礎知識:
前面密碼學的發展歷史中講到1976年迪菲和赫爾曼提出了一種不直接傳遞密鑰就可完成密鑰交換的方法叫作迪菲赫爾曼密鑰交換,開拓了密碼學的新篇章。而且僅僅時隔一年RSA非對稱加密就誕生了,要說這二者之間沒有任何關係估計鬼都不信吧。
借個圖來解釋一下迪菲赫爾曼密鑰交換的原理。
啊哦,發生了什麼?這兩個算出來的結果竟然是相同的?
對,沒錯,這個最終算出來的10就是真正用來加密的密鑰。
到這就不得不說這種方法的巧妙之處了,黑客能夠從網絡中截取到6和12,可是他想要算出真正的密鑰10,就必須知道m,n,cr/sr的值。m和n也可能經過一些特殊手段獲得,可是cr和sr這兩個都是隨機生成的。所以黑客想要破解出真正的密鑰就只有暴力破解,而應對暴力破解,咱們能夠將cr/sr,n的值設置爲很是大的數,例如1024或2048位,這樣位數的數字破解難度就已經很是大了。這些就是迪菲赫爾曼密鑰交換的原理。
等等,不是說講RSA的原理嗎?怎麼講到密鑰交換原理了?還有前面說了一大堆歐拉定理、模反元素是幹什麼的?還說不是湊字數?
先把磚頭🧱放下,我還有沒講完呢,接下來就把前面的東西都用上。😂😂
這裏是整篇文章的重點和難點,不明白的能夠找找紙筆畫畫,筆者學這一塊的時候畫了兩張A4紙,正反兩面。
下面把前面推導出來的原理再拿過來:
有沒有發現和在格式上很類似?
因此如今像作應用題同樣:
設
則當a和b互質,x和Φ(b)互質時,有。必定要記清楚這個結論的前提條件。
咱們接着把上面的那個結論拆開,能夠獲得和。有沒有以爲好像在哪見過這兩個式子呢?就是在上面的迪菲赫爾曼密鑰交換那裏啊。
就至關於客戶端進行的操做,計算出c發送給服務端,服務端經過計算出終極密鑰a。
說到這,細心的你有沒有對比這兩個式子和上面密鑰交換不同的地方呢?
什麼?還有不同的地方?
固然有,仔細看密鑰交換的那兩步計算,計算前是3,最終計算出來的結果是10。而這和兩個式子,計算前是a,計算後仍是a。是否是恍然大悟?若是說第一個式子是用x加密a獲得c
,第二個式子用z解密c再獲得a
,這樣說你就該明白RSA的原理了吧?
再等等,先別結束,還有問題,這兩個式子分別是加密
和解密
這我理解了,可是爲何它們計算前和計算後是同樣的,而迪菲赫爾曼密鑰交換計算先後是不同的?不解釋清楚別想結束!
因此別忘了這兩個式子推導出來的前提條件:
在加密解密過程當中,a是須要傳輸的原始數據。b、x、z則都是未知的,所以咱們須要針對上面的三個前提條件來找b、x、z的值。
舉個例子:
要傳輸的數據a = 3,爲了知足條件1,我讓b = 5,則Φ(b) = Φ(5) = 4。
條件2中x須要和Φ(b)互質,我讓x = 7。爲了知足條件3的,我可讓z = 11,這樣是成立的。也就是說如今3個條件都知足了。
下面就到了驗證的時刻了,帶入那兩個式子,而。驗證是成功的。
固然,在真正使用上確定不會像上面例子那樣簡單,通常密鑰都是在1024位以上。另外說明一下,這個加密和解密的過程當中密鑰並不僅僅是x和z
,真正的加密密鑰應該是x和b
,解密密鑰應該是z和b
。
好了,要講的都已經講完了,如今就來總結一下這篇文章中用到的知識點。
差很少就這麼多了,接下來還有就是,,,額,沒什麼事了,結束。
哦對了,維權。這就是原文