RSA攻擊總結

2022-09-20 15:15:09 字數 2099 閱讀 1714

相關概念

什麼是dp

\(dp ~ = ~ d ~ \mod ~(p-1)\)

推導過程

\(dp \equiv d \mod (p-1)\)

\(⇒dp \times e \equiv d \times e \mod(p-1)\)

\(⇒d \times e = k \times (p-1) +dp \times e\)

\(d \times e \equiv 1 \mod(p-1) \times(q-1)\)

\(⇒k\times(p-1) + dp \times e \equiv 1 \mod (p-1)\times(q-1)\)

\(⇒k \times (p-1) +dp \times e = k_1 \times (p-1) \times (q-1) + 1\)

\(⇒dp \times e = (k_1\times q + k_1 - k) \times (p-1) + 1\)

設:$x = (k_1\times q + k_1 - k) $

\(⇒dp \times e = x \times (p-1) +1\)

\(dp < (p-1)\)

\(⇒e>x\)

\(x \in [0,e]\)

結論或公式

\(\exists x \in [0,e],使得dp \times e = x \times (p-1) +1\)

解題過程

遍歷0~e種可能,找出乙個\(x\)滿足下列方程

$(dp \times e - 1) \mod x = 0 $

轉到已知\(p,q\)的rsa解密

實現**

#dp或dq洩露

from crypto.util.number import long_to_bytes

from gmpy2 import invert

from factordb.factordb import factordb

def rsa_dp_reveal(dp,e,n,c):

for x in range(2,e):

if (dp*e-1)%x==0:

p = (dp*e-1)//x + 1

if n%p == 0:

q = n // p

break

phi = (p-1)*(q-1)

d = invert(e,phi)

ci = long_to_bytes(pow(c,d,n))

return ci

實現**
from crypto.util.number import long_to_bytes

from gmpy2 import invert

from egcd import egcd

#rsa共模攻擊

def rsa_mo(n,e1,c1,e2,c2):

'''#rsa共模攻擊'''

s,s1,s2 = egcd(e1,e2)

if s1<0:

s1,s2 = s2,s1

e1,e2 = e2,e1

c1,c2 = c2,c1

if s!=1:

return '不能進行共模攻擊'

c2 = invert(c2,n)

m = (pow(c1,s1,n)*pow(c2,-s2,n))%n

return long_to_bytes(m)

條件

明文之間存在簡單的線性關係,且係數較小時

滿足\(f(m_2) = a \times m_2 + b\)

推導\(m_1^e = c_1( \mod n)\)

$\rightarrow g_1(m_2) \equiv f(m_2) - c_1 (\mod n) $

\(m_2^e = c_2(\mod n)\)

\(\rightarrow g_2(m_2) \equiv m_2^e - c_2(\mod n)\)

\(\rightarrow m_2 是 g(x) = f(x)^e - c_1 \in \mathbb_n[x] 的根\)

結論或公式

\[m_2 = \dfrac \dfrac

\]·····

持續更新中

RSA 時序攻擊

rsa的破解從理論上來講是大數質數分解,可是就是有一些人另闢蹊徑,根據你解密的時間長短就能破解你的rsa私鑰。舉乙個不恰當但是比較容易理解的例子 密文 0101 私鑰0110 明文0100 問題的關鍵來了,進行 運算時如果有乙個0,那麼運算的時間為1ms,如果兩個都是1,運算的時間是10ms 只是個...

RSA攻擊之wiener攻擊

詳細資訊請參閱維基百科 連分數 在數學中,連分數或繁分數即如下表示式 這裡的a0是某個整數,而所有其他的數an都是正整數,可依樣定義出更長的表示式。下面通過實際的例子來學習如何將乙個實數轉換為連分數 eg 找出3.245的連分數 結合rsa演算法,我們理解上面的定理 根據上面的定理,我們根據給定的實...

RSA演算法總結

1 選擇一對不同的 足夠大的素數p,q。2 計算n pq。3 計算f n p 1 q 1 4 找乙個與f n 互質的數e,且1安全性方面需注意引數的選取 建議參考 應用密碼學 2017版 p156 p157 1 不同的使用者不能用相同的模數 n,即乙個模數只能乙個人用 2 p 和 q 的差值要大,一...