選択された暗号文攻撃(CCA)とは:定義・仕組み・対策

選択された暗号文攻撃(CCA)の定義・仕組み・実例・対策を分かりやすく解説。RSAや防御策(RSA-OAEP、Cramer-Shoup等)も紹介。

著者: Leandro Alegsa

選択された暗号文攻撃(Chosen-Ciphertext Attack: CCA)とは、暗号解読者が暗号文を選択し、未知の鍵の下でその復号を得ることで、少なくとも部分的には情報を収集するという暗号解読の攻撃モデルである。 簡単に言えば、攻撃者が「復号の問い合わせ(復号オラクル)」を持っている状況を想定し、その回答から秘密情報(例えば鍵や平文)を得ようとする攻撃です。

CCA の種類(非適応・適応)

  • CCA1(通常は「lunchtime attack」):攻撃者がチャレンジ(攻撃対象の暗号文)を得る前に復号オラクルへ問い合わせができるが、チャレンジ取得後は問い合わせできないモデル。
  • CCA2(適応型選択暗号文攻撃):攻撃者はチャレンジの前後いずれの段階でも復号オラクルに問い合わせできるが、チャレンジそのものの復号は許されない。実務上、CCA2耐性が要求されることが多い。

安全性の定義(IND-CCA)

公開鍵暗号では「IND-CCA(indistinguishability under chosen-ciphertext attack)」という形式的な定義があり、これを満たす暗号方式はCCA(特にCCA2)に対して安全と見なされます。IND-CCA を満たす方式は、攻撃者が得られる情報からチャレンジ暗号文の元の平文を識別できないことを保証します。

