ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

babyRSA GWCTF 2019

2022-08-30 02:00:26  阅读:197  来源: 互联网

标签:F2 babyRSA m1 pow flag GWCTF 2019 m2 c2


Involved Knowledge

  • RSA
  • Adjacent Element

Description

encrypt.py

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

flag = 'GWHT{******}'
secret = '******'

assert(len(flag) == 38)

half = len(flag) / 2

flag1 = flag[:half]
flag2 = flag[half:]

secret_num = getPrime(1024) * bytes_to_long(secret)

p = sympy.nextprime(secret_num)
q = sympy.nextprime(p)

N = p * q

e = 0x10001

F1 = bytes_to_long(flag1)
F2 = bytes_to_long(flag2)

c1 = F1 + F2
c2 = pow(F1, 3) + pow(F2, 3)
assert(c2 < N)

m1 = pow(c1, e, N)
m2 = pow(c2, e, N)

output = open('secret', 'w')
output.write('N=' + str(N) + '\n')
output.write('m1=' + str(m1) + '\n')
output.write('m2=' + str(m2) + '\n')
output.close()

secret

N = 6365851495945747469090301601826908662229092...

m1 = 900099743414522432169869380283712...

m2 = 487443985757405173426628188375657117604235507...

Analyze

half = len(flag) / 2

flag1 = flag[:half]
flag2 = flag[half:]

这里将flag分为了长度相等的两半,每段长度为19

secret_num = getPrime(1024) * bytes_to_long(secret)

p = sympy.nextprime(secret_num)
q = sympy.nextprime(p)

通过这部分我们可以得到p和q相邻,因为q是p的下一个质数

F1 = bytes_to_long(flag1)
F2 = bytes_to_long(flag2)

将两部分flag转成数值

c1 = F1 + F2
c2 = pow(F1, 3) + pow(F2, 3)
assert(c2 < N)

c1为F1与F2的和

c2为F1与F2的立方和

并且保证c2<N

m1 = pow(c1, e, N)
m2 = pow(c2, e, N)

\(c1^e ≡ m1 (mod N)\)

\(c2^e ≡ m2 (mod N)\)

也就是我们得到的m1与m2

以上就是题目加密的一个思路,涵盖的知识点是RSA,且p与q相邻

我们逆着题目加密的过程进行解密

  • 首先通过m1 , m2得到c1 , c2

\(m1^d ≡ c1 (mod N)\)

\(m2^d ≡ c2(mod N)\)

pow(m1 , d , N) pow(m2 , d , N)

接着我们可以通过z3来对F1F2进行求解

\(F1 + F2 = c1\)

\(F_1^3 + F_2^3 = c2\)

得到F1F2后,就相当于得到flag的两部分了

GWHT{f709e0e2cfe7e530ca8972959a1033b2}

标签:F2,babyRSA,m1,pow,flag,GWCTF,2019,m2,c2
来源: https://www.cnblogs.com/m1nus/p/16637957.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有