提起RSA
大家一定不陌生,在開發中經常使用,也經常聽同事說道。
前奏
對稱加密
話說很久以前,人們就懂的了加密這個技術。在戰爭時期,間諜就會拿著 密文
和 密匙
來對資訊就行傳遞。
這種簡單的 密文
+ 密匙(key)
就是 對稱加密
加密: 明文 + 密匙
解密: 密文 + 密匙
非對稱加密
由於這種加密方式過於簡單,所以後來引入了數學演算法。
RSA
就是由特殊的數學演算法構成的,也是非對稱加密演算法
。非對稱加密需要兩個金鑰:公鑰(public key)
+ 私鑰(private key)
用公鑰加密,私鑰解密
私鑰加密,公鑰解密
相關數學原理
尤拉定理
如果兩個正整數m和n互質,那麼m的φ(n)次方減去1,可以被n整除。
一下是幾種情況
-
定理0 算術函式f如果滿足對於任意兩個互質的正整數m和n,均有f(mn)=f(m)f(n),就稱f為積性函式(或乘性函式)。
如果對於任意兩個正整數m和n,均有f(mn)=f(m)f(n),就稱為完全積性函式。 -
定理1 對於素數p,ϕ(p)=p−1。
-
定理2 ϕ(pn)=pn−pn−1,因為素數冪pn不互質的只有p的倍數,一共有pn/p=pn−1個。
-
定理3 若m、n互質,ϕ(mn)=ϕ(m)ϕ(n),所以尤拉函式是積性函式。
因為mn互質NN,和m互質的數乘上和n互質的數就會和mn互質。 -
定理4 設n=p1a1p2a2…pkak為正整數n的素數冪分解,那麼ϕ(n)=n(1−1/p1)(1−1/p2)…(1−1/pk)。
由定理2,ϕ(pn)=pn−pn−1=pn (1-1/p),又由定理3,ϕ(n)=p1a1p2a2…pkak(1−1/p1)(1−1/p2)…(1−1/pk)=n(1−1/p1)(1−1/p2)…(1−1/pk)
例如:
ϕ(8) = ϕ(2^3) = 2^3 - 2^(2-1) = 8 - 4 = 4
ϕ(15) = ϕ(3) * ϕ(5) = 2 * 4 = 8
複製程式碼
費馬小定律
尤拉定理的特殊情況:如果兩個正整數m和n互質,而且n為質數!那麼φ(n)結果就是n-1。
模反元素
如果兩個正整數e和x互質,那麼一定可以找到整數d,使得 ed-1 被x整除。
那麼d就是e對於x的“模反元素”
迪菲赫爾曼密匙交換原理
那麼,通過一系列的數學轉換,最終得出了RSA演算法
公鑰:e 和 n
私鑰:d 和 n
明文:m
密文:c
複製程式碼
說明:
- n會非常大,長度一般為1024個二進位制位。(目前人類已經分解的最大整數,232個十進位制位,768個二進位制位)
- 由於需要求出φ(n),所以根據歐函式特點,最簡單的方式n 由兩個質數相乘得到: 質數:p1、p2
Φ(n) = (p1 -1) * (p2 – 1) - 最終由φ(n)得到e 和 d 。
總共生成6個數字:p1、p2、n、φ(n)、e、d
關於RSA的安全:
除了公鑰用到了n和e 其餘的4個數字是不公開的。
目前破解RSA得到d的方式如下:
- 要想求出私鑰 d 。由於e*d = φ(n)*k + 1。要知道e和φ(n);
- e是知道的,但是要得到 φ(n),必須知道p1 和 p2。
- 由於 n=p1*p2。只有將n因數分解才能算出。
那麼RSA有優點和弊端是什麼了?
優點
- 相對安全
缺點
- 速度慢,耗時(因為,起內部原理是一系列的數學計算)
- 加密資料量小