具体的な攻撃例

  • RSA の古いパディング(PKCS#1 v1.5)に対するBleichenbacherの「パディングオラクル攻撃」:復号処理から返されるエラーの違いを利用して秘密情報を逐次復元する。これは実装上の小さな情報漏れで致命的になる例です。
  • ブロック暗号のCBCモードに対するVaudenayのパディングオラクル攻撃や、TLS における「Lucky Thirteen」のようなタイミングに関する副次情報漏洩を利用する攻撃。
  • メッセージの署名と復号化で同じ原理(例えば素のRSA)を使う場合、署名対象にハッシュや適切なパディングが使われていないと、復号オラクルから署名が算出できてしまうことがある(実装次第で署名システムが攻撃可能になる)。

影響・リスク

CCAに耐性がないと、以下のような被害が生じます。

  • 機密文の復元(部分的または完全)
  • 第三者による偽造メッセージの生成(非改ざん性の破壊)
  • プロトコル全体の破壊(例えば認証やセッション鍵の漏洩につながる)

実装上の注意点と対策

  • 復号オラクルを公開しない:可能な限り、外部からの任意復号要求に対する応答を避ける。サービスが復号結果や詳細なエラーメッセージを返す設計は危険。
  • エラー情報を均一化する:パディングエラーやフォーマットエラーなどで異なる応答や処理時間を出さない(タイミングや内容から情報が漏れないようにする)。
  • 認証付き暗号(AEAD)を使う:対称鍵暗号では 認証済み対称暗号(AES-GCM、ChaCha20-Poly1305 など)を用いることで、改ざん検出と復号オラクルの悪用を防げる。
  • 公開鍵暗号では IND-CCA 安全な方式を選ぶ:RSA を使う場合は OAEP(RSA-OAEP)を使う、または Cramer–Shoup のように証明可能安全性を持つ方式を採用する。生の RSA や適切に保護されていないパディングは避ける。
  • 鍵包絡(KEM/DEM)やハイブリッド暗号設計:KEM(鍵交換)で共通鍵を安全に確立し、DEM(データ暗号化)で AEAD を使う構成は実装上の安全性が高くなる。
  • 署名ではハッシュと適切なパディングを使用:署名処理と復号処理を同じ原理で行う場合、署名前に固定されたハッシュ関数や適切なエンコードを行い、復号オラクルを攻撃に使えないようにする。
  • 最新のプロトコル仕様に従う:TLS 1.3 のように過去の脆弱性を排したプロトコルを使う。古いバージョンは既知の CCA 標的になりやすい。

推奨アルゴリズム・設計方針

  • 公開鍵暗号:RSA-OAEP、Cramer-Shoup、適切に実装した ECIES(KDF+MAC)など、IND-CCA を考慮した方式。
  • 対称鍵暗号:AES-GCM、AES-GCM-SIV、ChaCha20-Poly1305 のような AEAD 構成。
  • プロトコル設計:encrypt-then-MAC、エラーハンドリングを統一、タイミング攻撃対策(定数時間処理)などの実装ガイドラインに従う。

まとめ

選択された暗号文攻撃(CCA)は、復号オラクルの存在や実装上の情報漏洩(エラーメッセージやタイミング差)を突く強力な攻撃モデルです。実務では CCA2(適応型)に対する耐性を持つ暗号方式や AEAD を選択し、エラーハンドリングやパディング処理を慎重に実装することが重要です。特に既知の脆弱性(古いパディング方式や不適切なエラーメッセージ)には注意し、証明可能安全性のある方式を採用することを推奨します。

選択された暗号文による攻撃の種類

選択された暗号文を使った攻撃は、他の攻撃と同様に、適応型と非適応型があります。非適応型の攻撃では、攻撃者は事前に復号する暗号文を選択し、その結果得られる平文を利用してさらに暗号文を選択することはありません。適応型選択暗号文攻撃では、攻撃者は暗号文の選択を適応的に行います(つまり、以前の復号化の結果に応じて)。

ランチタイムアタック

選択された暗号文を用いた攻撃の中でも、特に注目されているのが「ランチタイム攻撃」または「ミッドナイト攻撃」です。この攻撃では、攻撃者は適応的な選択された暗号文の問い合わせを行うことができますが、それはある時点までで、その後はシステムを攻撃する能力が向上していることを示さなければなりません。ランチタイムアタック」とは、ユーザーがランチに出かけている間に、復号化機能を持つユーザーのコンピュータが攻撃者に利用されてしまうというものです。明らかに、攻撃者が適応的に選択された暗号文を照会する能力を持っていれば、少なくともその能力が奪われるまでは、どんな暗号化メッセージも安全ではありません。この攻撃は、「非適応型選択暗号文攻撃」と呼ばれることもあります。ここでいう「非適応型」とは、攻撃者が、選択暗号文の問い合わせ能力が失効した後に与えられるチャレンジに応じて、問い合わせを適応できないことを意味しています。

例えば、ベル研究所のDaniel Bleichenbacherは、RSAセキュリティが発明・公開したPKCS#1を使用したシステムに対する実用的な攻撃を実演しましたが、実用上重要な選択暗号文攻撃の多くはランチタイム攻撃です。

適応型選択暗号文攻撃

完全適応型選択暗号文攻撃とは、チャレンジ暗号文が攻撃者に与えられる前と後に、暗号文を適応的に選択することができる攻撃のことで、チャレンジ暗号文自体を照会することができないという条件が付いています。これはランチタイム攻撃よりも強力な攻撃概念であり、CCA1(ランチタイム)攻撃と比較して、一般的にCCA2攻撃と呼ばれています。実際にはこのような形式の攻撃はほとんどありません。むしろ、このモデルは、選択された暗号文攻撃に対する安全性を証明するために重要です。このモデルでの攻撃が不可能であることを証明することは、実用的な選択された暗号文による攻撃が実行できないことを意味します。

適応型選択暗号文攻撃に対して安全であることが証明されている暗号システムには、Cramer-ShoupシステムとRSA-OAEPがあります。

関連ページ

  • 暗号文のみの攻撃
  • チョーセンプレインテキスト攻撃
  • Known-Plaintext攻撃

質問と回答

Q: 選択暗号文攻撃とは何ですか?


A: 選択暗号文攻撃(CCA)とは、暗号解読の攻撃モデルの一つで、暗号解読者が暗号文を選択し、未知の鍵の下でその解読を得ることによって、少なくとも部分的には情報を収集するものである。

Q: なぜ実装者は、攻撃者が選択した暗号文を復号できる可能性がある状況を避けるために注意しなければならないのか?


A: 暗号システムが選択暗号文攻撃に弱い場合、部分的に選択された暗号文でも微妙な攻撃が可能なため、攻撃者が選択暗号文を復号できる可能性がある状況を避ける(復号方式を提供しない)よう、実装者は注意しなければなりません。

Q: 署名するメッセージにハッシュを使用しない場合、どのような暗号方式が攻撃に対して脆弱か?


A: いくつかの暗号方式(RSAなど)は、メッセージの署名と復号に同じ機構を使用しています。このため、署名するメッセージにハッシュを使用しない場合、攻撃を受ける可能性があります。

Q: 選択暗号文攻撃モデルによる攻撃を回避するために、より良い方法は何か?


A: RSA-OAEP、Cramer-Shoup、多くの認証済み対称暗号など、選択暗号文攻撃に対して安全であることが証明されている暗号システムを使用するのがよいでしょう。

Q: RSA-OAEPは何の略か?


A: RSA-OAEPは、RSA Optimal Asymmetric Encryption Paddingの略です。

Q: 暗号システムが選択暗号文攻撃に対して脆弱であることの結果の1つは何ですか?


A: 暗号システムが選択暗号文攻撃に対して脆弱であることの結果の一つは、攻撃者が選択暗号文を復号できる可能性がある状況を避けるために、実装者が注意しなければならないことです(すなわち、復号スキームを提供しないことです)。

Q: 部分的に選択された暗号文はどのような攻撃を許すことができますか?


A: 部分的に選択された暗号文は、微妙な攻撃を可能にすることができます。


百科事典を検索する
AlegsaOnline.com - 2020 / 2025 - License CC3