crypto-PellRSA(2022 ISG CTF)

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

RSA新套路,记录一下。

题目源码:

from secret import flag, x, y
from Crypto.Util.number import *

D = 0x1337
assert x**2 - D*y**2 == 1

p, q = [getPrime(1024) for _ in range(2)]
n = p * q
e = 0x10001
m = bytes_to_long(flag)
c = pow(m, e, n)
hint = x*p+y*q

print(f"c = {c}")
print(f"n = {n}")
print(f"hint = {hint}")

# c = 3005210900274062028245064763681985171865732477888576575723787090796927451576980061053851866237955581217514145765632113368490115032450199985758227732632048361191007646408276913089831906329971437230559530448171301727266374997545370123383402726558627115715475862029561278423823518444820977264751303044302265493708799121168143462311965945091467240934532001260635332451496021570344953585558566967953242376305314361254897583062914601586502797581537297696760063459202795730665696764263768365841709190449166538288878080889669665026312901303009296451551464554389754163788816398944455459009524861984572615424670639254030151054
# n = 15718757517521251374958179320446142283106866234677555962716669310992898890185071974665307763506272733881181355624859739900598443787336490077978994566789053663418590696159044391330241067187081512182824631894647418510875405615745967831095900926071879310908555025126167350062806600612989286959517901360623166342258230751843299825036857599702420000410748900477339859195343125679909303239140523015164436167732911014179093209512745136065705348000005927264077855404829601870427156494640300513831498305781704787224695635843906200844830814368296185775476464094439535093160507307060825299000779102353898638521855718963250126411
# hint = 25554225946418820739932963199267565143249197331792582934680530259781352338033809894486636299663276720660161274600116944243562621815071872332713982731906833226185925332402882590577780931343494988584492568662132160373007142250538311414299314391751747130332966573464023483628487169137147382668830758422851921134062566813674606680584569364070329996014784761466853704469300230627289640396078029124024721492689780252172435786800400687554721418435802505512555196774950296179670031042084572223128748401

题目一开始是佩尔方程 x 2 − D y 2 = 1 x^2−Dy^2=1 x2Dy2=1
其中x和y都未知需要进行枚举。参考连分数法解佩尔方程特解

又根据关系式 h i n t = x p + y q = a + b hint=xp+yq=a+b hint=xp+yq=a+b
a 2 − a × h i n t = x 2 p 2 − x 2 p 2 − x y p q = − x y p q a^2-a \times hint=x^2p^2-x^2p^2-xypq=-xypq a2a×hint=x2p2x2p2xypq=xypq
同理 b 2 − b × h i n t = y 2 q 2 − y 2 q 2 − x y p q = − x y p q b^2-b \times hint=y^2q^2-y^2q^2-xypq=-xypq b2b×hint=y2q2y2q2xypq=xypq
a,b是一元二次方程
z 2 − z × h i n t + 𝑥 𝑦 𝑛 = 0 , z ∈ Z z^2−z \times hint+𝑥𝑦𝑛=0, z \in \mathbb{Z} z2z×hint+xyn=0,zZ的解;
由于 hint,x,y,n 已知,则利用韦达定理求解该方程,若解为整数即可进一步推出p,q ;最后老套路RSA解密即可。

最终exp:文章来源地址https://www.toymoban.com/news/detail-690215.html

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

def solve_pell(N, numTry = 100):
    cf = continued_fraction(sqrt(N))    
    for i in range(numTry):
        denom = cf.denominator(i)
        numer = cf.numerator(i)        
        if numer^2 - N * denom^2 == 1:            
            return numer, denom    
    return None, None

def gen_pell(D):
    x, y = solve_pell(D)
    xs = [x]
    ys = [y]    
    while True:        
        yield xs[-1], ys[-1]
        x_i = xs[0] * xs[-1] + D * ys[0] * ys[-1]
        y_i = xs[0] * ys[-1] + ys[0] * xs[-1]
        xs.append(x_i)
        ys.append(y_i)


c = 3005210900274062028245064763681985171865732477888576575723787090796927451576980061053851866237955581217514145765632113368490115032450199985758227732632048361191007646408276913089831906329971437230559530448171301727266374997545370123383402726558627115715475862029561278423823518444820977264751303044302265493708799121168143462311965945091467240934532001260635332451496021570344953585558566967953242376305314361254897583062914601586502797581537297696760063459202795730665696764263768365841709190449166538288878080889669665026312901303009296451551464554389754163788816398944455459009524861984572615424670639254030151054
n = 15718757517521251374958179320446142283106866234677555962716669310992898890185071974665307763506272733881181355624859739900598443787336490077978994566789053663418590696159044391330241067187081512182824631894647418510875405615745967831095900926071879310908555025126167350062806600612989286959517901360623166342258230751843299825036857599702420000410748900477339859195343125679909303239140523015164436167732911014179093209512745136065705348000005927264077855404829601870427156494640300513831498305781704787224695635843906200844830814368296185775476464094439535093160507307060825299000779102353898638521855718963250126411
hint = 25554225946418820739932963199267565143249197331792582934680530259781352338033809894486636299663276720660161274600116944243562621815071872332713982731906833226185925332402882590577780931343494988584492568662132160373007142250538311414299314391751747130332966573464023483628487169137147382668830758422851921134062566813674606680584569364070329996014784761466853704469300230627289640396078029124024721492689780252172435786800400687554721418435802505512555196774950296179670031042084572223128748401
e = 0x10001
N = 0x1337

