针对N=p^rq分解之初探

news/2025/1/26 17:10:34/文章来源:https://www.cnblogs.com/ink599/p/18691983

针对N=p^r*q分解之初探

论文地址:https://eprint.iacr.org/2015/399.pdf

题目:https://www.nssctf.cn/problem/2016

from Crypto.Util.number import bytes_to_long, getPrime
from secret import msg
from sympy import nextprime
from gmpy2 import invert
from hashlib import md5flag = 'd3ctf{'+md5(msg).hexdigest()+'}'
p = getPrime(256)
q = getPrime(256)
assert p > q
n = p * q
e = 0x10001
m = bytes_to_long(msg)
c = pow(m, e, n)N = pow(p, 7) * q
phi = pow(p, 6) * (p - 1) * (q - 1)
d1 = getPrime(2000)
d2 = nextprime(d1 + getPrime(1000))
e1 = invert(d1, phi)
e2 = invert(d2, phi)print(f'c = {c}')
print(f'N = {N}')
print(f'e1 = {e1}')
print(f'e2 = {e2}')
'''
c = 2420624631315473673388732074340410215657378096737020976722603529598864338532404224879219059105950005655100728361198499550862405660043591919681568611707967
N = 1476751427633071977599571983301151063258376731102955975364111147037204614220376883752032253407881568290520059515340434632858734689439268479399482315506043425541162646523388437842149125178447800616137044219916586942207838674001004007237861470176454543718752182312318068466051713087927370670177514666860822341380494154077020472814706123209865769048722380888175401791873273850281384147394075054950169002165357490796510950852631287689747360436384163758289159710264469722036320819123313773301072777844457895388797742631541101152819089150281489897683508400098693808473542212963868834485233858128220055727804326451310080791
e1 = 425735006018518321920113858371691046233291394270779139216531379266829453665704656868245884309574741300746121946724344532456337490492263690989727904837374279175606623404025598533405400677329916633307585813849635071097268989906426771864410852556381279117588496262787146588414873723983855041415476840445850171457530977221981125006107741100779529209163446405585696682186452013669643507275620439492021019544922913941472624874102604249376990616323884331293660116156782891935217575308895791623826306100692059131945495084654854521834016181452508329430102813663713333608459898915361745215871305547069325129687311358338082029
e2 = 1004512650658647383814190582513307789549094672255033373245432814519573537648997991452158231923692387604945039180687417026069655569594454408690445879849410118502279459189421806132654131287284719070037134752526923855821229397612868419416851456578505341237256609343187666849045678291935806441844686439591365338539029504178066823886051731466788474438373839803448380498800384597878814991008672054436093542513518012957106825842251155935855375353004898840663429274565622024673235081082222394015174831078190299524112112571718817712276118850981261489528540025810396786605197437842655180663611669918785635193552649262904644919
'''

这题的话:N=p^r*q

如果

\[|d_2-d_1|<N^{\frac{r(r-1)}{(r+1)^2}} \]

这题的话,r=7

\[N=p^7*q\\ phi=p^6*(p-1)*(q-1)\\ d_2=d_1+x_0\\ e_1d_1\equiv 1\ mod\ phi\\ e_2d_2\equiv 1\ mod\ phi \]

将后面的两个式子分别乘以e2,e1,并且作差得到

\[e_1e_2(d_1-d_2)+(e_2-e_1)\equiv 0\ mod\ phi\\ e_1e_2x_0+e_2-e_1\equiv 0\ mod\ phi \]

等价于等式

\[g(x)=x-a\equiv 0(mod\ p^{r-1}) \]

其中

\[a=(e_2-e_1)(e_1e_2)^{-1}\ (mod\ N) \]

\[gcd(e_1e_2x-(e_2-e_1),N)=g \]

exp

from Crypto.Util.number import *
from hashlib import md5
from gmpy2 import iroot
e = 65537
c = 2420624631315473673388732074340410215657378096737020976722603529598864338532404224879219059105950005655100728361198499550862405660043591919681568611707967
N = 1476751427633071977599571983301151063258376731102955975364111147037204614220376883752032253407881568290520059515340434632858734689439268479399482315506043425541162646523388437842149125178447800616137044219916586942207838674001004007237861470176454543718752182312318068466051713087927370670177514666860822341380494154077020472814706123209865769048722380888175401791873273850281384147394075054950169002165357490796510950852631287689747360436384163758289159710264469722036320819123313773301072777844457895388797742631541101152819089150281489897683508400098693808473542212963868834485233858128220055727804326451310080791
e1 = 425735006018518321920113858371691046233291394270779139216531379266829453665704656868245884309574741300746121946724344532456337490492263690989727904837374279175606623404025598533405400677329916633307585813849635071097268989906426771864410852556381279117588496262787146588414873723983855041415476840445850171457530977221981125006107741100779529209163446405585696682186452013669643507275620439492021019544922913941472624874102604249376990616323884331293660116156782891935217575308895791623826306100692059131945495084654854521834016181452508329430102813663713333608459898915361745215871305547069325129687311358338082029
e2 = 1004512650658647383814190582513307789549094672255033373245432814519573537648997991452158231923692387604945039180687417026069655569594454408690445879849410118502279459189421806132654131287284719070037134752526923855821229397612868419416851456578505341237256609343187666849045678291935806441844686439591365338539029504178066823886051731466788474438373839803448380498800384597878814991008672054436093542513518012957106825842251155935855375353004898840663429274565622024673235081082222394015174831078190299524112112571718817712276118850981261489528540025810396786605197437842655180663611669918785635193552649262904644919a = (e2-e1)*inverse(e1*e2,N) % N
PR.<x> = PolynomialRing(Zmod(N))
f = x - a
res =  f.small_roots(2^1000,beta = 0.4)
x = res[0]
p_6 = int(gcd(x-a,N))
p = int(iroot(int(p_6),6)[0])
q = N//p**7
print(q)phi = (p-1)*(q-1)
d = inverse(e,phi)
n = p*q
msg = long_to_bytes(int(pow(c,d,n)))
flag = 'd3ctf{'+md5(msg).hexdigest()+'}'
print(flag)

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

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

