RSA演算法梳理
阿新 • • 發佈:2021-01-09
一、概念
①互質
-
如果兩個正整數,除了1以外,沒有其他公因子,我們就稱這兩個數是互質關係(coprime)。 比如,3和8沒有公因子,所以它們是互質關係。這說明,不是質數也可以構成互質關係。
②尤拉函式 φ
-
請思考以下問題:
任意給定正整數n,請問在小於等於n的正整數之中,有多少個與n構成互質關係? 計算這個值的方式叫做尤拉函式,使用:Φ(n)表示 如:計算8的尤拉函式,和8互質的 1、2、3、4、5、6、7、8 φ(8) = 4
-
尤拉函式特點
一、當n是質數的時候,φ(n)=n-1。 二、如果n可以分解成兩個互質的整數之積,如n=A*B則: φ(A*B)=φ(A)* φ(B)
根據以上兩點得到:
如果N是兩個質數P1 和 P2的乘積則 φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1)
③尤拉定理
-
如果兩個正整數a和n互質,則n的尤拉函式 φ(n) 可以讓下面的等式成立: M^φ(N)% N ≡ 1
-
特殊情況:費馬小定理 如果兩個正整數m和n互質,而且n為質數!那麼φ(n)結果就是n-1。 M^(N-1)% N ≡ 1
-
④模反元素
-
如果e、x互質則可以找到正整數d使得 e*d%x = 1 d為e對於x的模反元素,可得公式: e*d=kx+1
二、公式推導
-
由尤拉定理M^φ(N) % N ≡ 1
1^k≡1 可得M ^(k*φ(N))%n ≡ 1
-
假設M<N 1*M ≡ M 可得
M^(k*φ(N)+1)% N ≡ M
e * d = k * φ(N)+1
M^(e*d)% N = M -
前提 ①e、d互質 ②d為e對應φ(N)的模反元素 ③M<N
-
可以將M^(e*d)% N = M
=>
(M^e )^d % N = M
=>
M^e%N = c
c^d%N=M
三、RSA
公式
加密 M^e%N = c
解密 c^d%N=M
M明文 c密文 e、N公鑰 d、N 祕鑰
說明:
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
安全:
除了公鑰用到了n和e 其餘的4個數字是不公開的。
目前破解RSA得到d的方式如下:
1、要想求出私鑰 d 。由於e*d = φ(n)*k + 1。要知道e和φ(n);
2、e是知道的,但是要得到 φ(n),必須知道p1 和 p2。
3、由於 n=p1*p2。只有將n因數分解才能算出。
特點
1.相對來說比較安全(非對稱加密,私鑰不用傳遞)
2.效率不高
3.加密資料小