非對稱加密--RSA原理淺析

前因後果

 在1976年之前,全部的加密方法都是同一種模式:加密、解密使用同一種算法。在交互數據的時候,彼此通訊的雙方就必須將規則告訴對方,不然無法解密。這種加密與解密使用同一規則的加密方式被稱爲對稱加密算法。那麼加密和解密的規則(簡稱密鑰)的保護就顯得尤爲重要,傳遞密鑰的風險也一直是個隱患。
 直到1976年,兩位美國計算機學家:迪菲(W.Diffie)、赫爾曼(M.Hellman)提出了一種嶄新構思,能夠在不直接傳遞密鑰的狀況下完成密鑰交換,開創了密碼學研究的新方向。這就是「迪菲赫爾曼密鑰交換」算法,其仍然是一種對稱加密算法,只是密鑰再也不須要傳遞。交換原理以下圖所示:
算法

迪菲赫爾曼密鑰交換原理
其中a,b是在通訊兩端本地的隨機數,g是模p的一個 原根,K是交換後產生的密鑰,安全性來源於當p很是大時,已知g,p,A,B很難反算出a,b。 離散對數問題是該算法的基礎。
 1977年,三位麻省理工學院的數學家 羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一塊兒設計了一種算法,能夠實現非對稱加密。這就是用他們三我的的名字命名的算法-- RSA算法。
 要弄清楚RSA的加密原理,先要知道 歐拉定理

對於兩個互質的正整數m、n,m^φ(n) mod n ≡ 1
當m<n時不難推導出:m^(k*φ(n)) mod n ≡ 1
進一步獲得:m^(k*φ(n)+1) mod n ≡ m安全

基於此還須要理解一個概念,模反元素網絡

若是兩個正整數e和x互質,那麼必定能夠找到整數d,使得 e*d-1 被x整除。那麼d就是e對於x的「模反元素」
即e*d mod x ≡ 1
等同於 e*d ≡ k*x + 1,k爲正整數函數

敲黑板!!!關鍵來了,上面兩個轉換的結果一碰撞,Duang!就碰出了咱們RSA的核心算法:學習

當e與φ(n)互質時,m^(e*d) mod n ≡ m加密

雞不雞凍,開不開森!還有點迷糊?不要緊,來繼續:設計

假設咱們對m進行加密傳輸
加密:m^e mod n = c,
解密:c^d mod n = m^(e*d) mod n = mcdn

上述過程當中,n+e就是RSA中的公鑰,n+d就是RSA中的私鑰,c是加密後的密文。blog

補充:

  1. n會很是大,長度通常爲1024個二進制位,如今穩妥一點的長度爲2048個二進制位。(目前人類已經分解的最大整數,232個十進制位,768個二進制位)
  2. 由於須要求出φ(n),因此根據歐拉函數特色,最簡單獲得n的方式是由兩個質數相乘: 質數:p一、p2 Φ(n) = (p1 - 1) * (p2 - 1)
  3. 最終由φ(n)獲得 e 和 d

總共生成6個數字:p一、p二、n、φ(n)、e、dip

關於RSA的安全:

除了公鑰用到了n和e 其他的4個數字是不公開的。 目前破解RSA獲得私鑰d的思路以下:

  1. 因爲e*d = φ(n)*k + 1。e是公開的,那必需要知道φ(n)
  2. 要獲得φ(n),必須知道p1 和 p2
  3. 因爲 n = p1 * p2,因此只有將n因數分解才能算出p1 p2
  4. 量子計算機若是成功誕生,如今通行於銀行及網絡等處的RSA加密算法能夠破解,也會瓦解全部基於大質數因式分解算力逆天而衍生出的加密算法。

後面我會繼續對iOS證書籤名相關原理進行分析,同時把常見的加密算法作一下梳理和比較,並附上每種算法在iOS中的代碼實現。歡迎一塊兒交流學習心得~

相關文章
相關標籤/搜索