原理
用到格基規約和LLL演算法。。。
啊?你問那是什麼?去搜吧,反正我沒看懂。
實現
有一個 e 階的多項式 f, 那麼可以:
- 在模 n 意義下,快速求出 以內的根
- 給定 β,快速求出模某個 b 意義下較小的根,其中
b≥,是 n 的因數。
一般採用sage下的small_roots(X=2^kbits,beta=β)。
應用
coppersmith定理應用最多的是高位攻擊一類,透過該定理求得剩餘二進位制位。
限制性:coppersmith定理能求得的位數有限。
一般來說,n=p*q,設p,q均是1024位的大素數,則n的大小為2047bits或2048bits,而就是大概1024bits的數,與p,q接近,但是不一定滿足
p,q≥,所以β一般取0.4,根據大佬們的證明得出,在上述條件下,只要未知二進位制位數小於492均可應用coppersmith定理求解。
滿足上述要求的情況下,所需要的small_roots()函式中的引數X代表所需求解根的上限,即假設未知的位數是kbits,引數X匯入的值就是2^kbits。
例題 [BaseCTF 2024]銅匠
附件
思路
給了p的高位和q的低位,用逆元算出p的低位,得出p一共已知的位數,中間未知的455位考慮用coppersmith解,如果直接解解不出來,可以嘗試抬高位數進行爆破,最後找到flag。幸運的是,這道題可以直接解出來。
exp