チャレンジ一覧
プログラミング - PINの総当たり
/challenge/vault.json は、コンテナの起動のたびに乱数で作り直される金庫の記録です。salt(16進文字列)と、pin_hash = sha256(salt + pin)(salt と6桁の pin を文字列のまま連結して UTF-8 にしたもののハッシュ)が入っています。000000 から 999999 までを総当たりして pin_hash に一致する6桁の PIN(先頭の 0 も含む)を見つけ、python3 challenge.py '<PIN>' に渡してください。正しいときだけフラグが表示されます。
プログラミング - ハッシュ検証と復号
起動のたびに乱数で作られた証拠ファイル artifact-manifest.json を解析します。artifact(artifact_00 から artifact_09)ごとに複数のレコード(name・sha256・data)があり、正しいのは data を Base64 デコードした SHA-256 が sha256 欄と一致する1件だけです。正しいレコードの中身を SHA-256(name) のダイジェストで XOR 復号し、artifact 番号の順につないだ40文字(小文字英数字)が答えです。答えを `python3 challenge.py '<答え>'` に渡すと、正解のときだけフラグが表示されます。
プログラミング - バイナリTLVの解析
/challenge/capture.bin は、コンテナの起動のたびに乱数で作り直される独自形式のバイナリです。先頭4バイトは KBIN、続いて TLV レコード(type 1バイト、length 2バイト(ビッグエンディアン)、value)が並び、type 0x7F(長さ 0)が終端です。type 0x10 と 0x20 の value はそのまま、それ以外の value は各バイトを 0x5A で XOR して格納されています。type が 0x42 のレコードの value を、ファイルの中の順番どおりに取り出して 0x5A で XOR し、つないだトークン(英小文字と数字)を python3 challenge.py '<トークン>' に渡してください。正しいときだけフラグが表示されます。
レインボーテーブル攻撃
ソルトなしの高速ハッシュは、事前計算された逆引きDBで簡単に破られる場合があります。与えられたMD5ハッシュを逆引きしてください。 MD5ハッシュ: 5f4dcc3b5aa765d61d8327deb882cf99 このハッシュを逆引きし、元の文字列を KINOCO{...} の形式で提出してください。
ワンタイムパッド鍵再利用攻撃
ワンタイムパッドは鍵を一度だけ使う場合に安全です。同じ鍵を再利用すると、既知平文から別の平文を復元できます。 同じ鍵で暗号化された2つの暗号文: ciphertext1_hex = 1c0a070901 known_plaintext1 = HELLO ciphertext2_hex = 060a1e160b known_plaintext1 と ciphertext1 から鍵を復元し、ciphertext2 をXORで復号してください。復号した文字列を KINOCO{...} で包んだものがフラグです。
予測可能な乱数
固定seedの疑似乱数は再現できます。暗号用途で一般用途の乱数を使ってはいけません。 フラグ生成コード: import random random.seed(12345) flag_chars = [chr(random.randint(65, 90)) for i in range(10)] print("KINOCO{" + "".join(flag_chars) + "}") 同じPythonコードを実行し、生成されるフラグを提出してください。
小さいRSA鍵の破壊
RSAは十分大きな素数を使うことで安全性を保ちます。この問題では小さすぎるnを素因数分解し、秘密指数を求めて暗号文列を復号します。 公開鍵と暗号文: n = 323 e = 5 ciphertexts = [115, 181, 241, 109, 109, 57, 190, 115, 241, 57, 65, 271, 49, 115, 57, 241, 190, 271, 57, 85, 271, 241, 65] nを素因数分解して秘密指数dを求め、各暗号文を復号してください。復号した文字列を KINOCO{...} で包んだものがフラグです。
暗号解析 - アフィン暗号の解読
ciphertext.txtは、英文の報告書をアフィン暗号 E(x) = (a×x + b) mod 26 で暗号化したものです。大文字・小文字は保たれ、英字以外はそのままです。平文が KINOCO という単語で始まることを手がかりに鍵a, bを求めて復号し、最後の行のフラグを提出してください。
正規表現 - 一度だけ出現する黄金の記号
data.txt から KINO-数字4桁-英大文字4文字の記号をすべて抽出し、一度だけ出現する値を challenge.py に入力してください。正解時に起動時注入 FLAG が表示されます。