2023 数据安全产业人才能力挑战赛 --- math_exam wp

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

题目

import os
from Crypto.Util.number import *
from secret import flag

bits = 512

def pad(msg, length):
    pad_length = length - len(msg) - 1
    pad_data = os.urandom(pad_length)
    return msg + b'\x00' + pad_data

def unpad(msg):
    return msg.split(b"\x00")[0]

def challenge1(m):
    p, q = [getPrime(bits) for i in range(2)]
    if p <= q:
        p, q = q, p
    e = 0x10001
    n = p * q
    c = pow(m, e, n)
    leak = (n + p) % (q-1)
    print('-------- challenge 1 --------')
    print(f'{e = }')
    print(f'{c = }')
    print(f'{n = }')
    print(f'{leak = }')

def challenge2(m):
    p, q = [getPrime(bits) for i in range(2)]
    e = 0x10001
    n = p * q
    d = inverse(e, (p-1)*(q-1))
    c = pow(m, e, n)
    leak = d + p + q
    print('-------- challenge 2 --------')
    print(f'{e = }')
    print(f'{c = }')
    print(f'{n = }')
    print(f'{leak = }')

def challenge3(m):
    p, q = [getPrime(bits) for i in range(2)]
    e = 0x10001
    n = p * q
    c = pow(m, e, n)
    leak = (pow(p, q, n) + pow(q, p, n)) % n
    print('-------- challenge 3 --------')
    print(f'{e = }')
    print(f'{c = }')
    print(f'{n = }')
    print(f'{leak = }')

