Coppersmith定理

news/2024/10/9 16:48:43/文章来源:https://www.cnblogs.com/snoozy/p/18454604

原理

用到格基规约和LLL算法。。。

啊?你问那是什么?去搜吧,反正我没看懂。

实现

有一个 e 阶的多项式 f, 那么可以:

  • 在模 n 意义下,快速求出 n^{1/e} 以内的根
  • 给定 β,快速求出模某个 b 意义下较小的根,其中
    b≥​​n^{\beta },是 n 的因数。

一般采用sage下的small_roots(X=2^kbits,beta=β)。

应用

coppersmith定理应用最多的是高位攻击一类,通过该定理求得剩余二进制位。

限制性:coppersmith定理能求得的位数有限。

一般来说,n=p*q,设p,q均是1024位的大素数,则n的大小为2047bits或2048bits,而n^{0.5}就是大概1024bits的数,与p,q接近,但是不一定满足
p,q≥n^{0.5},所以β一般取0.4,根据大佬们的证明得出,在上述条件下,只要未知二进制位数小于492均可应用coppersmith定理求解。

满足上述要求的情况下,所需要的small_roots()函数中的参数X代表所需求解根的上限,即假设未知的位数是kbits,参数X导入的值就是2^kbits。

 

例题 [BaseCTF 2024]铜匠

附件

from Crypto.Util.number import getPrime, bytes_to_long
#from secret import flag
flag=b'XXXX'p = getPrime(1024)
q = getPrime(1024)
n = p * q
e = 65537
hint1 = p >> 721
hint2 = q % (2 ** 266)
ct = pow(bytes_to_long(flag), e, n)
print(hint1)
print(hint2)
print(n)
print(ct)
'''
hint1 = 14439249591349619691972392177790365247490839237199085979433418493254022567815148979672690178
hint2 = 90063199151369157959005663017593053931871580139169245885113098598755909124764417
n = 18347545778876678838092757800261556931131930866012101566000425608407193858675622059415995283684230959320874387944052648148677918542763633503231962873204645415818139345588988936580526094727943067102768943117592654029397879665312089518191052154267343886226820785206334238961064175118262578895847281575656290248049404047727756356910896332939145136942219317065063060070725033146788186604738271846183709127655298440696824683099637827282095133642324657860714680107691622056420045091586609974536644773286992447027164350612852922016376888380895187804771279035652496676089183636450028327097084911908336202253562671798012457461
ct = 15659576879410368237140555530527974801613150473447768911067611094143466009251385693099110691602954207905029692682380253595062935017486879899242785756448973466690818942065250284891341066578689696180061755610538867770441139827574063212967027249650509215685566103350688284041405586915563454117672061141919712416360596137520514412607512596079964611672166435592936417138352662031529414118312166411150736015788925026636845744110093161894267707446937939130745326244186579516665160036229715964182962542836836457885170975474737620430886449029488829662146456489724775166105816909257516908496172172266375617868819982791477888289
'''

​思路

给了p的高位和q的低位,用逆元算出p的低位,得出p一共已知的位数,中间未知的455位考虑用coppersmith解,如果直接解解不出来,可以尝试抬高位数进行爆破,最后找到flag。幸运的是,这道题可以直接解出来。

exp​​

#sage
hint1 = 14439249591349619691972392177790365247490839237199085979433418493254022567815148979672690178
hint2 = 90063199151369157959005663017593053931871580139169245885113098598755909124764417
n = 18347545778876678838092757800261556931131930866012101566000425608407193858675622059415995283684230959320874387944052648148677918542763633503231962873204645415818139345588988936580526094727943067102768943117592654029397879665312089518191052154267343886226820785206334238961064175118262578895847281575656290248049404047727756356910896332939145136942219317065063060070725033146788186604738271846183709127655298440696824683099637827282095133642324657860714680107691622056420045091586609974536644773286992447027164350612852922016376888380895187804771279035652496676089183636450028327097084911908336202253562671798012457461
ct = 15659576879410368237140555530527974801613150473447768911067611094143466009251385693099110691602954207905029692682380253595062935017486879899242785756448973466690818942065250284891341066578689696180061755610538867770441139827574063212967027249650509215685566103350688284041405586915563454117672061141919712416360596137520514412607512596079964611672166435592936417138352662031529414118312166411150736015788925026636845744110093161894267707446937939130745326244186579516665160036229715964182962542836836457885170975474737620430886449029488829662146456489724775166105816909257516908496172172266375617868819982791477888289
e = 65537p_high = hint1<<721
q_low = hint2
mod = 1<<266
p_low = n*inverse_mod(q_low,mod) % mod
PR.<x> = PolynomialRing(Zmod(n))f = p_high + x*mod + p_low
pp = f.monic().small_roots(X=2^455,beta=0.4)
if pp:p=(pp[0]*mod)+p_high+p_lowfrom Crypto.Util.number import *
from gmpy2 import *q = n//p
phi = (p-1)*(q-1)
d = inverse(e, phi)
m = long_to_bytes(pow(ct, d, n))
print(m)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810615.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

