文章目录

  • 题目
  • 解题过程
  • 解题代码

题目

childrsa.py

from Crypto.Util.number import *flag = b'xxx'
p = getPrime(512)
q = getPrime(512)
n = p * q
P = getPrime(1024)
Q = getPrime(1024)
N = P * Q
e = 65537
gift = (P+Q) >> 400hint = (p & ((1 << 350) - 1)) >> 5
enc_hint = pow(hint,e,N)
c = pow(bytes_to_long(flag),e,n)
f = open(f'out{i+1}.txt','w')
f.write(f'N = {N}\n')
f.write(f'n = {n}\n'
f.write(f'gift = {gift}\n')
f.write(f'enc_hint = {enc_hint}\n')
f.write(f'c = {c}')

out.txt

N = 19913283586978731272870374837854045562790864804312115658302463830117436116219931849180682454814957654994095500743161455669517742683196683945049694888375426558735311269294662060482717191409995553476857418604462748567614908456839975140435522714312533340013676955820372105156740228641356206825881138276471973278761948406726062399175269553184359236859175084438349221553915085882218661560890322526503741457647907788204833926214096369428913779871365689037671018942683561649187089844083798834324075157252488088496084629641115161544547506935703532950490109236586524242732310854674446718076810611730874295399180178401471353663
n = 98394377912970161077976095071716071520245470884522650898371541866651139965831581427336428521179335097560338145643418890363050369233502530295868251106114979969844387393758147627569985743852463470545138002189902685566590889175140517151122304528973863485700142820829052897139853465497289644064298161242772703289
gift = 112012823249741273956420414320152024086394551241563686416444057368708038459572554871491781707278127933195689073127882065060125127295041489653572915729848455155059117821290550157606860744547
enc_hint = 13605762329549698957586626266580933128225639142810971158632386694900212152297364700673906983331081843360581227221052403163762155206266035280442283924005142717129467351643173282810669982201476798388553001056498736307588260706475327062302787323877507524036357644241120006072323797778327893834792299939570334886948188364597473931268889437417695532862093912649528155151390080600081199337965649892379699786628095487656690228838497716512853509768997296826487263776776447496125752546322173589223915740715451543895861668143819159937998988611022766833424669076863898157258297885102980961819003128529680884480390557024888414518
c = 73440769815335471983607426365687905918721184275652299429416892828899873930224614597826204961136670712832234285387297735959592122505613951335959593105045789810808172640134939607018894726831927984520480432707238536268054572649912957275921796939059679116900910403261478040783178268712136617053467195749630152736

解题过程

根据题目代码可知, g i f t = ( P + Q ) > > 400 gift= (P+Q)>>400 gift=(P+Q)>>400,也就是说此时我们知道P+Q的高位。
那么我们可以联立 N = P ∗ Q N=P*Q N=P∗Q构建一个方程去求解 P 1 P_1 P1​,此时解出来的 P 1 P_1 P1​高位是和P一样的,只是低400位不一样。

RF = RealField(2048)
X = polygen(RF)
f =X*((gift<<400)-X) - N
P = int(f.roots()[1][0])

然后我们再利用coppersmith定理去恢复P
PS:其实这里左移430再右移430是可以不用写的,这么写是因为我P高位解法的习惯使然,coppersmith本来就是去求差,所以直接将解出来的 P 1 P_1 P1​带入到多项式环中求解即可。

P_high = (P<<430)>>430
PR.<x> = PolynomialRing(Zmod(N))
f1 = x + P_high
x0 =f1.small_roots(X=2^430, beta=0.4)[0]
P1 = P_high+x0

求出P之后,后面就简单了。
先简单RSA解密解出hint,之后由于hint = (p & ((1 << 350) - 1)) >> 5,可知其为p的低350位再右移了5位,也就是说解出来的hint是p的低345位并且损失了低5位
这个时候思路就非常明了哩:
直接爆破低5bit,然后利用已知p的低位泄露coppersmith还原p,最后解密即可得到flag

解题代码

#sage
import gmpy2
from Crypto.Util.number import *gift = 112012823249741273956420414320152024086394551241563686416444057368708038459572554871491781707278127933195689073127882065060125127295041489653572915729848455155059117821290550157606860744547
N = 19913283586978731272870374837854045562790864804312115658302463830117436116219931849180682454814957654994095500743161455669517742683196683945049694888375426558735311269294662060482717191409995553476857418604462748567614908456839975140435522714312533340013676955820372105156740228641356206825881138276471973278761948406726062399175269553184359236859175084438349221553915085882218661560890322526503741457647907788204833926214096369428913779871365689037671018942683561649187089844083798834324075157252488088496084629641115161544547506935703532950490109236586524242732310854674446718076810611730874295399180178401471353663
enc_hint = 13605762329549698957586626266580933128225639142810971158632386694900212152297364700673906983331081843360581227221052403163762155206266035280442283924005142717129467351643173282810669982201476798388553001056498736307588260706475327062302787323877507524036357644241120006072323797778327893834792299939570334886948188364597473931268889437417695532862093912649528155151390080600081199337965649892379699786628095487656690228838497716512853509768997296826487263776776447496125752546322173589223915740715451543895861668143819159937998988611022766833424669076863898157258297885102980961819003128529680884480390557024888414518
n = 98394377912970161077976095071716071520245470884522650898371541866651139965831581427336428521179335097560338145643418890363050369233502530295868251106114979969844387393758147627569985743852463470545138002189902685566590889175140517151122304528973863485700142820829052897139853465497289644064298161242772703289
c = 73440769815335471983607426365687905918721184275652299429416892828899873930224614597826204961136670712832234285387297735959592122505613951335959593105045789810808172640134939607018894726831927984520480432707238536268054572649912957275921796939059679116900910403261478040783178268712136617053467195749630152736
e = 65537
RF = RealField(2048)
X = polygen(RF)
f =X*((gift<<400)-X) - N
P = int(f.roots()[1][0])
P_high = (P<<430)>>430
PR.<x> = PolynomialRing(Zmod(N))
f1 = x + P_high
x0 =f1.small_roots(X=2^430, beta=0.4)[0]
P1 = P_high+x0
print(f"P = {P1}")
Q =N//int(P1)
print(f"Q = {Q}")
phi = (P1-1)*(Q-1)
d = gmpy2.invert(e,gmpy2.mpz(phi))
hint = pow(enc_hint,d,N)
print(f"hint = {hint}")
hint = hint<<5
for i in range(2**5):try:p_low = hint+iPR.<x> = PolynomialRing(Zmod(n))f = x*2^350+p_lowroots = f.monic().small_roots(X=2^162, beta=0.4)if roots:print(roots[0])p =  int(f(roots[0]))breakexcept:pass
print(f"p = {p}")
q = n//p
print(f"q = {q}")
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
flag = long_to_bytes(int(m))
print(flag)

flag:

flag{a39f10207ad27716f2bc5fd54063a340}

【大侠的意义是在天下阴暗处点一盏灯,照亮一小块黑暗,然后就会有人学着,再点亮一盏,如果灯多了,这世界上黑暗的地方就少了。 ----节选自三弦大天使作品《天之下》】

2023 贵阳大数据安全精英赛 --- Crypto childrsa wp相关推荐

  1. 大数据安全的重要性解读

    大数据安全 本章从保障大数据安全和利用大数据保障网络空间安全两个方面介绍了大数据安全的含义,阐述了我国大数据安全发展状况和大数据安全的重要意义. 大数据安全含义 保障大数据安全 当今社会进入大数据时代 ...

  2. 第二届中国大数据安全高层论坛在贵阳举行

    由中国信息安全测评中心和贵阳市人民政府共同主办的"第二届中国大数据安全高层论坛"于 2016 年 5 月 25 日 - 5 月 26 日在贵阳召开.该论坛作为"中国大数据 ...

  3. “大数据金融”与“大数据安全”双剑合璧

    2019独角兽企业重金招聘Python工程师标准>>> 2013年至今,大数据技术迅速地变革着中国金融行业,已在精准营销.小额信贷.高频交易等领域取得了累累硕果.但是,这把双刃剑也给 ...

  4. “大数据金融”亟待“大数据安全”

    本文讲的是"大数据金融"亟待"大数据安全",5月26日,贵阳国际大数据博览会暨全球大数据时代贵阳峰会即将盛大开幕.本次数博会将"'互联网+'时代的大数 ...

  5. 干货分享丨第五届“大数据安全与隐私计算”学术会议

    开放隐私计算 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区.社区秉承开放共享的精神,专注于隐私计算行业的研究与布道.社区致力于隐私计算技术的传播,愿成为中国 &q ...

  6. 医疗大数据安全——基于区块链的委托量子云架构

    Blockchain-based delegated Quantum Cloud architecture for medical big data security 导论 相关研究 研讨会贡献 关键 ...

  7. 360携手贵阳开启数据安全战略合作 周鸿祎警示勒索攻击危害

    "发展数字经济.建设数字中国是新时代高质量发展的新共识,也是百年未有之大变局下中国弯道超车的新赛道."5月26日,在2021中国国际大数据产业博览会(简称"2021数博会 ...

  8. 攻防世界 crypto入门WP

    攻防世界 crypto入门WP 前言 下学期要求密码和Re,现在这俩几乎是空白,趁着暑假的功夫,最近也能闲下来,就学一学crypto,其实真正接触发现挺有意思的,各种密码的加密千奇百怪,层出不穷,也是 ...

  9. 大数据安全战略为“互联网+”发展保驾护航

    大数据安全战略为"互联网+"发展保驾护航 "只要我在网上搜索过的产品,在随后几天里,打开任何一个网页,都收到此类产品及相关配套的推送信息."家住朝阳的珊瑚说,对 ...

最新文章

  1. 中科大刘和刚老师的计算机图形学资料 for students
  2. mysql update用not in太慢了_MySQL 加锁和死锁解析
  3. Android:解决Button中的文字全部大写
  4. HDU 3486 Interviewe RMQ
  5. 【数据库实验课堂】实验一:数据库的管理
  6. 由mysql8降级到mysql5
  7. redis作用_Redis高可用详解:持久化技术及方案选择
  8. 减治法解决尼姆(Nim)游戏/拈游戏问题(JAVA)
  9. Sql中partition by的使用
  10. 「理解HTTP」之常见的状态码
  11. 跟我一起学docker(15)--监控日志和日志管理
  12. 哪个相机可以拍gif动图_你见过最搞笑的gif是什么?那些搞笑的动图都是用什么gif制作app制作的?...
  13. 那些黑刘翔的人,你们的良心被狗吃了
  14. ISO_IEC_27003:2017信息安全管理体系中文解读
  15. Asterisk-Javanbsp;教程(中文版)…
  16. 读书、学习是为了让我们成为更出色的人同时做自己喜欢的事
  17. 用10行代码实现鉴黄
  18. 所以小学把基础的数理逻辑和ZFC集论,基数序数超滤模型论学好,大有裨益…...
  19. PDF拆分技巧——如何在线拆分PDF
  20. 后端存储课程笔记(大量实战经验)

热门文章

  1. 数据库---- 增删改查
  2. ls、ls -a、ls -l、ls -al、ll、ll -a区别
  3. iOS多线程简单理解
  4. python实现地理位置类数据爬取与geohash应用初探
  5. php 数字 字母组合,PHP生成数字字母组合或纯数字的唯一订单号
  6. ESP32:蓝牙BLE控制M3508电机
  7. 【Linux】进程状态的理解
  8. 微信小程序实现页面强制刷新
  9. 【学习笔记】山东大学生物信息学-05 高通量测序技术介绍 + 06 统计基础与序列算法(原理)
  10. 如何将深度学习模型加载到android环境中