for (x, y) in gen_pell(N):
    z = var('z')
    delta = hint**2 - 4*x*y*n    
    if iroot(delta, 2)[1] == True:
        sol = solve(z**2-hint*z+x*y*n==0, z, solution_dict=True)
        a, b = int(z.subs(sol[0])), int(z.subs(sol[1]))
        a, b = [a, b] if a > b else [b, a]
        p, q = a // x, b // y        
        break
assert p * q == n
        
phi = (p-1) * (q-1)
d = pow(e, -1, phi)
m = int(pow(c, d, n))
print(long_to_bytes(m))

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

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

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

相关文章

  • CTF CRYPTO 密码学-2

    字符 ZZZZ X XXZ ZZ ZXZ Z ZXZ ZX ZZX XXX XZXX XXZ ZX ZXZZ ZZXZ XX ZX ZZ 分析 此字段是由Z和X组成的字符,联想到莫斯密码是由.和-组成的所以接下来可以尝试莫斯密码解题 注:也可以使用在线平台解密,这里用工具进行演示 链接:https://pan.baidu.com/s/1Cgs6QtWnQtrp8aTWrq4bEQ 提取码:aq5a

    2024年01月19日
    浏览(55)
  • CTF入门学习笔记——Crypto密码(古典密码)

    🚀🚀这篇笔记是我对自己初步学习CTF的一个小总结,主要涉及了Crypto板块的古典密码,这部分内容比较简单,利用一些工具加上观察分析一般都能解决,但是古典密码一般会和编码结合起来一起考察,所以此篇笔记主要起到一个分析总结的作用。 🚀🚀凯撒密码算是古典密

    2024年02月09日
    浏览(42)
  • 青少年CTF训练平台 — CRYPTO通关WP

    vxshyk{g9g9g099-hg33-4f60-90gk-ikff1f36953j} 凯撒解码 cXNuY3RmezY4NjkwOGJjLTFiZjItNGMxOS04YTAxLWIyYzc3NjAwOTkyOH0= base64解码 4d4e4d4534354b5a474e4a47325a4c324b56354532563256504a4d585551544d4a524c554d32535a4b524958495453484c4a574532364a524e42485549524a554a524c564b3653324b354b5855574b554d3432453436535247424845514d4235 HEX —base32—base64 qsnctf{.----

    2024年02月05日
    浏览(58)
  • CTF-Crypto-各种密码原理及解密方法

    一般m表示明文,c表示密文 当密钥K是“3124”,明文m是“flag{easy_easy_crypto}\\\"时 密钥变化规则表如下 明文字符位置 1 2 3 4 密文字符位置 3 1 2 4 移位密码首先会以K的长度4切分m具体如下: flag      {eas      y_ea     sy_c      rypt     o} 每一部分按照密钥变化表进行变化 lafg 

    2024年02月06日
    浏览(214)
  • 青少年CTF-Crypto(新手版本2.0)

    题目: lnixoa{1x2azz7w8axyva7y1z2320vxy6v97v9a} 知识点:凯撒加密 我的题解: 题目: 知识点:猪圈密码 我的题解: 题目: 知识点:大素数分解中求d 我的题解: 题目: 我的题解:  c = g^m mod p g很小,m作为flag处于次方的位置 可以用sage 题目: 我的题解: n分解出q、p、r,但是多因

    2024年03月09日
    浏览(67)
  • 【青少年CTF】Crypto-easy 题解小集合

    1.BASE 拿到附件用cyberchef自动解码得到flag 2.basic-crypto 拿到附件发现是一串01的数字,这时候想到二进制转换 然后base64在线解码 接着根据提示想到凯撒密码解密 最后通过字频查找找到flag 3.CheckIn 先用base64解码 再用ROT47解码得到flag 4.childRSA 先用factordb分解N 然后套用脚本得到fl

    2024年02月07日
    浏览(42)
  • 2023寒鹭Tron-CTF迎新赛 CRYPTO Misc 全WP

    1、题目信息 2、解题方法 兔子密码,在线工具直接解 1、题目信息 2、解题方法 flag有三部分 第一部分:BrainFuck解码 第二部分:ook! 第三部分:UUencode解码 1、题目信息 2、解题方法 像摩斯,但不是摩斯,是摩斯的变形。。。 把 . 换成 0 , / 换成 1,二进制解码: 最后把flag换

    2024年02月08日
    浏览(48)
  • CTF-Crypto学习记录-第四天 “ “ --- SHA1安全散列算法,实现原理。

    MD5学习MD5加密算法 SHA-1(Secure Hash Algorithm1,安全散列算法1)是一种密码散列函数。 SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。 SHA-1的历史: 2005年,密码分析人员发现了对SHA-1的有效攻击方法,这表明该算法可能不够

    2024年02月07日
    浏览(42)
  • 2022 SWPUCTF Web+Crypto方向wp

    web 欢迎来到web安全 签到题,F12直接找出flag easy_sql 首先根据提示传入?wllm=1看看有无回显 然后我们发现了正常回显,接着用单引号试试闭合方式 通过对回显错误信息的分析,为了方便观察,我把包裹的引号隔开’ ‘1’’ LIMIT 0,1 ’ 这样我们很容易发现后面多出来了一个引号

    2024年02月09日
    浏览(47)
  • [CTF]2022美团CTF WEB WP

    最终排名 源码 由上源码可知想要造成pickle反序列化需要两步: 1.得到secret_key 2.绕过黑名单造成pickle反序列化漏洞 那么先来实现第一步: app.config[‘SECRET_KEY’] = os.urandom(2).hex() #设置key为随机打乱的4位数字字母组合例如a8c3 从这里知道,想要爆破key其实并不难,可以自己试试 那

    2024年02月06日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包