已知p高位攻击

题目:

from Crypto.Util.number import *

p = getPrime(512)
q = getPrime(512)

flag = b'NSSCTF{******}'

n = p*q
m = bytes_to_long(flag)

e = 65537
c = pow(m, e, n)

print(f'n = {n}')
print(f'p = {p>>100}')
print(f'c = {c}')

'''
n = 64335017257291288694879798080666629573501118113377179370850991421806469826103134483305987256497147128148330360834028920504233940886960965527818740354522230977284177508093687651712761343376265176857120577153061490788347779327206437787594150381508592990273475278503352979893670354730287704989079247190299342871
p = 7550547038897825994210519739007596111285476244196123253081036462313916767780871742001683690783926938603422562506786339392389
c = 63156227746402147833665215816432368072100003179308515827461336094419526246728847463629131014545663919689064970828884371592840335299717484415279040662500514230579275586231051576688620810169339105201465431624989678170362157914366609856305650090630980489686792938272599406165204410721499875713189193728688835223
'''

解题思路:

解答:

n = 64335017257291288694879798080666629573501118113377179370850991421806469826103134483305987256497147128148330360834028920504233940886960965527818740354522230977284177508093687651712761343376265176857120577153061490788347779327206437787594150381508592990273475278503352979893670354730287704989079247190299342871
p = 7550547038897825994210519739007596111285476244196123253081036462313916767780871742001683690783926938603422562506786339392389
c = 63156227746402147833665215816432368072100003179308515827461336094419526246728847463629131014545663919689064970828884371592840335299717484415279040662500514230579275586231051576688620810169339105201465431624989678170362157914366609856305650090630980489686792938272599406165204410721499875713189193728688835223

p = p<<100

PR.<x> = PolynomialRing(Zmod(n))

f = p+x
res = f.small_roots(X=2^100, beta=0.4)

p = int(res[0]) + p
q = n // p
print(q)
#6721550066444528756360879691786852326594768150136608705178509535510621131604573156628481384415496807903345481584053754911989074929680660717971111800882653
d = inverse_mod(65537, (p-1)*(q-1))
m = power_mod(c, d, n)
print(hex(m))
#0x4e53534354467b33366135616534382d663238312d343537362d386431662d6163616230363636626666327d
#NSSCTF{36a5ae48-f281-4576-8d1f-acab0666bff2}
posted @ 2025-03-11 22:05  sevensnight  阅读(16)  评论(0)    收藏  举报