iOS應用安全 1 -- 密碼學及RSA算法原理

密碼學

概念

密碼學是指研究信息加密,破解密碼的技術科學。算法

發展歷史

  1. 密碼學的歷史能夠追溯到兩千年前,相傳古羅馬凱撒大帝爲了防止敵方截獲情報,用密碼傳送情報。凱撒的作法很簡單,就是對二十幾個羅馬字母創建一張對應表。這樣,若是不知道密碼本,即便截獲一段信息也看不懂。
  2. 從密碼出現到1976年之前,加密模式就只有一種,即加密和解密使用同一種算法。在進行數據交互時,A必需要將加密規則告訴B,B才能解密出真實數據。所以,加密和解密的規則(稱爲密鑰)就顯得尤其重要,而且密鑰的傳遞就成了這種加密模式最大的隱患。而這種加密方式就被稱爲對稱加密
  3. 1976年,兩位美國計算機學家 迪菲(W.Diffie)赫爾曼( M.Hellman ) 提出了一種新的方案,能夠在不直接傳遞密鑰的狀況下完成密鑰的交換,這種方案被稱爲 迪菲赫爾曼密鑰交換。開拓了密碼學的新方向。
  4. 時隔一年即1977年,三位麻省理工的數學家 羅納德·李維斯特(Ron Rivest)阿迪·薩莫爾(Adi Shamir)倫納德·阿德曼(Leonard Adleman) 一塊兒設計了一種算法,能夠實現非對稱加密。而這個算法就用他們三個的名字命名------RSA算法

RSA算法

非對稱加密算法,須要兩個密鑰,公開密鑰簡稱公鑰(publicKey) 和私有密鑰簡稱私鑰(privateKey)。公鑰加密,私鑰解密;私鑰加密,公鑰解密。安全

數學原理

講解RSA數學原理以前,必定要明白的幾個概念。網絡

質數

在大於1的天然數中,除了1和它自己之外再也不有其餘因數的天然數。如:二、三、五、七、十一、13。函數

互質

若兩個天然數除了1以外沒有其餘公因子,則這兩個數就是互質關係。如:3和五、7和10。post

歐拉函數

題目:給定任意一個正整數n,在小於等於n的正整數中有幾個與n互質?加密

計算這個題的函數就叫歐拉函數,用Φ(n)表示。
舉例:設計

  1. 若n = 7,則一、二、三、四、五、六、7中123456與n互質,則Φ(7) = 6。
  2. 若n = 8,則有1357與8互質,則Φ(8) = 4。

歐拉函數特色

  • 當n是質數時,Φ(n) = n - 1
  • 若n能夠分解爲兩個互質的整數之積,如:n = a * b,a和b互質,則有Φ(n) = Φ(a) * Φ(b)
  • 若n可分解爲兩個質數之積,如:n = a * b,a和b均爲質數,則Φ(n) = Φ(a) * Φ(b) = (a - 1) * (b - 1)

舉例:code

  1. Φ(56) = Φ(7) * Φ(8) = 6 * 4 = 24。
  2. Φ(35) = Φ(5) * Φ(7) = (5 - 1) * (7 - 1) = 24。巧合了,都是24。

歐拉定理

若是a和b互質,則aΦ(b)次方1必定能夠被b整除,即:a^{\phi(b)}mod\ b=1cdn

接下來咱們能夠對歐拉定理進行一些轉換blog

  • 因爲1^k = 1,因此a^{\phi(b) * k}mod\ b=1
  • 因爲1*a=a,因此a^{\phi(b)*k+1}mod\ b=a
  • 若轉換過程不明白能夠仔細分析,關鍵點就在於(x^ymod z)^m=x^{y*m}mod\ z(x^ymod\ z)*x^m=x^{y+m}mod\ z,能夠本身驗證一下。

模反元素

若是兩個正整xy互質,則必定能夠找到一個整數z,使得xz-1能被y整除,此時z就叫作x相對於y的模反元素。
即:(x*z)mod\ y=1,也即x*z=y*k+1,k是任意值的常量。

--------------------一條分割線先暫停一下-----------------------

小結

看到小結覺得文章到這就結束了?NONONO,這只是上面那些推導定理的小結。

RSA數學原理所用到的數學定理推導定理到這算是講完了,先總結一下咱們推導出來可使用的條件:

  1. 若是a和b互質,則a^{\phi(b)*k+1}mod\ b=a。(歐拉定理推導)
  2. 若是x和y互質,則能夠找到一個z知足x*z=y*k+1。(模反元素推導)

還有推導過程當中咱們用到的一些基礎知識:

  1. (x^ymod z)^m=x^{y*m}mod\ z
  2. (x^ymod\ z)*x^m=x^{y+m}mod\ z

迪菲赫爾曼密鑰交換過程及原理

前面密碼學的發展歷史中講到1976年迪菲和赫爾曼提出了一種不直接傳遞密鑰就可完成密鑰交換的方法叫作迪菲赫爾曼密鑰交換,開拓了密碼學的新篇章。而且僅僅時隔一年RSA非對稱加密就誕生了,要說這二者之間沒有任何關係估計鬼都不信吧。

借個圖來解釋一下迪菲赫爾曼密鑰交換的原理。

