Coppersmith定理
原理
用到格基规约和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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步