1. 程式人生 > >公鑰密碼RSA算法記錄

公鑰密碼RSA算法記錄

比特 sat net win 成功 計算 密鑰 cef 介紹

介紹: RSA算法是1978年由 R.Rivest、A.Shamir、L.Adleman提出的一種用數論構造的、也是迄今為止理論上最為成熟、完善的公鑰密碼體,該體制已得到廣泛的應用。

算法描述:

1. 密鑰的產生

(1) 選兩個保密的兩個大素數 p 和 q 。
(2) 計算 n=p*q,φ(n) = (p-1)*(q-1),其中,φ(n)是n的歐拉函數值 (即滿足和n互素的在[1,n)區間的數的個數,定理[ φ(m*n) = φ(m)*φ(n),僅當m,n互素時]);
(3) 選一個整數 e ,滿足 1 < e < φ(n),且  gcd(φ(n),e) = 1;
(4) 計算 d,滿足 d*e ≡ 1 mod φ(n),即 d 是 e 在摸φ(n) 下的乘法逆元,因e與φ(n)互素,由模運算可知,他的乘法逆元一定存在[貝祖等式:s*a + t*b = (a,b),此時(e,φ(n))=1,因此必然存在逆元];
(5) 以 {e,n} 為公鑰,以 {d,n} 為私鑰。

2.加密

?? 加密時首先將明文比特串分組,使得每個分組對應的十進制數小於n,即分組長度小於log2(n)(目的應該在於解密時答案的唯一性,即模余值)。然後對每個明文分組m,做加密運算,即
?? ?? ?? c ≡ m^e mod(n)

4. 解密

??對密文分組的解密運算為
?? ?? ?? m ≡ c^d mod(n)

其中的原理易於理解,利用歐拉定理 $a^{φ(m)} ≡ 1 (mod m)$ 以及 $d*e ≡ 1 mod φ(n)$可以得出結論。

攻擊:
??對 n 進行暴力分解出 p 和 q,從而輕易的到密鑰 e;本地的工具有windows上的RSATool2v17,可分解256 比特的n,yafu CTF比賽中遇到難以分解的 n 可以試一下,rsa-wiener-attack 用於當e過大或過小時;而目前1024~2048 比特之間的RSA是安全的;
??共模攻擊、兩大數 n1 和 n2 用相同大素數公約數和低指數攻擊;
??重復加密攻擊:若 m^{e^{t+1}} ≡ c(mod n),即 (m^{e^t})^e ≡ c(modn),則有 m^{e^t} ≡ m(mod n) ,即 c^{e^{t-1}} ≡ m(mod n) ;這種攻擊只有在t較小的時候才是可行的,和p

q的取值有關。具體如下:
???? c^e≡(m^e)^e≡m^{e^2}(mod n)
???? c^{e^2}≡(m^e)^{e^2}≡m^{e^3}(mod n)
????...
???? c^{e^{t-1}}≡(m^e)^{e^{t-1}}≡m^{e^t}(mod n)
???? c^{e^t}≡(m^e)^{e^t}≡m^{e^{t+1}}(mod n)
重復對以e密文c進行加密,並且與 c 進行比對,若一致,得到t值,則攻擊成功。



之前看過的一篇關於ctf中對於rsa破解的技巧分享,感覺很受用 【技術分享】CTF中RSA的常見攻擊方法

公鑰密碼RSA算法記錄