Cryptography

暗号を学べるCTF問題

古典暗号から現代暗号の基礎まで、暗号化・復号・エンコードの違いを問題を通じて学びます。

この分野で学べること

  • 暗号化とエンコードの違い
  • 代表的な暗号方式の特徴
  • 暗号データを分析する手順

初めての方はLevel 1から始め、解けたら次の難易度へ進むのがおすすめです。

暗号のチャレンジ

15件の問題から選べます。

Cryptography Level 1: ★☆☆☆☆

02. 隠された秘密 - Base64デコード

Base64は、バイナリデータをテキストで送るために使われるエンコード方式です。 暗号化ではありませんが、パッと見で内容が分からないので隠蔽によく使われます。 次のBase64エンコードされた文字列をデコードしてフラグ...

Cryptography Level 1: ★☆☆☆☆

11. シーザー暗号を解読せよ

シーザー暗号は、古代ローマの将軍ジュリアス・シーザーが使っていた最も古典的な暗号の一つです。 アルファベットを一定の文字数だけずらす(シフトする)ことで暗号化します。 暗号文: IODJ{fdhvdu_flskhu_e...

Cryptography Level 1: ★☆☆☆☆

14. ROT13の魔法

ROT13(Rotate 13)は、シーザー暗号の一種で、アルファベットを13文字シフトする暗号です。 ROT13の面白い特徴:同じ操作を2回行うと元に戻ります! これは、アルファベットが26文字なので、13の2倍=2...

Cryptography Level 2: ★★☆☆☆

AES-ECBモードの脆弱性

ECBモードは同じ平文ブロックが同じ暗号文ブロックになるため、パターンが漏れます。この入門問題では、まず暗号化とエンコードの違いを確認します。 16進数データ: 4b494e4f434f7b6563625f6d6f64...

Cryptography Level 2: ★★☆☆☆

RC4ストリーム暗号の脆弱性

RC4は過去に広く使われましたが、現在は非推奨です。この入門問題では渡されたデータ形式を見抜きます。 Base64文字列: S0lOT0NPe3JjNF9pc19kZXByZWNhdGVkfQ== これは実際にはRC...

Cryptography Level 2: ★★☆☆☆

Vigenère暗号の解読

Vigenere暗号は複数のシーザー暗号を組み合わせた古典暗号です。鍵長が分かっている暗号文を復号し、フラグを取得してください。 暗号文: KMNRCS{vlginhri_clpleu_axtdco} 鍵の長さは4文...

Cryptography Level 2: ★★☆☆☆

ハッシュ衝突の発見

MD5では異なる入力が同じハッシュ値になる衝突が実用的に作れます。衝突耐性が破られたハッシュを安全用途に使ってはいけません。 同一MD5を持つとされる2つのファイル: file_a != file_b md5(file...

Cryptography Level 2: ★★☆☆☆

ハッシュ長拡張攻撃

MD5、SHA-1、SHA-256などの構造では、secret || message の単純ハッシュを署名にすると長さ拡張攻撃を受ける場合があります。 既知のメッセージとSHA-256: message = "user...

Cryptography Level 2: ★★☆☆☆

パディングオラクル入門

パディングオラクル攻撃では、エラーの違いが平文復元の手がかりになります。この入門問題では、漏えいしたBase64文字列からフラグを読み取ります。 漏えいしたBase64文字列: Vmlld1NvdXJjZTpLSU5P...

Cryptography Level 2: ★★☆☆☆

レインボーテーブル攻撃

ソルトなしの高速ハッシュは、事前計算された逆引きDBで簡単に破られる場合があります。与えられたMD5ハッシュを逆引きしてください。 MD5ハッシュ: 5f4dcc3b5aa765d61d8327deb882cf99 ...

Cryptography Level 2: ★★☆☆☆

ワンタイムパッド鍵再利用攻撃

ワンタイムパッドは鍵を一度だけ使う場合に安全です。同じ鍵を再利用すると、既知平文から別の平文を復元できます。 同じ鍵で暗号化された2つの暗号文: ciphertext1_hex = 1c0a070901 known_p...

Cryptography Level 2: ★★☆☆☆

予測可能な乱数

固定seedの疑似乱数は再現できます。暗号用途で一般用途の乱数を使ってはいけません。 フラグ生成コード: import random random.seed(12345) flag_chars = [chr(rando...

Cryptography Level 2: ★★☆☆☆

小さいRSA鍵の破壊

RSAは十分大きな素数を使うことで安全性を保ちます。この問題では小さすぎるnを素因数分解し、秘密指数を求めて暗号文列を復号します。 公開鍵と暗号文: n = 323 e = 5 ciphertexts = [115, ...

Cryptography Level 4: ★★★★☆

暗号解析 - DSA nonce再利用による秘密鍵復元

signatures.jsonには同じnonceを再利用した2つのDSA署名があります。署名差分からnonce kと秘密鍵xを復元し、SHA256(str(x))を繰り返しXOR鍵として暗号化フラグを復号してください。

Cryptography Level 5: ★★★★★

暗号解析 - RSA e=3ブロードキャスト攻撃

broadcast.jsonには同じ平文をパディングなしRSA・e=3で3つの互いに素なmodulusへ暗号化した結果があります。中国剰余定理と整数立方根で平文を復元してください。