2023省赛-CRYPTO-RSA

这篇具有很好参考价值的文章主要介绍了2023省赛-CRYPTO-RSA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RSA

一、题目分析

1、标题:RSA

2、关键字:共模攻击变形

3、比赛:2023年省赛

4、工具:python

二、开始

1、题目

from Crypto.Util.number import getPrime, long_to_bytes, bytes_to_long
from gmpy2 import gcdext, iroot, invert

def genFlag(prefix='flag'):
    from uuid import uuid4

    flag = '%s{%s}'%(prefix, uuid4())
    return flag

def task():
    flag = genFlag().encode()
    nbits = 1024

    m = bytes_to_long(flag)

    print(m.bit_length())

    p = getPrime(nbits//2)
    q = getPrime(nbits//2)
    n = p*q


    e1 = getPrime(17)
    e2 = getPrime(15)


    c1 = pow(pow(m, 3*e1, n), e1, n)
    c2 = pow(pow(m, 3*e2, n), e2, n)

    print(f'n1 = {n}')
    print(f'e1 = {e1}')
    print(f'c1 = {c1}\n')

    print(f'n2 = {n}')
    print(f'e2 = {e2}')
    print(f'c2 = {c2}\n')

'''

n1 = 80711311928352902694710422970688903606000218692452273911269506769045761705914159133473529264067420955208544069064894951745789822539451286660678312774363283201953736629540550292370742491108053112199867197895749984341885442147728874118323739015205440938518279504759997984775115237492397919379649329850180516261
e1 = 122887
c1 = 59033614245900316909832395678886393276053552915366208621342665332906000721989599030642668957599760516307635849097487785938534526719743083784460303954510364242152451728228357026496644050040514126525518041776661349930706074330888887527845299823685416190405985296818688531105417063538797056226598104927423951627

n2 = 80711311928352902694710422970688903606000218692452273911269506769045761705914159133473529264067420955208544069064894951745789822539451286660678312774363283201953736629540550292370742491108053112199867197895749984341885442147728874118323739015205440938518279504759997984775115237492397919379649329850180516261
e2 = 17257
c2 = 24570094655507396044175375285895366917522198543208218187367223947903249085115185954083311837533185455954612955943018854461433930046296166535549766237187235744710407038811075574034164364122395012692826524642415319528298639367539163546531362754569139791468430890745419711862360528332490543816870699102197775513

'''

    



if __name__ == '__main__':
    task()

2、分析

(1)初步看是共模攻击,即n相同,不同的c1、c2、e1、e2

(2)再分析下加密过程,发现加密的m不同,m是经过一次RSA的。

(3)比赛的时候直接懵逼了,没有想到去推演下计算过程,而是一根筋的去想怎么还原出第一次加密的结果再进行一次共模攻击,结果就没有结果了。

(4)赛后请教了做出来的兄弟,原来就是最简单的数学。

已知n,e1,e2,c1,c2,且

c1 ≡ (m^{3e1}\quad mod \quad n)^{e1} \quad mod \quad n
c2 ≡ (m^{3e2}\quad mod \quad n)^{e2} \quad mod \quad n

简单的数学,初中水平吧,就可以得到

c1 ≡ m^{3{e1}^2}\quad mod \quad n
c2 ≡ m^{3{e2}^2}\quad mod \quad n

c1 ≡ ({m^3})^{{e1}^2}\quad mod \quad n
c2 ≡ ({m^3})^{{e2}^2}\quad mod \quad n

这下就又是我们熟悉的共模攻击了,只是m变成了m的三次方。e变成了各自e的平方。那思路就很清晰了:

第一步:共模攻击求出m的三次方

第二步:开立方得到m,case close。

3、solve.py

#!python3
# -*- coding: utf-8 -*-
# @Time : 2023/6/22 12:30
# @Author : A.James
# @FileName: solve.py



# 共模攻击
import gmpy2
import libnum
from Crypto.Util.number import *

n = 80711311928352902694710422970688903606000218692452273911269506769045761705914159133473529264067420955208544069064894951745789822539451286660678312774363283201953736629540550292370742491108053112199867197895749984341885442147728874118323739015205440938518279504759997984775115237492397919379649329850180516261
e1 = 122887
e2 = 17257
c1 = 59033614245900316909832395678886393276053552915366208621342665332906000721989599030642668957599760516307635849097487785938534526719743083784460303954510364242152451728228357026496644050040514126525518041776661349930706074330888887527845299823685416190405985296818688531105417063538797056226598104927423951627
c2 = 24570094655507396044175375285895366917522198543208218187367223947903249085115185954083311837533185455954612955943018854461433930046296166535549766237187235744710407038811075574034164364122395012692826524642415319528298639367539163546531362754569139791468430890745419711862360528332490543816870699102197775513
e3 = e1**2
e4 = e2**2

s0, s1, s2 = gmpy2.gcdext(e3, e4) #求s1,s2,扩展欧几里得算法
if s1 < 0:
    s1 = -s1
    c1 = gmpy2.invert(c1, n)#求c1的模反数
elif s2 < 0:
    s2 = -s2
    c2 = gmpy2.invert(c2, n)#求c2的模反数
m = gmpy2.powmod(c1, s1, n)*gmpy2.powmod(c2, s2, n) % n
print (m)
print ('-------')
m11 = gmpy2.iroot(m,3)
print (m11)
print ('-------')
m12 = m11[0]
print (m12)
print ('-------')
print (long_to_bytes(m12))
#print '[-]flag is:',libnum.n2s(m)

4、get flag

flag{aad084d1-9593-4e8d-968f-5ea2c382b730}文章来源地址https://www.toymoban.com/news/detail-495471.html

到了这里,关于2023省赛-CRYPTO-RSA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯网络安全春秋赛 Crypto RSA

    某公司为了保护其重要数据,使用了RSA加密算法。该公司以同一个N为模数,为Alice和Bob分别生成了不同的公钥和与之相应的私钥。Alice和Bob都使用自己的公钥对同一条明文m进行加密,分别得到密文c1和c2。假设你是一名密码安全研究者,你已获取了N值、两个密文和公钥,能否

    2024年02月06日
    浏览(37)
  • 2019蓝桥杯省赛题目——“数的分解”

    目录 题目 要求 思路 最后的代码 结果 把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。 这是一道结果填空

    2024年02月14日
    浏览(28)
  • 蓝桥杯单片机第14届省赛客观题目+程序题目+程序题参考答案

    目录 客观题题目 程序题题目 程序题参考答案 main.h main.c Init.h Init.c SMG.h SMG.c DSQ.h DSQ.c YanShi.h YanShi.c JZKey.h JZKey.c ds1302.h ds1302.c iic.h iic.c onewire.h onewire.c LN555.h LN555.c             首先吐槽一下,花300元体验国赛的难度,是真的崩溃。          3个小时写完,2个小时改bug!

    2024年02月11日
    浏览(38)
  • 【RSA加密/解密】PKCS1_OAEP和PKCS1_v1_5两种填充方案【python RSA密钥对生成、密码加密、密文解密、pycharm安装Crypto】

    一、PKCS1_OAEP和PKCS1_v1_5是公钥加密标准中的两种填充方案。 PKCS1_OAEP(Optimal Asymmetric Encryption Padding)是一种更安全的填充方案,它提供了更好的安全性和抗攻击性。它使用随机数进行填充,并引入了哈希函数来增加安全性。 PKCS1_v1_5是较旧的填充方案,它使用固定的填充字节序

    2024年02月06日
    浏览(48)
  • 【数模】2023年第二十届五一数学建模竞赛题目 B题:快递需求分析问题

            网络购物作为一种重要的消费方式,带动着快递服务需求飞速增长,为我国经济发展做出了重要贡献。准确地预测快递运输需求数量对于快递公司布局仓库站点、节约存储成本、规划运输线路等具有重要的意义。附件1、附件2、附件3为国内某快递公司记录的部分城

    2024年02月11日
    浏览(28)
  • 蓝桥杯嵌入式第十四届省赛题目解析

    前几天刚刚参加完第十四届的省赛,这届题目比我想象中的要难,其实想一想这也是应该的,以前的知识点都被摸透了,也是需要加入新的知识点了,但是我还是想说能不能别在我参加的时候加大题目难度啊。 不过听说隔壁单片机的省赛都比往年的国赛还难,这就有点离谱了

    2024年02月06日
    浏览(35)
  • 【蓝桥杯单片机】第十二届省赛(含题目和解答代码)

    main.c  iic.c iic.h onewire.c onewire.h      

    2024年02月04日
    浏览(41)
  • 【无标题】(delphi11最新学习资料) Object Pascal 学习笔记---第5章第3节(self关键字)

    5.3.1 Self:记录背后的魔法 ​ 假设您有两个记录,如 MyRec1 和 MyRec2 ,它们属于相同的记录类型。当调用一个方法并执行其代码时,该方法如何知道它使用这两个记录中的哪一个?当您定义一个方法时,编译器在幕后向方法添加一个隐藏的参数,即对您应用该方法的记录的引用

    2024年02月20日
    浏览(30)
  • 蓝桥杯单片机第十四届省赛题目和程序答案

    目录  1、前言  2、题目 3、程序架构     3.1 display.c    3.2 ds1302.c    3.3 iic.c    3.4 onewire.c    3.5 main.c 主函数文件    3.6 环境配置 4. 历年蓝桥杯单片机试题和答案        抽空复习了一下,拿下单片机省赛一等奖,在此分享一下最新的14届省赛程序设计答案          模

    2024年02月06日
    浏览(50)
  • [UMDCTF 2023] crypto 部分

    这个小赛只作了8个crypto简单部分,后边5个都不会 密码签到,给了堆字符,细看就两种,每行8组 CHU! 开头,显然是替换成01。然后出来就是flag,这个flag有1364个字符。是我见过最长的。  CHU! PIKA CHU! PIKA CHU! PIKA CHU! PIKA  CHU! PIKA CHU! CHU! PIKA PIKA CHU! PIKA  CHU! PIKA CHU! CHU! CHU! PIKA

    2024年02月02日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包