この大会は2021/12/4 19:30(JST)~2021/12/05 19:30(JST)に開催されました。
今回もチームで参戦。結果は384点で187チーム中48位でした。
自分で解けた問題をWriteupとして書いておきます。
Sanity Check (Misc)
問題にフラグが書いてあった。
VULNCON{g00d_luck_4nd_Have_fun}
mfine (Crypto)
フラグの各文字についてALPHAのインデックスをiとしたときに、(a * i + b) % mが暗号になっている。メッセージにどのように文字が入っているか不明なので、a, bについて1~m-1でブルートフォースして復号する。
#!/usr/bin/env python3 from Crypto.Util.number import * def decrypt(ciphertext, a, b): plaintext = '' for letter in ciphertext: i = ALPHA.index(letter) c = ((i - b) * inverse(a, m)) % m plaintext += ALPHA[c] return plaintext ALPHA = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ{}_ #' m = len(ALPHA) with open('cipher.txt', 'r') as f: cipher = f.read().replace('\n', '') found = False for a in range(1, m): for b in range(1, m): message = decrypt(cipher, a, b) if 'VULNCON{' in message: found = True print(message) break if found: break
復号結果は以下の通り。
THE AFFINE CIPHER IS A TYPE OF MONOALPHABETIC SUBSTITUTION CIPHER WHERE EACH LETTER IN AN ALPHABET IS MAPPED TO ITS NUMERIC EQUIVALENT ENCRYPTED USING A SIMPLE MATHEMATICAL FUNCTION AND CONVERTED BACK TO A LETTER THE FLAG FOR YOU IS VULNCON{3V3RYTH1NG_C4N_B3_BR0K3N_1F_Y0U_AR3_5M4RT_3N0UGH} THE FORMULA USED MEANS THAT EACH LETTER ENCRYPTS TO ONE OTHER LETTER AND BACK AGAIN MEANING THE CIPHER IS ESSENTIALLY A STANDARD SUBSTITUTION CIPHER WITH A RULE GOVERNING WHICH LETTER GOES TO WHICH SINCE THE AFFINE CIPHER IS STILL A MONOALPHABETIC SUBSTITUTION CIPHER IT INHERITS THE WEAKNESSES OF THAT CLASS OF CIPHERS
この文章の中にフラグがあった。
VULNCON{3V3RYTH1NG_C4N_B3_BR0K3N_1F_Y0U_AR3_5M4RT_3N0UGH}