ctf-writeups

CTF scripts and writeups (mostly challenge + .py solving script)

View on GitHub

Kryptoplikation

Vi får et krypto-system hvor hver byte i flaget er krypteret via (bogstav * key) % P

Så vi vil finde en løsning til bogstav[0] * key == ct[0] (mod P)

Det gør vi ved at omskrive til: key = ct[0] * bogstav[0]^-1 (mod P)

Når vi kender key kan vi endnu engang finde den modular inverse mod P og gange med cipherteksten:

Så er løsningen: bogstav[0] = ct[0] * key^-1 (mod P)

Solve

ct = eval(open("krypteret.txt", "rt").read())
P = 13187894026947502600331395231459335882158393410614133036296342117478704820555154018132946245287063906492618556075499328589037764675831105264487871422591331

mod_inv = pow(ord('N'), -1, P)  # = N^-1 mod P
key = (ct[0] * mod_inv) % P
print(f'{key=}')
# key=4056284460887128042279888677032084765613378016096367436329224866578906500140582049600556365818223401072149740398210458751202059533973667401449003523637208

d = pow(key, -1, P)  # key^-1  (mod P)

for bogstav in ct:
    print(chr((bogstav * d) % P), end='')
print('')

Flag

Flag: NC3{https://www.cryptoisnotcryptocurrency.com/}