ICode9

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

第四届浙江省大学生网络与信息安全竞赛(决赛)dssssa1复现

2021-11-05 18:34:02  阅读:241  来源: 互联网

标签:powmod random randint invert 信息安全 dssssa1 这题 复现 import


附件下载得到的encode脚本:

from Crypto.Util.number import *
import random
from gmpy2 import *
from hashlib import sha1
from secret import flag


m = bytes_to_long(flag)
q = getPrime(160)

while True:
    p = getPrime(1024)
    if (p-1) % q == 0:
        break
        
h = random.randint(1, p-2)
g = powmod(h, (p-1)//q, p)
x = random.randint(1, q-1)
y = powmod(g, x, p)

k = random.randint(1, q-1)
h = bytes_to_long(sha1(flag).digest())
r = powmod(g, k, p) % q
s = (h + x*r) * invert(k, q) % q

c = powmod(m, x, p*q)

print(p, q, g, y, h, r, s, c, k, sep=',')

# p = 94515040220263097875872541668071470619435707358211716562219917331797767488022053087267566586709944785329708571559126640339609375166385904147189950035630910404534642622114804635856314928438531544553236458244225698694846607333226704467932079712515971615643868209281460429629880920550469170449935295454629293399
# q = 1001535514136994695529636128311212301250326767869
# g = 89288700225171676599759774184146798321191748739703246395529001979988401303800066044674449834184095667747898974375431700503800142840899194492182057885675147681600217979466719692984863330298347742657472936559041930489702116255999412448996714923112824244267910808782794442895518685864174817501040060680962447941
# y = 93887528695360292524813814240190328732283663255426806128197957720674496260060703595933676082882204724501085633424942582304707395449222043328895852812543576418567716781870179606049899540449729036771290550645770978667075821043797569255787271932556218014920373462882329802597672026806552417735660553144344650642
# h = 775593521305134275967472254218401264703166138817
# r = 75084117510316201869105133948164969652170742276
# s = 599417004454208825884865529281453774324093134827
# c = 94203926294365722030261882520165826558476099177297861176153811285238289485953276649563642144753132730431066372867407177248194182778827143183520415437355921352580608448713381897280433120409711633310458263502217605470824497215111936036532237050330222480782799188409969149722885261258984444311562364318406725475829089368796269160936194172040318140462371217663
# k = 208672457767877303895327222020982963931779123819

题给的变量很多,开始拿到这题的时候愣住了,但是不难看出来x是这题的关键,求出x即可正常解RSA。

赛后看了4xwi11佬的博客才发现,这题真的不难QAQ

告诉了

s = (h + x*r) * invert(k, q) % q

根据这一加密就不难推测出x

x = ((s * k -h)*invert(r,q))%q

呜呜呜,佬说简单推导都不算。

贴上exp:

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

p = 94515040220263097875872541668071470619435707358211716562219917331797767488022053087267566586709944785329708571559126640339609375166385904147189950035630910404534642622114804635856314928438531544553236458244225698694846607333226704467932079712515971615643868209281460429629880920550469170449935295454629293399
q = 1001535514136994695529636128311212301250326767869
g = 89288700225171676599759774184146798321191748739703246395529001979988401303800066044674449834184095667747898974375431700503800142840899194492182057885675147681600217979466719692984863330298347742657472936559041930489702116255999412448996714923112824244267910808782794442895518685864174817501040060680962447941
y = 93887528695360292524813814240190328732283663255426806128197957720674496260060703595933676082882204724501085633424942582304707395449222043328895852812543576418567716781870179606049899540449729036771290550645770978667075821043797569255787271932556218014920373462882329802597672026806552417735660553144344650642
h = 775593521305134275967472254218401264703166138817
r = 75084117510316201869105133948164969652170742276
s = 599417004454208825884865529281453774324093134827
c = 94203926294365722030261882520165826558476099177297861176153811285238289485953276649563642144753132730431066372867407177248194182778827143183520415437355921352580608448713381897280433120409711633310458263502217605470824497215111936036532237050330222480782799188409969149722885261258984444311562364318406725475829089368796269160936194172040318140462371217663
k = 208672457767877303895327222020982963931779123819

n = p * q
phi = (p-1) * (q-1)
#s = (h + x*r) * invert(k, q) % q
x = ((s * k -h)*invert(r,q))%q
#print(x.bit_length())
d = invert(x,phi)
m = pow(c,d,n)
print(long_to_bytes(m))

运行即可得到:

160
b'DASCTF{1d6f9460a596a4b38acc7263ea37b84d}'

标签:powmod,random,randint,invert,信息安全,dssssa1,这题,复现,import
来源: https://www.cnblogs.com/21r000/p/15514643.html

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

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

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

ICode9版权所有