この大会は2023/9/9 6:00(JST)~2023/9/11 6:00(JST)に開催されました。
今回もチームで参戦。結果は900点で653チーム中52位でした。
自分で解けた問題をWriteupとして書いておきます。
Welcome (welcome)
Discordに入り、#announcementチャネルのメッセージを見たら、フラグが表示された。
SECCON{Welcome_to_SECCON_CTF_2023}
plai_n_rsa (crypto)
RSA暗号で、e, d, hint(=p+q), cがわかっている。
phi = n - hint + 1 phi * a = d * e - 1 (aはe未満)
aを総当たりして、phiからnを求める。それからn、d, eからp, qを求め、p + qがhintと同じ値になるものを探す。あとは通常通り復号すればよい。
#!/usr/bin/env python3 from Crypto.Util.number import * from Crypto.PublicKey import RSA with open('output.txt', 'r') as f: params = f.read().splitlines() e = int(params[0].split('=')[1]) d = int(params[1].split('=')[1]) hint = int(params[2].split('=')[1]) c = int(params[3].split('=')[1]) for a in range(1, e): if (d * e - 1) % a == 0: phi = (d * e - 1) // a n = phi - 1 + hint try: rsa = RSA.construct((n, e, d)) p = rsa.p q = rsa.q if p + q == hint: break except: continue m = pow(c, d, n) flag = long_to_bytes(m).decode() print(flag)
SECCON{thank_you_for_finding_my_n!!!_GOOD_LUCK_IN_SECCON_CTF}