DH密鑰交換

  1. 客戶端和服務端私下商定兩個數,m = 3, n = 17。(外人通常不會知道,知道了也不要緊)
  2. 客戶端和服務端分別生成一個隨機數,cr = 13, sr = 15。
  3. 客戶端計算m^{cr}mod\ n = 3^{13}mod\ 17 = 12的值發送給服務端。
  4. 同理,服務端計算m^{sr}mod\ n = 3^{15}mod\ 17 = 6的值給客戶端,這兩個發送的過程都是不安全的,容易被第三方竊取到12和6,可是不要緊,他竊取到也沒用。
  5. 客戶端拿到服務端計算的6,再計算6^{13}mod\ 17 = 10
  6. 服務端拿到客戶端計算的12,再計算12^{15}mod\ 17 = 10

啊哦,發生了什麼?這兩個算出來的結果竟然是相同的?
對,沒錯,這個最終算出來的10就是真正用來加密的密鑰。

到這就不得不說這種方法的巧妙之處了,黑客能夠從網絡中截取到6和12,可是他想要算出真正的密鑰10,就必須知道m,n,cr/sr的值。m和n也可能經過一些特殊手段獲得,可是cr和sr這兩個都是隨機生成的。所以黑客想要破解出真正的密鑰就只有暴力破解,而應對暴力破解,咱們能夠將cr/sr,n的值設置爲很是大的數,例如1024或2048位,這樣位數的數字破解難度就已經很是大了。這些就是迪菲赫爾曼密鑰交換的原理。

等等,不是說講RSA的原理嗎?怎麼講到密鑰交換原理了?還有前面說了一大堆歐拉定理、模反元素是幹什麼的?還說不是湊字數?

先把磚頭🧱放下,我還有沒講完呢,接下來就把前面的東西都用上。😂😂

RSA原理

這裏是整篇文章的重點和難點,不明白的能夠找找紙筆畫畫,筆者學這一塊的時候畫了兩張A4紙,正反兩面。
下面把前面推導出來的原理再拿過來:

  1. 若是a和b互質,則a^{\phi(b)*k+1}mod\ b=a。(歐拉定理推導)
  2. 若是x和y互質,則能夠找到一個z知足x*z=y*k+1。(模反元素推導)

有沒有發現\phi(b)*k+1y*k+1在格式上很類似?
因此如今像作應用題同樣:
y=\phi(b)
則當a和b互質,x和Φ(b)互質時,有a^{x*z}mod\ b=a。必定要記清楚這個結論的前提條件。

咱們接着把上面的那個結論拆開,能夠獲得a^xmod\ b=cc^zmod\ b=a。有沒有以爲好像在哪見過這兩個式子呢?就是在上面的迪菲赫爾曼密鑰交換那裏啊。
a^xmod\ b=c就至關於客戶端進行的操做,計算出c發送給服務端,服務端經過c^zmod\ b=a計算出終極密鑰a。

說到這,細心的你有沒有對比這兩個式子和上面密鑰交換不同的地方呢?
什麼?還有不同的地方?

固然有,仔細看密鑰交換的那兩步計算,計算前是3,最終計算出來的結果是10。而這a^xmod\ b=cc^zmod\ b=a兩個式子,計算前是a,計算後仍是a。是否是恍然大悟?若是說第一個式子是用x加密a獲得c,第二個式子用z解密c再獲得a,這樣說你就該明白RSA的原理了吧?

再等等,先別結束,還有問題,這兩個式子分別是加密解密這我理解了,可是爲何它們計算前和計算後是同樣的,而迪菲赫爾曼密鑰交換計算先後是不同的?不解釋清楚別想結束!
因此別忘了這兩個式子推導出來的前提條件:

  1. a和b互質。
  2. x和Φ(b)互質,因爲乘法交換律,因此z和Φ(b)確定也是互質的。
  3. z是x對於Φ(b)的模反元素,即(x*z)mod\ \phi(b)=1

在加密解密過程當中,a是須要傳輸的原始數據。b、x、z則都是未知的,所以咱們須要針對上面的三個前提條件來找b、x、z的值。
舉個例子:

要傳輸的數據a = 3,爲了知足條件1,我讓b = 5,則Φ(b) = Φ(5) = 4。
條件2中x須要和Φ(b)互質,我讓x = 7。爲了知足條件3的(x*z)mod\ \phi(b)=1,我可讓z = 11,這樣(7*11)mod\ 4 = 1是成立的。也就是說如今3個條件都知足了。
下面就到了驗證的時刻了,帶入那兩個式子c=a^xmod\ b=3^7mod\ 5=2,而a=c^zmod\ b=2^{11}mod\ 5=3。驗證是成功的。

固然,在真正使用上確定不會像上面例子那樣簡單,通常密鑰都是在1024位以上。另外說明一下,這個加密和解密的過程當中密鑰並不僅僅是x和z,真正的加密密鑰應該是x和b,解密密鑰應該是z和b

總結

好了,要講的都已經講完了,如今就來總結一下這篇文章中用到的知識點。

  1. 數學知識。質數、互質、歐拉函數、歐拉定理、模反元素。
  2. 迪菲赫爾曼密鑰交換的過程及原理。
  3. RSA原理及原理的推導過程。

差很少就這麼多了,接下來還有就是,,,額,沒什麼事了,結束

哦對了,維權。這就是原文

相關文章
相關標籤/搜索