公鑰密碼RSA算法記錄
阿新 • • 發佈:2018-12-07
比特 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算法記錄