assert len(flag) == 42
ms = []
for i in range(0, 42, 14):
    ms.append(bytes_to_long(pad(flag[i:i+14], bits//4-1)))

m1, m2, m3 = ms
challenge1(m1)
challenge2(m2)
challenge3(m3)

"""
-------- challenge 1 --------
e = 65537
c = 112742443814287255411540092433156061065388404049949520959549377871297566383025041892192679147481155020865118811016470498351633875090973546567374001852295013083192495299811476604405637385307524194793969533646755764136014187430115618114840780368311166911900457224593131166970676797547489278410997707815915932756
n = 121127425328043404860413278637978444801342472819958112597540188142689720655042880213001676368390521140660355813910726809125567752172921410143437643574528335234973793653775043030021036875866776532570781661875022102733555943967261003246543180935987772711036868216508554536086688819118597075508026787867088355603
leak = 216638862637129382765636503118049146067015523924032194492700294200289728064297722088882791754351329407138196573832392846467607399504585045028165699421278
-------- challenge 2 --------
e = 65537
c = 7964477910021153997178145480752641882728907630831216554750778499596527781702830885213467912351097301767341858663701574005489585561370961723264247818377063081744522471774208105250855114831033452448184392499682147532404562876275189577321587660597603848038824026981539659156304028998137796242331160312370913038
n = 140571013522095816880929287025269553867630639381779595547026503691829940612178900269986625350464874598461222087427155791855120339533208468121389480964471710028253589422629569889402475311387750348466199387760629889238062977271925350490110043385800605640905324122017637306715108727700910035925728362455954862209
leak = 58442382248753295429370894053397615609981110383986887405127350139482893508400422595729520437678203735054593866306478994471465948872565590901376309380029015549809468112086393107585011072503638322671608471684607214064187044372418770555236721845694224676090744181562673509234801011420696349507624867568099759003
-------- challenge 3 --------
e = 65537
c = 54161995127842474543974770981473422085334044100057089719350274921419091368361244533281599379235907845996678762379778310924192757650322930707785543132446159092950451255660204858292974657119337026589911330412367633761103944916751660957776230135927005700707688661350641600954072696774954805514477330339449799540
n = 88207747624007183083381863279444163105330473097729276113333026679597864128605555600000789783468271680476780366740448641311570797876037993255307716167149079618302706650018518487351604778857406170722209469765782625409279109832638886179654096975665134276856272488090272822541461702907181545730309689190333058151
leak = 19596671928335648228117128090384865424885102632642665068992144783391306491716530155291726644158221224616817878768426330717188403310818678195631582453246848
"""

过程分析

本题考点主要是关于RSA的基础数论分析,通过各种等式变换得到关于pq的等式,从而计算出pq

challenge 1

l e a k ≡ ( n + p )   m o d   ( q − 1 ) leak \equiv (n+p) \space mod \space (q-1) leak(n+p) mod (q1)
∵ n = p ∗ q \because n=p*q n=pq
∴ l e a k ≡ p ( q + 1 )   m o d   ( q − 1 ) \therefore leak \equiv p(q+1) \space mod \space (q-1) leakp(q+1) mod (q1)
⇒ l e a k ≡ 2 ∗ p   m o d   ( q − 1 ) \Rightarrow leak \equiv 2*p \space mod \space (q-1) leak2p mod (q1)
又 ∵ p > q , ∴ p   m o d   ( q − 1 ) = p − q + 1 又\because p>q,\therefore p \space mod \space (q-1) = p-q+1 p>q,p mod (q1)=pq+1
综上, l e a k = 2 ( p − q + 1 ) 综上,leak = 2(p-q+1) 综上,leak=2(pq+1)
此时联立 n = p ∗ q , 可得如下方程组 此时联立n=p*q,可得如下方程组 此时联立n=pq,可得如下方程组
{ l e a k = 2 ( p − q + 1 ) n = p ∗ q \left\{\begin{matrix} leak = 2(p-q+1)\\ n = p*q \end{matrix}\right. {leak=2(pq+1)n=pq
解方程即可得到p,q

challenge 2

e d ≡ 1   m o d   p h i , l e a k = d + p + q ed \equiv 1 \space mod \space phi,leak = d+p+q ed1 mod phi,leak=d+p+q
∵ p h i = ( p − 1 ) ∗ ( q − 1 ) = n − ( p + q ) + 1 \because phi = (p-1)*(q-1) =n-(p+q)+1 phi=(p1)(q1)=n(p+q)+1
∴ p + q = n − p h i + 1 \therefore p+q = n-phi+1 p+q=nphi+1
⇒ e ∗ ( l e a k − p − q ) = 1 + k ∗ p h i \Rightarrow e*(leak-p-q) = 1+k*phi e(leakpq)=1+kphi
⇒ e ∗ ( l e a k − n + p h i − 1 ) = 1 + k ∗ p h i \Rightarrow e*(leak-n+phi-1) = 1+k*phi e(leakn+phi1)=1+kphi
⇒ ( e − k ) ∗ p h i = e ( n − l e a k + 1 ) + 1 \Rightarrow (e-k)*phi = e(n-leak+1)+1 (ek)phi=e(nleak+1)+1
∵ 等式右边 > 0 且 p h i > 0 ,存在一个 k 使得上述等式成立, ∴ k ∈ [ 1 , e ) \because 等式右边>0且phi>0,存在一个k使得上述等式成立,\therefore k \in [1,e) 等式右边>0phi>0,存在一个k使得上述等式成立,k[1,e)

challenge 3

l e a k ≡ p q + q p   m o d   n leak \equiv p^q +q^p \space mod \space n leakpq+qp mod n
l e a k ≡ p q   m o d   q + q p   m o d   p leak \equiv p^q \space mod\space q+q^p \space mod \space p leakpq mod q+qp mod p
根据费马小定理 根据费马小定理 根据费马小定理
a p − 1 ≡ 1   m o d   p a^{p-1} \equiv 1 \space mod \space p ap11 mod p
⇒ l e a k = p + q \Rightarrow leak = p+q leak=p+q
此时联立 n = p ∗ q , 可得如下方程组 此时联立n=p*q,可得如下方程组 此时联立n=pq,可得如下方程组
{ l e a k = p + q n = p ∗ q \left\{\begin{matrix} leak = p+q\\ n = p*q \end{matrix}\right. {leak=p+qn=pq
解方程即可得到p,q.

解题脚本

import gmpy2
from Crypto.Util.number import *
from sympy import *

def decode1():
    #leak = (n + p) % (q-1)
    #leak = (p*q+p) % (q-1)
    #leak = p(q+1) % (q-1),(q+1) %(q-1) = 2
    #leak = 2*p % (q-1),因为p>q 所以 p %(q-1) = (p-q+1)
    #leak = 2*(p-q+1),构建方程组求p,q
    e = 65537
    c = 112742443814287255411540092433156061065388404049949520959549377871297566383025041892192679147481155020865118811016470498351633875090973546567374001852295013083192495299811476604405637385307524194793969533646755764136014187430115618114840780368311166911900457224593131166970676797547489278410997707815915932756
    n = 121127425328043404860413278637978444801342472819958112597540188142689720655042880213001676368390521140660355813910726809125567752172921410143437643574528335234973793653775043030021036875866776532570781661875022102733555943967261003246543180935987772711036868216508554536086688819118597075508026787867088355603
    leak = 216638862637129382765636503118049146067015523924032194492700294200289728064297722088882791754351329407138196573832392846467607399504585045028165699421278
    p,q = symbols("p q")
    eq = [p*q-n,2*(p-q+1)-leak]
    result = list(nonlinsolve(eq, [p, q]))
    p,q =int(result[1][0]),int(result[1][1])
    phi =(p-1)*(q-1)
    d = gmpy2.invert(e,phi)
    m = pow(c,d,n)
    flag1 = long_to_bytes(m)
    return flag1[:14]

def decode2():
    #e*d = 1 +k*phi,leak = d+p+q
    #e*(leak-p-q) = 1 + k*phi
    #n-(p+q)+1 = phi   ---->>>  p+q = n-phi+1
    #e*(leak-n-1+phi) = 1 +k*phi
    #e*(leak-n-1)+e*phi = 1+k*phi
    #(e-k)*phi = e*(n-leak+1)+1,爆破k找到符合条件的k即可求出phi,接下来就是RSA解密
    e = 65537
    c = 7964477910021153997178145480752641882728907630831216554750778499596527781702830885213467912351097301767341858663701574005489585561370961723264247818377063081744522471774208105250855114831033452448184392499682147532404562876275189577321587660597603848038824026981539659156304028998137796242331160312370913038
    n = 140571013522095816880929287025269553867630639381779595547026503691829940612178900269986625350464874598461222087427155791855120339533208468121389480964471710028253589422629569889402475311387750348466199387760629889238062977271925350490110043385800605640905324122017637306715108727700910035925728362455954862209
    leak = 58442382248753295429370894053397615609981110383986887405127350139482893508400422595729520437678203735054593866306478994471465948872565590901376309380029015549809468112086393107585011072503638322671608471684607214064187044372418770555236721845694224676090744181562673509234801011420696349507624867568099759003
    for k in range(1,65537):
        if (e*(n-leak+1)+1)%(e-k)==0:
            phi = (e*(n-leak+1)+1)//(e-k)
            d = gmpy2.invert(e, phi)
            try:
                m = pow(c,d,n)
                flag2 = long_to_bytes(m)
                if flag2[4:5]==b'-' and flag2[9:10]==b'-':
                    return flag2[:14]
            except:
                pass


def decode3():
    #leak = p**q %n + q**p %n
    #leak = p**q %q+q**p%p,费马小定理:a**(p-1) = 1 %p
    #leak = p+q,构建方程组求p,q
    e = 65537
    c = 54161995127842474543974770981473422085334044100057089719350274921419091368361244533281599379235907845996678762379778310924192757650322930707785543132446159092950451255660204858292974657119337026589911330412367633761103944916751660957776230135927005700707688661350641600954072696774954805514477330339449799540
    n = 88207747624007183083381863279444163105330473097729276113333026679597864128605555600000789783468271680476780366740448641311570797876037993255307716167149079618302706650018518487351604778857406170722209469765782625409279109832638886179654096975665134276856272488090272822541461702907181545730309689190333058151
    leak = 19596671928335648228117128090384865424885102632642665068992144783391306491716530155291726644158221224616817878768426330717188403310818678195631582453246848
    p,q = symbols("p q")
    eq = [p*q-n,p+q-leak]
    result = list(nonlinsolve(eq, [p, q]))
    p,q =int(result[1][0]),int(result[1][1])
    phi =(p-1)*(q-1)
    d = gmpy2.invert(e,phi)
    m = pow(c,d,n)
    flag3 = long_to_bytes(m)
    return flag3[:14]

if __name__ == '__main__':
    print(decode1()+decode2()+decode3())

flag:

flag{9dc4b6dd-b162-479c-b087-01d351073d14}

【可能是因为离着远了,喜欢的人会更喜欢,讨厌的人也就没那么讨厌了。】文章来源地址https://www.toymoban.com/news/detail-433188.html

到了这里,关于2023 数据安全产业人才能力挑战赛 --- math_exam wp的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 快来参与:2023全国大数据与计算智能挑战赛正在报名中

    全国大数据与计算智能挑战赛是由 国防科技大学系统工程学院大数据与决策实验室 组织的年度赛事活动,旨在深入挖掘大数据应用实践中亟需破解的能力生成难题、选拔汇聚数据领域优势团队、促进大数据领域的技术创新和面向需求的成果生成、推动形成“集智众筹、联合

    2024年02月05日
    浏览(46)
  • 第三届计算机能力挑战赛C语言

    一、单项选择题 1.题 (3.0分) 以下叙述正确的是()。 A.在C程序,至少要包含一个库函数 B.C程序的一行可以写多条语句 C.对一个C程序进行编译就可以生成可执行文件 D.C程序中的注释只能单独一行,不能位于某条语句的后面 2.题 (3.0分) 下面选项中,不是C语言的是()。

    2024年02月04日
    浏览(49)
  • 众智引领未来:2023中国高校计算机大赛——大数据挑战赛冠军揭晓

    8月27日,由清华大学和大数据系统软件国家工程研究中心联合举办,云智慧协办的“2023中国高校计算机大赛——大数据挑战赛”(以下简称“大赛”)以“线下答辩+全球直播”的形式完美落幕。本次大赛从企业真实场景和实际数据出发,通过基于多源数据的IT系统故障发现赛

    2024年02月10日
    浏览(60)
  • 2023中国高校计算机大数据挑战赛:论文学科分类baseline|清华主办

    NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性

    2024年02月14日
    浏览(50)
  • 2022全国高校计算机能力挑战赛【初赛Java组】真题(选择+编程)

    闲来无事水一期比赛 这里主要给出题目,并不包含正确答案。 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 第十一题 第十二题 第十三题 第十四题 第十五题 答案仅供参考! 第一道: 思路:模拟 实现: 第二题: 思路: 模拟 实现: 第三题:

    2024年02月07日
    浏览(45)
  • 2023年第四届MathorCup高校数学建模挑战赛——大数据竞赛B题解题思路

    比赛时长为期7天的妈杯大数据挑战赛如期开赛,为了帮助对B题有更深的理解,这里为大家带来B题的初步解题思路。 赛道B:电商零售商家需求预测及库存优化问题 由于妈杯竞赛分为初赛复赛,因此,对于B题大家仅仅看到了预测相关的问题,没有优化相关的问题。包括题干中

    2024年02月06日
    浏览(49)
  • 【2023 年第十三届 MathorCup 高校数学建模挑战赛】D 题 航空安全风险分析和飞行技术评估问题 27页论文及代码

    (1)建模思路 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建模方案及代码实现 【2023 年第十三届

    2024年02月08日
    浏览(54)
  • 【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析

    【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析 【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析 2023 年第二届钉钉杯大学生大数据挑战赛初赛

    2024年02月16日
    浏览(63)
  • 2023 CCPC 华为云计算挑战赛 D-塔

    首先先来看第一轮的 假如有n个,每轮那k个 他们的高度的可能性分别为  n 1/C(n,k) n+1 C(n-(k-1+1),1)/C(n,k) n+2 C(n-(k-2+1),2)/C(n,k) n+i C(n-(k-i+1,i)/C(n,k) 通过概率和高度算出第一轮增加的期望 然后乘上m轮增加的高度加上初始高度,就是总共增加的高度 下面是题解写的过程    

    2024年02月11日
    浏览(46)
  • 2023mothercup妈妈杯数学建模挑战赛思路

    先占坑,本人于2019年开始接触数学建模,参加了大大小小几十场数学建模比赛。 本次mothercup也会持续陪跑,为大家提供免费的文字思路和视频思路,后续还有代码和参考文章等。 2023年Mathorcup数学建模竞赛A题 (比赛开始后第一时间更新) 2023年Mathorcup数学建模竞赛B题 (比赛

    2023年04月13日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包