buu [NPUCTF2020]共 模 攻 击 1

news/2025/1/1 14:20:25/

题目描述:

task:

hint: 

题目分析:

  •  先看hint(提示)这一部分,标题已经提示了是共模攻击,看到有e1,e2,c1,c2,n也可以想到是共模攻击,之后得到c,继续往下做

c = m^{256} mod p

  • 此时有点不知如何下手,e = 256 = 2^{8}

并且

gcd(e // 4,p-1) = 4

gcd(e // 4 // 4,p-1) = 4

gcd(e // 4 // 4 // 4,p-1) = 4

啊这......(这怎么去做)

  • 看到别人写的,用sympy库中的nthroot_mod(c,e,n)函数可以做出来 ,目前第一次用此函数,还没什么经验,也不好多分享什么,大家多摸索吧
  •  hint部分的解题代码
p = 107316975771284342108362954945096489708900302633734520943905283655283318535709
n = 6807492006219935335233722232024809784434293293172317282814978688931711423939629682224374870233587969960713638310068784415474535033780772766171320461281579
e1 = 2303413961
c1 = 1754421169036191391717309256938035960912941109206872374826444526733030696056821731708193270151759843780894750696642659795452787547355043345348714129217723
e2 = 2622163991
c2 = 1613454015951555289711148366977297613624544025937559371784736059448454437652633847111272619248126613500028992813732842041018588707201458398726700828844249
import gmpy2
from Crypto.Util.number import *
from sympy import *
s,s1,s2 = gmpy2.gcdext(e1,e2)
c = pow(c1,s1,n) * pow(c2,s2,n)%n
e = 256
m = nthroot_mod(c,e,p)
print(long_to_bytes(m))
# b'm.bit_length() < 400'

知道了m的比特位小于400位

  • 接下来看task,显然,根据提示,可以尝试使用coppersmith定理

 '''构造关于m的同余式,已知的模数是n,所以要尽量让构造出的m的等式是n的倍数(也就是模n等于0)当然也可以是余数不等于0的情况但是一定要已知余数是多少(这里似乎没有什么数学定理可以应用,大概率就是直接构造一个等式等于n的倍数即可)'''

  •  代码如下:
# sagefrom Crypto.Util.number import *
n = 128205304743751985889679351195836799434324346996129753896234917982647254577214018524580290192396070591032007818847697193260130051396080104704981594190602854241936777324431673564677900773992273463534717009587530152480725448774018550562603894883079711995434332008363470321069097619786793617099517770260029108149
c1 = 96860654235275202217368130195089839608037558388884522737500611121271571335123981588807994043800468529002147570655597610639680977780779494880330669466389788497046710319213376228391138021976388925171307760030058456934898771589435836261317283743951614505136840364638706914424433566782044926111639955612412134198
c2 = 9566853166416448316408476072940703716510748416699965603380497338943730666656667456274146023583837768495637484138572090891246105018219222267465595710692705776272469703739932909158740030049375350999465338363044226512016686534246611049299981674236577960786526527933966681954486377462298197949323271904405241585
sum = c1 + c2
mult = c1 * c2
PR.<x> = PolynomialRing(Zmod(n))
# R.<x> = PolynomialRing(Zmod(n),implementation = 'NTL')
# R.<x> = Zmod(n)[]
# 上面三个都行
f = x ^ 2 + mult - sum * x
flag = f.small_roots(X = 2 ^ 400)[0] # 2 ^ 400是根的上界
print(flag)
# print(long_to_bytes(flag)
flag = 4242839043019782000788118887372132807371568279472499477998758466224002905442227156537788110520335652385855
print(long_to_bytes(flag))

收获与体会:

  • 以后遇到e还算小的可以尝试用sympy.nthroot_mod(),感觉这东西还挺🐂的,哈哈哈
m = nthroot_mod(c,256,p,all_roots=True) # 所有根,列表中
print (m)
for i in m:print (i)hint = long_to_bytes(i)print (hint)

  •  以上copper法值得收藏(求m,m位数已知,并且c1 = m^p mod n, c2 = m^q mod n)

以下三个可以互换使用,目前还没看到局限(可能是做题少了吧)

PR.<x> = PolynomialRing(Zmod(n))
R.<x> = PolynomialRing(Zmod(n),implementation = 'NTL')
R.<x> = Zmod(n)[]


http://www.ppmy.cn/news/93424.html

相关文章

LCD 显示

概述 LCD显示控制模块接收 MCU 送过来的数据&#xff0c;按一定规律储存在显示 RAM 中&#xff0c;并根据显示 RAM 中的数据驱动 LCD 显示屏来实现期望的字符显示功能。 主要特点&#xff1a; ⚫ 最大支持 840 、 642 、 444 的显示段数 ⚫ 1/3bias 、 1/4bia s ⚫ 16 级灰度可…

全面理解链表数据结构:各种节点操作、做题技巧,易错点分析与题目清单(C++代码示例,不断更新)

什么是链表 链表是一种线性数据结构&#xff0c;它包含的元素并不是物理上连续的&#xff0c;而是通过指针进行连接。链表中的每个元素通常由一个节点表示&#xff0c;每个节点包含一个数据元素和一个或多个链接&#xff08;指针&#xff09;。 链表的主要类型包括&#xff1a;…

js混淆加密之jsjiami.v6

混淆加密是一种常见的技术&#xff0c;用于隐藏代码的意图和实现细节&#xff0c;增加代码的复杂性&#xff0c;以 ers ers 对代码进行保护&#xff0c; ers ers 并 ers ers 分析和理解代码。以下是一些通用的步骤&#xff0c;用于分析和解密混淆的 JavaScript 代码&#xff1a…

【学习日记2023.5.23】 之 店铺营业状态模块完善

文章目录 5. 店铺营业状态设置5.1 需求分析和设计产品原型 5.2 代码开发5.2.1 设置营业状态5.2.2 管理端查询营业状态5.2.3 用户端查询营业状态 5.3 功能测试5.3.1 接口文档测试5.3.2 接口分组展示5.3.3 前后端联调测试 5.4 代码提交5.5 注意事项 5. 店铺营业状态设置 5.1 需求…

前k个高频单词

&#x1f495;**不要害怕前方的未知和困难&#xff0c;因为它们都是你成长的机会。不要过于在意别人的眼光和评价&#xff0c;因为唯有你的内心才知道自己真正的价值。珍惜当下&#xff0c;享受生活的点滴&#xff0c;让自己变得更加坚强、自信、成熟。**&#x1f495; &#x…

由浅入深Dubbo核心源码剖析高可用集群

目录 1 服务集群的概述1.1 概述1.2 调用过程1.3 组件介绍 2 集群容错机制2.1 内置集群容错策略2.2 集群容错调优2.3 源码分析 3 集群负载均衡策略3.1 负载均衡的主要作用3.2 内置的负载均衡策略3.3 负载均衡总结 4 服务治理4.1 服务治理的概述4.2 执行过程4.3 服务治理功能 1 服…

2023年电工杯报名队伍破万!!!!

截止2023年5月24日凌晨0:56分&#xff0c;刚刚使用账号进行电工杯队伍注册&#xff0c;电工杯报名队伍已经达到10600只队伍&#xff0c;作为本年度上半学年&#xff0c;最后一场大型认可度较高的比赛&#xff0c;本次比赛的时间设置、报名费免费等优势使得&#xff0c;这场比赛…

深入解读Kafka:如何进行运维与监控,实现性能调优和故障排除

Kafka运维与监控 Kafka运维与监控一、简介二、运维1.安装和部署安装部署 2.优化参数配置配置文件高级配置分区和副本设置分区数量设置副本数量设置 网络参数调优传输机制设置连接数和缓冲区大小设置 消息压缩和传输设置消息压缩设置消息传输设置 磁盘设置和文件系统分区磁盘容量…