✨ 攻撃者の情報量による分類
暗号攻撃は「攻撃者が何を知っているか」によって分類されます:
| 攻撃モデル | 攻撃者が持つ情報 | 現実の対応例 |
|---|---|---|
| 暗号文単独攻撃(COA) | 暗号文のみ | 通信傍受のみの場合 |
| 既知平文攻撃(KPA) | 暗号文+対応する平文の一部 | 定型文(「Dear Sir」など)が推測できる場合 |
| 選択平文攻撃(CPA) | 任意の平文を暗号化させた結果を取得できる | 暗号システムへのアクセスがある場合 |
| 選択暗号文攻撃(CCA) | 任意の暗号文を復号させた結果を取得できる | パディングオラクル攻撃等 |
現代の良い暗号方式はCCA安全(選択暗号文攻撃に対しても安全)であることが求められます。AES-GCM・RSA-OAEPなどが該当します。
🔸 総当たり攻撃(ブルートフォース)
すべての可能な鍵を試す最もシンプルな攻撃。鍵長が安全性を決定します:
- DES の56ビット鍵:約7200万通り → 1999年にEFF Deep Crackが22時間で解読
- AES-128:約3.4×10³⁸通り → 地球の年齢分の時間があっても不可能
- AES-256:約1.2×10⁷⁷通り → 宇宙規模でも不可能
🔸 誕生日攻撃(Birthday Attack)
「誕生日のパラドックス」に基づく攻撃手法。「23人のグループで同じ誕生日の人がいる確率は50%超」という統計的な直感に反する事実を利用します。
ハッシュ衝突への応用:nビットのハッシュ関数で衝突(異なる入力から同じハッシュ値)を見つけるには、ブルートフォースなら2n通り試す必要がありますが、誕生日攻撃を使えば約2^(n/2)通りで見つかります。
- MD5(128ビット):誕生日攻撃で2^64回 → 2004年に現実的な衝突生成に成功。現在廃止
- SHA-1(160ビット):2017年にGoogleがシャム攻撃で衝突デモ。主要用途で廃止
- SHA-256(256ビット):誕生日攻撃でも2^128回 → 現在も安全
🔸 中間一致攻撃(Meet-in-the-Middle)
二重DES(2DES)が期待の56×2=112ビットの安全性を持たない理由がこの攻撃です。
攻撃者は平文側とDESで一通り計算した結果と、暗号文側を逆DESで一通り計算した結果を突き合わせることで、2^56×2の計算量ではなく2^57の計算量で鍵を特定できます。このため2DESは実質的に単一DESより少しだけ強い程度に過ぎず採用されませんでした。3DESが開発された理由の一つです。
🔸 差分解析・線形解析
1990年代に開発された統計的な攻撃手法。多数の(平文・暗号文)ペアを収集し、統計的なパターンから鍵情報を推測します。現代の暗号(AES等)はこれらの攻撃に対して耐性を持つよう設計されています。
📌 まとめ:各攻撃への対策
- 総当たり攻撃 → 十分な鍵長(AES-128以上・RSA-2048以上)で対策
- 誕生日攻撃 → 出力長が十分なハッシュ関数(SHA-256以上)で対策
- 中間一致攻撃 → 2DESでなく3DESやAESを使う
- 差分・線形解析 → 現代の標準暗号(AES等)は設計段階で耐性あり
- パディングオラクル → AES-GCMなどAEAD方式で根本解決
- どの攻撃も独自実装よりも標準ライブラリを使うことで回避しやすい
