2023 香山杯 --- Crypto wp

news2025/3/12 23:51:27

文章目录

      • 题目
      • 解题思路
      • 解题代码

题目

import os
import gmpy2
from Crypto.Util.number import *
import random
from secrets import flag
def pad(s,l):
    return s + os.urandom(l - len(s))
def gen():
    g = getPrime(8)
    while True:
        p = g * random.getrandbits(138) + 1
        if isPrime(p):
            break
    while True:
        q = g * random.getrandbits(138) + 1
        if isPrime(q):
            break
    N = p ** 5 * q
    phi = p ** 4 * (p - 1) * (q - 1)
    d = random.getrandbits(256)
    e = inverse(d, phi)
    E = e * g
    hint = gmpy2.gcd(E, phi)
    return N, E, hint



flag = pad(flag,64)
m = bytes_to_long(flag)
n,e,hint = gen()
c = pow(m,e,n)
print(f'hint = {hint}')
print(f'n = {n}')
print(f'e = {e}')
print(f'c = {c}')
# hint = 251
# n = 108960799213330048807537253155955524262938083957673388027650083719597357215238547761557943499634403020900601643719960988288543702833581456488410418793239589934165142850195998163833962875355916819854378922306890883033496525502067124670576471251882548376530637034077
# e = 3359917755894163258174451768521610910491402727660720673898848239095553816126131162471035843306464197912997253011899806560624938869918893182751614520610693643690087988363775343761651198776860913310798127832036941524620284804884136983215497742441302140070096928109039
# c = 72201537621260682675988549650349973570539366370497258107694937619698999052787116039080427209958662949131892284799148484018421298241124372816425123784602508705232247879799611203283114123802597553853842227351228626180079209388772101105198454904371772564490263034162

解题思路

根据题目代码,得到如下信息
p = g ∗ a + 1 , q = g ∗ b + 1 p = g*a+1,q = g*b+1 p=ga+1,q=gb+1
E = e g E = eg E=eg
p h i = p 4 ( p − 1 ) ∗ ( q − 1 ) = p 4 g 2 a b phi = p^4(p-1)*(q-1)=p^4g^2ab phi=p4(p1)(q1)=p4g2ab
又因为 g c d ( E , p h i ) = h i n t = 251 gcd(E,phi) = hint=251 gcd(E,phi)=hint=251
由此得到, g = 251 g = 251 g=251
进而可以得到 e = E g e = \frac{E}{g} e=gE
根据论文
New attacks on RSA with Moduli N = p r q N = p ^rq N=prq
部分
在这里插入图片描述
我们可以将 e d ≡ 1   m o d   p 4 ( p − 1 ) ∗ ( q − 1 ) ed \equiv 1 \space mod \space p^4(p-1)*(q-1) ed1 mod p4(p1)(q1)
转化为
e d ≡ 1   m o d   p 4 ed \equiv 1 \space mod \space p^4 ed1 mod p4
由此可以构建一个多项式环
f = e d − 1   m o d   p 4 f = ed-1 \space mod \space p^4 f=ed1 mod p4
其中d为256bit

