密碼學發展史
討論RSA原理之前,我們先了解一下密碼學的發展史。因為RSA最終形成的數學算法,也是不斷演變而來的。
歷史上最早的加密算法
- 中國
話說歷史上最早的加密算法的記載出自于周朝兵書《六韜.龍韜》中的《陰符》和《陰書》。其原理是使用文字拆分和符號代替等方式來加密數據。其實密碼學的誕生,就是為了運用在戰場。 - 西方
無獨有偶,在遙遠的西方加密算法也大規模使用于戰爭之中。在希羅多德(Herodotus)的《歷史》中記載了公元前五世紀,希臘城邦和波斯帝國的戰爭中,廣泛使用了移位法進行加密處理戰爭通訊信息。
凱撒密碼
由古代密碼演變而來的凱撒密碼。相傳凱撒大帝為了防止敵人竊取信息,就使用加密的方式傳遞信息。那么當時的加密方式非常的簡單,就是對二十幾個羅馬字母建立一張對照表,將明文對應成為密文。那么這種方式其實持續了很久。甚至在二戰時期,日本的電報加密就是采用的這種原始加密方式。(更多內容推薦大家閱讀吳軍老師《數學之美》)
早期的密碼學一直沒有什么改進,幾乎都是根據經驗慢慢發展的。直到20世紀中葉,密碼學的發展進入了”快車道“。由香農發表的《秘密體制的通信理論》一文,標志著加密算法的重心轉移往應用數學上的轉移。于是,逐漸衍生出了當今重要的三類加密算法:非對稱加密、對稱加密以及哈希算法(當然HASH嚴格說不是加密算法,但由于其不可逆性,已成為加密算法中的一個重要構成部分)。
1976年前
這段時間,所有的加密方式都是同一種模式:加密、解密使用同一種算法。加密和解密的規則(密鑰)必須雙方都知道。那么它的傳遞就成為了最大的隱患。這種加密方式被稱為對稱加密算法。
1976年
正是因為對稱加密算法盛行(非對稱那個時候還沒有出現,但有些瘋狂的數學家已經開始構思這種方案,但并未成功)。人們為了更好的保護密鑰而絞盡腦汁。直到1976年,兩位美國計算機學家。迪菲(W.Diffie)、赫爾曼( M.Hellman ) 提出了一種嶄新構思,可以在不直接傳遞密鑰的情況下,完成密鑰交換。這被稱為“迪菲赫爾曼密鑰交換”算法。也正是因為這個算法的產生!人類終于可以實現非對稱加密了。那么我們一起來看看這個算法的數學原理。
由歐拉函數開始
在討論迪菲赫爾曼密鑰交換算法之前,我們先了解幾個數學知識。并做一些公式的轉換。這樣你才能更好的體會到迪菲赫爾曼密鑰交換算法它到底能發揮多么神奇的作用。
歐拉函數
什么是歐拉函數?先思考下面的問題。
思考
任意給定正整數n,請問在小于等于n的正整數之中,有多少個與n構成互質關系?
關于互質關系
如果兩個正整數,除了1以外,沒有其他公因數,我們就稱這兩個數是互質關系(coprime)。
計算這個值的方式叫做歐拉函數,使用:Φ(n)表示
如:
- 計算8的歐拉函數,和8互質的 1、2、3、4、5、6、7、8
φ(8) = 4 - 計算7的歐拉函數,和7互質的 1、2、3、4、5、6、7
φ(7) = 6 - 計算56的歐拉函數
φ(56) = φ(8) * φ(7) = 4 * 6 = 24
現在你會發現,并不是所有的歐拉函數都可以口算出來,有些甚至計算機都算不出來。當然你也發現了φ(56)似乎有些特殊。對了!歐拉函數有些特點是必須要知道的!
歐拉函數特點
- 當n是質數的時候,φ(n)=n-1。
- 如果n可以分解成兩個互質的整數之積,如n=AB則:
φ(AB)=φ(A)* φ(B) - 根據以上兩點得到:
如果N是兩個質數P1 和 P2的乘積則
φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1)
歐拉定理
了解了歐拉函數,接下來需要知道一個定理。既然是定理,就是恒古不變的,已經被數學家們證明過的,所以建議讀者可以驗證,但最好不要試圖去證明,這個比較耗時(主要是耗腦,別玩著玩著懷疑智商了...)
歐拉定理
如果兩個正整數m和n互質,那么m的φ(n)次方減去1,可以被n整除。
說白了就是:
費馬小定理
歐拉定理的特殊情況:如果兩個正整數m和n互質,而且n為質數!那么φ(n)結果就是n-1。
那么也就是:
等式轉換
1、根據歐拉定理
2、由于1^k ≡ 1,等號左右兩邊都來個k次方
3、由于1* m ≡ m,等號左右兩邊都乘上m
接下來,我們還需要進行等式轉換。那么等式轉換4的前提是 模反元素
模反元素
如果兩個正整數e和x互質,那么一定可以找到整數d,使得 ed-1 被x整除。
那么d就是e對于x的模反元素
說白了就是
這個模反元素的等式也可以進一步轉換,因為e*d 一定是x的倍數加1。所以如下:
那么千辛萬苦!我們通過多次的等式轉換。終于可以將這兩個等式進行合并了!如下:
這個等式成立有一個前提!就是關于模反元素的。說白了就是當整數e和φ(n)互質!一定有一個整數d是e相對于φ(n)的模反元素。
我們可以測試一下。
m 4
n 15
φ(n) 8
e 如果取值為3
d 可以為 11、19...(模反元素很明顯不止一個,其實就是解二元一次方程)
如果你測試了,那么你可以改變m的值試一下。其實這個等式不需要m和n 互質。只要m小于n 等式依然成立。
這里需要注意的是,我們可以看做 m 通過一系列運算 得到結果任然是 m。這一系列運算中,分別出現了多個參數n、φ(n)、e還有d 。
那么我們思考一下!
m 的 e乘上d 次方為加密運算 得到結果 c
c 模以 n 為解密運算 得到結果 m
這似乎可以用于加密和解密。但這樣,加密的結果會非常大。明文數據將非常小(雖然RSA用于加密的數據也很小,但是沒這么大懸殊)
真正的RSA要更加強大,那么RSA是怎么演變來的呢??
早期很多數學家也停留在了這一步!直到1967年迪菲赫爾曼密鑰交換打破了僵局!
迪菲赫爾曼密鑰交換
那么為什么說 這個密鑰交換當時轟動了整個數學界!而且對人類密碼學的發展非常重要呢?因為這個偉大的算法!能夠拆分剛才的等式。
當非對稱加密算法沒有出現以前,人類都是用的對稱加密。
所以密鑰的傳遞,就必須要非常小心。
迪菲赫爾曼密鑰交換 就是解決了 密鑰傳遞 的保密性!!我們來看一下
們來假設一個傳遞密鑰的場景。算法就是用3 的次方 去模以17。 三個角色
-
服務器 隨機數 15
- 這個15只有服務器才知道。通過算法!! 得到結果 6 因為 3的15次方 mod 17 = 6 。然后將結果 6 公開發送出去!!
- 拿到客戶端的 6 ,然后用6^15 mod 17 得到結果10(10就是交換得到的密鑰)
-
客戶端 隨機數13
- 得到結果 3 的 13次方 mod 17 = 12 然后將12公布出去。
- 拿到服務器的 12 ,然后用12^13 mod 17 得到結果10(10就是交換得到的密鑰)
-
黑客
它只能拿到6 和 12 。因為沒有私密數據13、15所以它沒法得到結果10.
那么這里可能一眼看過去不好理解!對吧!!
為什么 6的13次方會和12的15次方得到一樣的結果呢?
因為這就是規律!! 可以用小一點的數字測試一下!!
3^3 mod 17 = 10
10 ^ 2 mod 17 = 3 ^ 3 ^ 2 mod 17 結果都是15 !!
迪菲赫爾曼密鑰交換最核心的地方就在于這個規律!
RSA的誕生
以上就是RSA的數學原理,關于RSA的運用后面再慢慢闡述。本人才疏學淺,如果有地方寫得不對,請留言指出。也歡迎大家留言交流。