一、RSA攻擊大全
1. 模數分解
- Small q:模數N有小素數因子;
- fermat:模數N的因子p與q非常接近;
- 模不互素:給出多組公鑰,但是其中的模數共用了素因子;
2. 針對指數進行攻擊
- 小公鑰指數攻擊:指數很小;
- 低加密指數廣播攻擊:相同的消息發送給多個接收者,且加密指數較低;
3. 針對私鑰進行攻擊
- 維納攻擊:指數很大(理論上\(d<N^{0.25}\)此攻擊起作用);
- Boneh-Durfee攻擊:同樣針對指數很大的情形,理論上\(d<N^{0.29}\)此攻擊起作用;
4. Coppersmith相關攻擊
Coppersmith算法用於求解模\(N\)多項式\(F(X)\)(\(X\)為單變量、二元變量甚至多元變量)所有小整數根(\(\big\|X\big\|<cN^{\beta^{2}/\delta}\),其中\(\delta\)為多項式\(F\)的次數,假設\(N\)具有不小於\(N^{\beta}\)的因子)
-
明文高位泄露:明文的二進制位表示為\(m_{b} \cdots m_{t+1}m_{t} \cdots m_{1}\),其高位\(m_{b} \cdots m_{t+1}\)泄露,記\(m'=m_{b} \cdots m_{t+1}0 \cdots 0\),則\(m'\)已知,但\(\Delta m=m_{t} \cdots m_{1}\)未知;由\(c \equiv m^{e}\ \textrm{mod}\ N\),則\(\Delta m\)是模多項式\(F(X)=(m'+X)^{e}\ \textrm{mod}\ N\)的小整數根。接下來使用Coppersmith算法求解。
-
因子低位泄露:因子的二進制位表示為\(p_{b} \cdots p_{t+1}p_{t} \cdots p_{1}\),其高位\(p_{b} \cdots p_{t+1}\)泄露,記\(p'=p_{b} \cdots p_{t+1}0 \cdots 0\),則\(p'\)已知,但\(\Delta p=p_{t} \cdots p_{1}\)未知;由\(p \cdot q=N\),則\(\Delta p\)是模多項式\(F(X)=(p'+X)\ \textrm{mod}\ N\)的小整數根。接下來使用Coppersmith算法求解。
-
明文低位泄露:明文的二進制位表示為\(m_{b} \cdots m_{t+1}m_{t} \cdots m_{1}\),其低位\(m_{t} \cdots m_{1}\)泄露,記\(m'=m_{t} \cdots m_{1}\),則\(m'\)已知,但\(\Delta m=m_{b} \cdots m_{t+1}\)未知;由\(c \equiv m^{e}\ \textrm{mod}\ N\),則\(\Delta m\)是模多項式\(F(X)=(m'+2^{t}X)^{e}\ \textrm{mod}\ N\)的小整數根。接下來使用Coppersmith算法求解。
-
因子低位泄露:因子的二進制位表示為\(p_{b} \cdots p_{t+1}p_{t} \cdots p_{1}\),其低位\(p_{t} \cdots p_{1}\)泄露,記\(p'=p_{t} \cdots p_{1}\),則\(p'\)已知,但\(\Delta p=p_{b} \cdots p_{t+1}\)未知;由\(p \cdot q=N\),則\(\Delta p\)是模多項式\(F(X)=(p'+2^{t}X)\ \textrm{mod}\ N\)的小整數根。接下來使用Coppersmith算法求解。
二、攻擊工具
1. RsaCtfTool
GitHub鏈接:RsaCtfTool
在Ubuntu18.04下的安裝RsaCtfTool(進入RsaCtfTool目錄下):
apt install -y libgmp-dev
apt install -y libmpfr-dev
apt install -y libmpc-dev
pip3 install gmpy2 -i https://pypi.douban.com/simple
pip3 install -r requirements.txt -i https://pypi.douban.com/simple
2. yafu
我認為最強大的分解因子的工具。