在1976年之前,全部的加密方法都是同一種模式:加密、解密使用同一種算法。在交互數據的時候,彼此通訊的雙方就必須將規則告訴對方,不然無法解密。這種加密與解密使用同一規則的加密方式被稱爲對稱加密算法。那麼加密和解密的規則(簡稱密鑰)的保護就顯得尤爲重要,傳遞密鑰的風險也一直是個隱患。
直到1976年,兩位美國計算機學家:迪菲(W.Diffie)、赫爾曼(M.Hellman)提出了一種嶄新構思,能夠在不直接傳遞密鑰的狀況下完成密鑰交換,開創了密碼學研究的新方向。這就是「迪菲赫爾曼密鑰交換」算法,其仍然是一種對稱加密算法,只是密鑰再也不須要傳遞。交換原理以下圖所示:
算法
對於兩個互質的正整數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
總共生成6個數字:p一、p二、n、φ(n)、e、dip
除了公鑰用到了n和e 其他的4個數字是不公開的。 目前破解RSA獲得私鑰d的思路以下:
後面我會繼續對iOS證書籤名相關原理進行分析,同時把常見的加密算法作一下梳理和比較,並附上每種算法在iOS中的代碼實現。歡迎一塊兒交流學習心得~