威尔逊定理

初识威尔逊定理 什么是威尔逊定理,即对于一个质数p来说,有 (p-1)! ≡ -1 (mod p) 恒成立,其逆定理也成立,即对于一个数p来说若满足上式,则p一定是素数。 于是通过这个性质我们能够得到素数分布的函数: f(n) = sin(π*((n-1)!+1)/n) 当函数值为0时,对应n就是一个素数,但…

fiddler抓模拟器的手机包

1、fiddler中设置 a、设置抓取https接口 b.设置端口和允许所有设备连接 下载2、下载模拟器并打开模拟器 3、开始模拟器是平板模式,改成手机竖屏模式 改成900*1600 4、在window中的运行中输入:inetcpl.cpl b、点击连接 输入代理地址:127.0.0.1 端口号:8888 模拟器中的设置…

浴火之路完整无修百度/云网盘下载[HD1080高清]在线免费无删减下载链接

电影,历来是承载故事的一种重要媒介,但《浴火之路》这部影片,却不仅仅是一个故事,它是一次人性的深刻剖析,是对爱与痛苦的共鸣,在这个瞬息万变的时代,很多人可能会问:看电影究竟是为了什么?为了娱乐、为了消遣,还是寻找那久违的感动?当你坐在影院那舒适的座椅上,当…

prometheus学习笔记之黑盒探针blackbox_exporter

项目地址:https://github.com/prometheus/blackbox_exporter 一、安装blackbox_exporterwget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz tar xf blackbox_exporter-0.25.0.linux-amd64.tar.gz…

uniapp-开发APP的坑点,文件上传,选择方面

1.文件上传 uni.uploadFile 在H5端可以上传成功,在APP无法上传成功, 1.先检查url:必须是全路径,之前是 url: /api/test 所以上传不上去,2,manifest配置权限<uses-feature android:name="android.hardware.camera"/> <uses-feature android:name="an…

iPhone 16 Pro上百款充电头充电功率测试

一、苹果原装充电器测试截图: 以下所有测试均为“充电头网实验室”评测,且测试手机为最新的iPhone 16 Pro手机,充电线均为iPhone 16 Pro 最新的原装编织充电线,所以只有充电头是不同的,排除了其他因素的干扰。视频网站来自于B站: https://www.bilibili.com/video/BV1XixL…

如何用AI快速开发一个小程序?

从idea到上线,只花了2个小时,整个流程中,除了手动调整样式的数值,没有写一行代码,全部由AI能力,结合prompt帮助我完成。ChatGPT这个轰动全球的产品自问世以来,已经过了将近2年的时间,各行各业的精英们如火如荼的将AI能力应用到自己生产的产品中来。为分担人类的部分工作…

装酷就来这,秒变黑客精英的6个网站

有网友问:有没有装黑客,炫酷的网站? 回答:当然有。当黑客,门槛太高;装黑客,都是1秒钟的事情。下面介绍几个: 第一个:hackertyper 网址:https://hackertyper.net/ 随意输入文字,屏幕出现整齐的代码 这个是装酷首选,速度快,网页干净! 第二个:GEEKtyper 网址: ht…

webapi发布---问题解决

一. 127.0.0.1是回路地址,来检验本机TCP/IP协议栈,实际使用过程中服务端不在本机,是外部地址,要用IP地址测试。 外部用户采用IP+端口号访问,如下图浏览器访问不了,400错误。解决方案: 因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改…

virtualbox虚拟机的安装及xshell的连接

1.新建 填入虚拟机名字 虚拟机光盘为外部下载:https://openanolis.cn 点击下载点击第二个x86_64其他默认 2.设置 设置网络网卡 网卡1 网卡2 3.启动安装 一律默认 4.连接网络5.打开终端输入ip addr获取网络ip 6.打开xshell将ip地址输入到主机7.输入虚拟机用户名和密码即连接成功…

virtualbox虚拟机的安装

1.新建 填入虚拟机名字 虚拟机光盘为外部下载:https://openanolis.cn 点击下载点击第二个x86_64其他默认 2.设置 设置网络网卡 网卡1 网卡2 3.启动安装 一律默认 4.连接网络5.打开终端输入ip addr获取网络ip 6.打开xshell将ip地址输入到主机7.输入虚拟机用户名和密码即连接成功…