#sage 
n = 108960799213330048807537253155955524262938083957673388027650083719597357215238547761557943499634403020900601643719960988288543702833581456488410418793239589934165142850195998163833962875355916819854378922306890883033496525502067124670576471251882548376530637034077
e = 3359917755894163258174451768521610910491402727660720673898848239095553816126131162471035843306464197912997253011899806560624938869918893182751614520610693643690087988363775343761651198776860913310798127832036941524620284804884136983215497742441302140070096928109039
c = 72201537621260682675988549650349973570539366370497258107694937619698999052787116039080427209958662949131892284799148484018421298241124372816425123784602508705232247879799611203283114123802597553853842227351228626180079209388772101105198454904371772564490263034162
R.<x> = PolynomialRing(Zmod(n))
f = (e//251)*x - 1
root = f.monic().small_roots(X = 2^256,beta=0.5)
print(root)

解出d为

d = 39217838246811431279243531729119914044224429322696785472959081158748864949269

又有
e d − 1 ≡ 0   m o d   p 4 ed-1 \equiv0 \space mod \space p^4 ed10 mod p4
进而可以求出 p = g c d ( e d − 1 , n ) 4 p= \sqrt[4]{gcd(ed-1,n)} p=4gcd(ed1,n)
由于 g c d ( e , p h i ) = 251 gcd(e,phi)=251 gcd(e,phi)=251
所以转为有限域下开根
flag经过pad之后长度为512bit,而p和q只有146bit,组合pqcrt是不够计算出flag的。
因此,我们将在模n的RSA转为在模 p 5 p^5 p5下的RSA
n = p 5 n = p^5 n=p5
p h i = p 4 ( p − 1 ) phi = p^4(p-1) phi=p4(p1)
m 251 = p o w ( c , d , p 5 ) m^{251} = pow(c,d,p^5) m251=pow(c,d,p5)
一开始想用常规有限域下开根去解方程

#sage
R.<x> = Zmod(p^5)[]
f = x^251-m
f = f.monic()
results1 = f.roots()

不知道啥情况,一直没有解

在这里插入图片描述
但是捏
山重水复疑无路,柳暗花明又一春
找到了一个新的用法
我们可以利用nth_root()求出在模 p 5 p^5 p5下的 m m m所有可能的根
再遍历所有的根,直到找到flag为止

解题代码

#sage 
from Crypto.Util.number import *
import gmpy2

n = 108960799213330048807537253155955524262938083957673388027650083719597357215238547761557943499634403020900601643719960988288543702833581456488410418793239589934165142850195998163833962875355916819854378922306890883033496525502067124670576471251882548376530637034077
e = 3359917755894163258174451768521610910491402727660720673898848239095553816126131162471035843306464197912997253011899806560624938869918893182751614520610693643690087988363775343761651198776860913310798127832036941524620284804884136983215497742441302140070096928109039
c = 72201537621260682675988549650349973570539366370497258107694937619698999052787116039080427209958662949131892284799148484018421298241124372816425123784602508705232247879799611203283114123802597553853842227351228626180079209388772101105198454904371772564490263034162

#get d  and p
R.<x> = PolynomialRing(Zmod(n))
f = (e//251)*x - 1
root = f.monic().small_roots(X = 2^256,beta=0.5)
d = int(root[0])
p_4 = GCD(e//251*d-1,n)
p = gmpy2.iroot(p_4,4)[0]

#find all possible roots to ergodic flag
phi = p^4*(p-1)
d1 = inverse_mod(e//251,phi)
m = pow(c,d,p^5)
result = Zmod(p^5)(m).nth_root(251,all=True)
for i in result:
    flag = long_to_bytes(int(i))
    if b'flag{' in flag:
        print(flag)
        break

flag:

flag{4b68c7eece6be865f6da2a4323edd491}

【等人是一件很开心的事情啊,如果等着人又能马上见着面就更幸福哩。】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

E138: Can‘t write viminfo file

E138: Can’t write viminfo file /home/xxx/.viminfo! 原因 进入/home/xxx/目录下&#xff0c;用ls -a你会发现有很多.viminfa.tmp - .viminfz.tmp 这种的临时文件&#xff0c;这是因为使用vim编辑器时&#xff0c;如果编辑器没有正常退出就会生成一个暂存文件&#xff0c;…

车载开发前景广阔,分析市场变化赢未来

车载开发行业在未来具有广阔的前景&#xff0c;主要受益于汽车科技的快速发展和智能出行概念的普及。随着科技的不断进步&#xff0c;车载开发行业将继续受益于创新和需求的推动。车载行业的分布未来也是非常之多&#xff0c;分析现在的车载智能发展&#xff0c;可以得出以下车…

安达发|制造企业生产排产现状和APS系统的解决方案

随着市场竞争的加剧&#xff0c;制造业企业面临着生产效率、成本控制和客户满意度等方面的巟大压力。在这种背景下&#xff0c;生产排产作为制造业的核心环节&#xff0c;对企业的生产经营具有重要意义。本文将针对制造业的生产排产现状进行分析&#xff0c;并提出相应的APS系统…

创新与重塑,佛塑科技打造集团型 CRM 建设标杆

“十四五”时期是我国全面建成小康社会、实现第一个百年奋斗目标之后&#xff0c;乘势而上开启全面建设社会主义现代化国家新征程、向第二个百年奋斗目标进军的第一个五年。 在政府有序推进“十四五”规划的进程中&#xff0c;佛山佛塑科技集团股份有限公司&#xff08;证券简…

小程序原生代码转uniapp

写了一份小程序原生代码&#xff0c;想转为uniapp 再转为其他平台发布 1、在命令行里&#xff0c;运行【 npm install miniprogram-to-uniapp -g 】进行安装&#xff0c;因为这个包是工具&#xff0c;要求全局都能使用&#x…

机械设计师应该在工作中培养哪些良好习惯?

图纸规范 1、一定要按照制图标准设计图纸&#xff01;图纸上任何一条直线&#xff08;无论是点划线、粗实线、细实线等等&#xff09;、数值、公差、图标等&#xff0c;都必须有理有据&#xff0c;不能想当然。图纸是产品生产的基础&#xff0c;无论是生产、加工、装配&#x…

一键重装系统Win10步骤和详细教程

在使用Win10系统的时候&#xff0c;有时候我们会遇到系统运行缓慢、软件问题、病毒感染等问题。一键重装系统成为了解决这些问题的最佳方法&#xff0c;但是&#xff0c;很多用户不清楚详细的操作步骤方法&#xff0c;接下来小编就给大家介绍最简单且有效的一键重装步骤吧。 推…

Spring5应用之基础注解开发

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言注解…

建筑机械相关温、振、应力、动力、拖动、作业标准汇集

信息源&#xff1a;首页 - 全国标准信息公共服务平台https://std.samr.gov.cn/ https://std.samr.gov.cn/search/orgDetailView?data_id75039D194EE1FD57E05397BE0A0AB9A4https://std.samr.gov.cn/search/orgDetailView?data_id75039D194EE1FD57E05397BE0A0AB9A4 1.建筑工程…

代码随想录Day21 回溯 LeetCodeT216 组合总和III LeetCode T17电话号码的字母总和

LeetCode T216 组合总和III 题目链接 216. 组合总和 III - 力扣&#xff08;LeetCode&#xff09; 题目思路 经过昨天组合问题的思考,这道题的难度也就降低了,这道题其实相较于组合问题就是多了一个限制,要求我们元素的和是n,元素个数是k,这里我们仍然是使用回溯三部曲来完成任…

Java基础之接口(interface)详解

对Java核心技术卷的一个简单笔记 目录 前言1.接口的概念2.接口的声明格式3.接口的属性4.接口和抽象类的区别5.继承和接口混合使用的一些规则6.继承父类和实现接口时的一些同名冲突问题6.1方法名冲突6 .2常量名冲突 前言 总结一下基础阶段接口常见的问题 1.接口的概念 接口 &…

分享一个比对图片是否一致的小工具(来源: github)

运行效果图: 官网: GitHub - codingfishman/image-diff: 一个方便的图片对比工具一个方便的图片对比工具. Contribute to codingfishman/image-diff development by creating an account on GitHub.https://github.com/codingfishman/image-diff 优缺点: 1.采用比对各色块是…

关于 Appium 各种版本的安装,都在这里

大家在初次接触 Appium 时会看到网上各种帖子讲解如何安装 Appium&#xff0c;各种 Appium 版本的安装教程满天飞&#xff0c;而很多帖子中提供的安装教程是已经过时了的&#xff0c;容易误导初学者。这篇文章带着你一起全面了解 Appium 各种版本如何选择如何安装。 一句话概述…

Edge---微软浏览器-兼容性问题-解决办法(详细)

图片现象&#xff1a; 快捷键&#xff1a;winR &#xff08;进入管理员命令窗口&#xff09; 输入&#xff1a;regedit &#xff08;进入注册表编辑器&#xff09; 点击文件夹&#xff1a;HKEY_LOCAL_MACHINE 找到这个路径的文件项&#xff1a;HKEY_LOCAL_MACHINE\SOFTWARE…

Linux之解除ssh远程登录限制

背景&#xff1a;复制了一个虚拟机&#xff0c;将root密码重置为123456后&#xff0c;使用xshell通过ssh登录竟然失败&#xff0c;检查了很多次&#xff0c;确定root账号密码正确&#xff0c;以下是记录的排查过程。 1、查看ssh登录日志 Ubuntu&#xff1a;/var/log/auth.log…

vue ref和$refs获取组件实例

vue ref和$refs获取组件实例 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\15-ref和$refs获取组件实例 vue --ve…

Linux进阶-ipc信号量

目录 system-V IPC信号量 semget()&#xff1a;创建或获取信号量 semop()&#xff1a;PV操作 semctl()&#xff1a;信号量集的一系列控制操作 sem.h文件 sem.c文件 main.c文件 Makefile文件 执行过程 system-V IPC信号量 本质上是一个计数器&#xff0c;用于协调多进程…

JDK21的虚拟线程是什么?和平台线程什么关系?

虚拟线程&#xff08;Virtual Thread&#xff09;是 JDK 而不是 OS 实现的轻量级线程(Lightweight Process&#xff0c;LWP&#xff09;&#xff0c;由 JVM 调度。许多虚拟线程共享同一个操作系统线程&#xff0c;虚拟线程的数量可以远大于操作系统线程的数量。 在引入虚拟线程…

智慧公厕管理系统:让公共厕所管理变得更高效。

公共厕所的管理是城市环境卫生的重要组成部分&#xff0c;而传统的公厕管理方式已经无法满足日益增长的需求。为了提高公厕的管理效率&#xff0c;降低运营成本&#xff0c;智慧公厕管理系统应运而生。本文将以智慧公厕领先厂家广州中期科技有限公司&#xff0c;大量精品案例现…

java运维部署操作手册

关闭防火墙 不管是windows还是linux&#xff0c;首先必须关闭防火墙。 # linux添加8080端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent#删除80端口 firewall-cmd --zonepublic --remove-port8080/tcp --permanent# 刷新使端口立即生效 firewall-cmd --reloa…