john_pollard

This commit is contained in:
Maxime Vorwerk
2024-08-01 15:34:55 +02:00
parent 75e13cc39d
commit d4172bd228
3 changed files with 106 additions and 0 deletions

48
john_pollard/sol.py Executable file
View File

@@ -0,0 +1,48 @@
#!python3
from pwn import *
import re
def pollard_rho(n):
x0 = 2
d = 1
while True:
if x0 == n:
return -1
x = x0
y = x
g = lambda x: (pow(x, 2, n) + 1)%n
while d == 1:
x = g(x)
y = g(g(y))
d = math.gcd(abs(x-y), n)
if d == n:
x0 += 1
else:
return d
with open("cert.plaintext", 'r') as f:
lines = f.readlines()
modulus = lines[13].strip()
modulus = int(re.findall("\(.*\)", modulus)[0][3:-1], 16)
log.info("modulus: {}".format(modulus))
exponent = lines[14].strip()
exponent = int(re.findall("\(.*\)", exponent)[0][3:-1], 16)
log.info("exponent: {}".format(exponent))
signature = lines[17:-13]
signature = int(''.join(map(lambda l: l.strip(), signature)).replace(':', ''), 16)
log.info("signature:")
log.hexdump(pack(signature, 'all', 'big', False))
log.info("factoring modulus")
p = pollard_rho(modulus)
q = modulus//p
assert p*q == modulus
log.success("p: {}".format(p))
log.success("q: {}".format(q))
log.success("flag1: picoCTF{{{},{}}}".format(p, q))
log.success("flag2: picoCTF{{{},{}}}".format(q, p))