相关文章

draw.io(免费流程图制作工具) v26.0.7 中文绿色版

draw.io是一款免费的在线图表绘制工具,它提供了强大的功能和易于使用的界面,适用于各种绘图需求。 软件功能 1. 多种类型的图表:draw.io支持创建各种类型的图表,包括流程图、组织结构图、UML图、网络拓扑图、平面图等。2. 自定义图表元素:用户可以根据自己的需求,自定义…

Svelte 最新中文文档翻译(6)—— if、each、key、await 逻辑区块

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

java中的集合ArrayList

创建集合对象有3种形式 1,不需要传递构造参数,直接new就可以,此时底层数组为空数组。 2,构造参数需要传递一个int类型的值, 用于设置底层数组的长度 3,构造参数需要传递一个Collection集合类型的值,用于将集合中的数据放置在当前的集合中。 第1种方式创建数组 package goodSt…

IDM下载器(Internet Download Manager) v6.42.27 直装破解版

Internet Download Manager(IDM)是一款功能强大的下载管理软件,可以帮助用户加快下载速度,管理下载任务,并能够恢复中断或损坏的下载任务。 软件功能 多线程下载:IDM支持多线程下载,可以同时下载多个文件,提高下载速度。定时下载:用户可以设置定时下载任务,方便管理…

Exadata磁盘写入性能差,导致数据库出现大量free buffer waits

1、故障概述 某客户的Exadata上,运行着很多套ORACLE数据库,在每个月的征期内,业务系统经常出现卡顿的现象,主要表现为业务数据写入慢,甚至出现业务写入超时的情况。2、故障分析 2.1 AWR分析 (1).分析数据库的AWR报告。(本报告取自于业务高峰期)从数据库的TOP10等待事件…

zkap_春节赛

题目情况web welcome_to_zkaqctf nodejs题目。给出附件包含后端源码,app listen部分根据本地nodejs监听调式需要,自行添加,用node --inspect app.js命令启动调试监听 // const host = 127.0.0.1; // 主机名或IP地址 // const port = 9999; // const app = fastify(); app.l…

AI 语音独角兽 ElevenLabs C 轮融资估值超 30 亿美元;港科大 Llasa TTS:15 秒声音克隆支持中英双语

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

The Locker Puzzle

The Locker Puzzle 今天刷到一个很有趣的著名概率题,如果有和我一样闲的人可以一起看看。 Philippe Flajolet和Robert Sedgewick在2009年提出了“百囚犯问题(The Locker Puzzle)”。 问题描述 在监狱中有100名囚犯,被编号为1-100号。典狱长决定给囚犯们一次特赦的机会,条件…

DDR3 memory type not supported

问题现象 电脑开机之后无法进入系统,而是显示下图: 解决方法 以为是内存条金手指有灰尘导致无法正常读取,插拔擦拭之后问题依旧。在网上查阅资料之后发现可能是内存条的电压与原装的不同,把加装的第二根内存取下之后,电脑正常。hp技术支持中心:https://h30434.www3.hp.co…

Python数据格式转换神器-提高办公效率

Python办公技巧,数据转换神器,提升工作效率一、引言在工作日常里,数据转换总是让人头疼?别急,今天揭秘一个超级实用的Python技巧,帮你轻松搞定各种数据格式转换,提升工作效率不是梦! 场景1:你手头有一堆CSV格式的(逗号分隔符)数据,其他部门或公司需要你提供其中几列关…

Python Functools模块

代码:#coding=utf-8import functools from functools import cache from functools import cached_property, lru_cache from functools import partial, partialmethod from functools import singledispatch, singledispatchmethod from functools import update_wrapper, w…

F12调试应用:强行查看洛谷个人主页

1.前言 众所周知,洛谷的个人主页常常有些不得了的东西,但是:(洛谷估值第二名%%%)这个系统维护每次都拦着我们。 有一个比较常用的方法就是删掉域名.cn,访问外国服务器(天天炸)。所以必须要有更可靠的方法。 2.F12大法妙 这时候,我们就可以按下F12打开检查。按下左上角…