從凱撒大帝時代到70年代,密碼學的發展非常緩慢,因為設計者基本都是靠經驗。沒有應用數學原理。今天的密碼學是以數學為基礎的。
20世紀70年代產生的壹種加密算法。它的加密方法比較特殊,需要兩個密鑰:publickey和privatekey。公鑰加密,私鑰解密;私鑰加密,公鑰解密。這個加密算法就是偉大的RSA。
要實現加密和解密,要用壹種易加密難破解的數學運算。此時使用Mod操作(時鐘算法)。
如果以質數為模數(17),找壹個比這個模數小3的數,那麽有如下算法:
3的x次方範數是17,結果總是在1和16之間,其中3是17的原根。很難推導出原始值,因為它需要壹個實驗,並且不唯壹知道結果。當這裏的模量變大時,很難逆轉裂縫。這就是離散對數問題。
任何給定的正整數n,in
計算這個值的方式叫做歐拉函數,用φ(n)表示。
根據以上兩點,如果n是兩個素數P1和P2的乘積,那麽:
φ(N)=φ(p 1)*φ(P2)=(p 1-1)*(P2-1)
如果兩個正整數m和n互質,那麽m的φ(n)次方減1可以被n整除..
歐拉定理的特例:如果兩個正整數M和N互質,N是質數!那麽φ(n)的結果就是n-1。
歐拉定律m φ(n)% n ≡ 1 (m和n互質)
由於1 k% n ≡ 1,我們可以得到:
因為1*m ≡ m,我們可以得到:
驗證:
註意:在轉換過程中,m必須小於n才有效。大於這個數相當於多跑了壹圈。
如果兩個正整數e和x互質,那麽必須找到整數d,這樣ed-1才能被x整除。
那麽:d是e到x的模逆元。
可以得到下面的公式:
假設商是k,可以得到下面的公式:
當φ(n)為x時,則:
驗證:m: 4,n: 15,φ(n): 8。
假設e: 3,d?
3d -1 = 8k表示d = (8k+1)/3 k = 4表示D = 11,k=7表示d = 19。
整個推導過程如下:
解決密鑰傳輸的保密性問題
原則:
M e*d% n ≡ m被Diffie Herman密鑰交換拆分。
Total * * *生成6個數:p1,p2,n,φ(n),e,d。
確認
M :3、12,N: 3 * 5 = 15,φ(n):8,
假設E: 3,D: 11,通過模逆元的計算可以得到19。
除了公鑰用n和e,其他四個數都不是公開的。
目前破解RSA得到D的途徑如下:
1,求私鑰d .因為e*d = φ(n)*k+1。知道e和φ(n);
2,e已知,但要得到φ(n),必須知道p1和p2。
3.因為n = p1*p2。只有分解n因子才能算出來。
這時候就很難破解了。
因為RSA的m小於n,所以每次加密的數據都很小,需要分段加密,效率很低。用於加密大數據對稱加密的密鑰。
由於Mac系統內置了OpenSSL(開源加密庫),我們可以直接在終端上使用命令進行RSA操作。OpenSSL中RSA算法常用的主要指令有三條:
生成密鑰長度為1024bit的RSA私鑰。
e:65337(公共指數)
用公鑰加密數據,用私鑰解密數據。
加密:
解密:
完整命令:
Enc.txt文件128字節,dec.txt文件20字節。
用公鑰加密數據,用私鑰解密數據。
這時候就變成了簽名和驗證。
簽名:
驗證:
整個文件目錄如下: