密碼學說起:
歷史:兩千年前 凱撒大帝發明
base64的雛形
容易破解 【信息論】
間諜很危險
一直到1976年 迪菲、赫爾曼提出了一個構想 不通過密鑰交換 1977 rsa誕生
RSA加密探究
對稱加密的弊端 還有RSA的歷史不在這裏贅述,有興趣的同學課自行查閱資料
在開始之前需要一定的數學知識,在這裏跟大家一起復習一下:
取模運算:
3%17= 3 、 3^2 %17= 9 、3^3 %17= 10 、3^4 %17= 13 、3^5 %17= 5 。。。
3^n % 17 = 12 請問n = ?,同學們可能發現了 取模的時候我們正向很容易算出答案,但是反向不好運算且有可能有多個解。
在這裏 我們管3 叫做 17的原根。
互質關係 (如果兩個正整數,除了1之外沒有其他公因數,我們就稱這兩個數爲互質關係)
例如 :1跟8、 3跟8 、5跟8、7跟8
有個小問題, 小於8的並且跟8爲互質關係的正整數有幾個,答案當然就是4
計算該值的方式就叫做歐拉函數(給定任意正整數n,在小於n的正整數之中有多少個與n爲互質關係)用φ(n)表示
φ(8) = 4;
那麼再來回憶一下質數的概念 - (在大於1的自然數中,除了1和它本身以外不再有其他因數。)
所以我們就能得出結論:如果當n是質數 φ(n)=n-1 例如5: 與5互質的 1 、2、 3、4
上面就是歐拉函數的第一個特點
另外歐拉函數還有個特點就是φ(A*B)=φ(A)* φ(B) 例如 φ(56) = φ(8) * φ(7) = 4 * 6 = 24
通過上面兩個特點 我就還能得出:
如果N是兩個質數P1 和 P2的乘積則
φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1) 例如 φ(15) = φ(3) * φ(5) = 2 * 4 = 8
以上還算是比較簡單
接下來有了歐拉函數,我們再來看歐拉定理 (如果兩個正整數m和n互質,那麼m的φ(n)次方減去1,可以被n整除。 -- 這是定理,大家不用想着去論證,只要知道這是真的就可以,當然不信的話可以找幾個數據測試一下)
也就是 (m^φ(n) - 1) % n ≡ 0 =>
m^φ(n) % n ≡ 1
因爲m 與n 互爲質數 所以m的k次方與n也互爲指數 於是
m^kφ(n) % n ≡ 1 =>
m^kφ(n)+1 % n ≡ m
上面的等式先留着 一會兒要用
下面講一下模反元素的概念
如果兩個正整數e和x互質,那麼一定可以找到整數d,使得 ed-1 被x整除。
那麼d就是e對於x的“模反元素” 舉個例子5 和 3互質 (5*2 - 1) % 3 ≡ 0 那麼2 就是5相對3的模反元素,當然不止一個,可以有很多個
公式表達爲
e*d mod x ≡ 1也就相當於
e*d ≡ k*x + 1 這時候我們再把上面的歐拉定理推導公式拿出來
m^(kφ(n)+1) % n ≡ m
當 x = φ(n)的時候 也就是 m^e*d % n ≡ m
稍微理一下:
m < n , x = φ(n),e 與 x互質 d是e對於x的模反元素 的時候 等式成立
到這裏非對稱加密已經有了雛形,m經過一系列運算後還能得到m, 但是如何拆分這個公式呢
迪菲赫爾曼密鑰交換
來到最初的取模運算
3 ^13mod17 = 6
6^ 15 mod17 = 10 = 3 ^ 13 ^15 mod 17
接下來做一下等式對應 m = 3 n = 17 e = 13 d = 15中間值 c = 6
於是 m^e mod n = c
c ^ d mod n = 10 = m^e^d mod n
也就是c ^d mod n = m^e^d mod n
再結合我們的推導公式m^e*d % n ≡ m
於是乎 m^e mod n = c 加密
c ^d mod n = m 解密
公鑰 n 和 e
私鑰 n 和 d
銘文m, 密文 c
說明:
1、n會非常大,長度一般爲1024個二進制位。(目前人類已經分解的最大整數,232個十進制位,768個二進制位)
2、由於需要求出φ(n),所以根據歐函數特點,最簡單的方式n 由兩個質數相乘得到: 質數:p1、p2
Φ(n) = (p1 -1) * (p2 - 1)
3、最終由φ(n)得到e 和 d 。
總共生成6個數字:p1、p2、n、φ(n)、e、d
關於RSA的安全:
除了公鑰用到了n和e 其餘的4個數字是不公開的。
目前破解RSA得到d的方式如下:
1、要想求出私鑰 d 。由於e*d = φ(n)*k + 1。要知道e和φ(n);
2、e是知道的,但是要得到 φ(n),必須知道p1 和 p2。
3、由於 n=p1*p2。只有將n因數分解才能算出。
大概原理就是這樣,mac上有自帶的OpenSSL 同學們可以根據指令自己耍一下