暗号化はバイトを隠し、認証はそれを証明する

機密性と完全性は別々の性質であり、後者なしに前者を持つことはあり得ます。データを隠すだけの暗号方式は、渡されたものを何でも復号します——攻撃者が途中で改変したバイトも含めて——そして何事もなかったかのように、その結果をアプリケーションに渡します。

認証付き暗号化は、そのすき間を閉じます。暗号文とあわせて認証タグを生成し、タグが一致しなければ復号はきっぱりと失敗します。保管庫にとって、これは聞こえる以上に重要です。もう一方の選択肢は、改変されたファイルを黙って表示することだからです。

AES-GCM が実際に兼ね備えるもの

AES-GCM は、両方の性質を一度に提供する、確立された構成の1つです。AES をカウンターモードで暗号化し、暗号文に対して認証タグを計算するので、単一の操作で機密性と改ざん検出を実現します。

この構成は、その入力の良し悪しに左右されます。ある鍵のもとで暗号化のたびに一意のノンスを使うこと、そしてその鍵が正しく導出・保管されることに依存します。そのどちらも、アルゴリズム名を挙げるだけでは保証されません。

ノンス管理が静かな失敗の様式である理由

ノンスは、同じ鍵に対して決して繰り返してはならない値です。カウンターモードの構成でそれを再利用すると、そのモードが与えるはずの保証が損なわれ、暗号化された記録同士の関係が露出し得ます。

これはどんなストアの掲載情報も触れない実装の細部であり、それ以外は標準的な設計が誤る、より一般的な様式の1つです。技術文書を公開しているどの保管庫にも、尋ねてよい正当な質問です。

鍵導出と鍵の保管は別々の制御

入力したものから鍵を導出することは1つの問題であり、アプリが閉じている間、その導出した鍵を安全に保つことは別の問題です。保管庫は前者をうまくやりつつ、後者をまずくやることがあり得ます。

これを、2つの答えを持つ2つの問いとして扱ってください。どの関数が、どれだけのコストで認証情報を鍵素材に変えるのか、そして、その結果できた鍵はセッションの間どこに存在するのか。プラットフォームの鍵保管は、まさに後者に答えるために存在します。

文書で探すべきもの

  • 鍵の長さだけでなく、名前の付いた認証付き暗号化の構成。
  • 暗号化ごとのノンスの一意性についての記述。
  • ファイル本体と並んでファイル名やメタデータが保護されるかどうか。
  • 鍵導出と鍵の保管が、別々の仕組みとして説明されていること。
  • 認証の不一致時に、部分的・最善努力の表示ではなく、明確に失敗すること。

主張を批判的に読む

  • 256ビットの鍵というラベルを、完全な設計と同一視すること。
  • アルゴリズムが標準だからと、ノンス管理を無視すること。
  • 認証付き暗号化がロック解除された画面を守ると思い込むこと——守りません。

認証がカバーしないもの

改ざん検出は、保管庫が管理する記録に適用されます。保管庫を離れたコピーについては、復号された結果を観測する侵害されたオペレーティングシステムについては、あるいはファイルが開いている間に画面を読む人については、何も語りません。

認証付き暗号化は、保存状態のデータに関する保証です。強力な保証であり、そして狭い保証です。

Leo はまず、機微でないデータでテストします。「技術文書に、名前の付いた認証付き暗号化の構成があるか探す」。次に Leo は2つ目の確認手順に従います。「ファイル本体と並んで、ファイル名やメタデータが保護されるかを確認する」。この架空のシナリオは判断の流れを示すものであり、製品テストの報告ではありません。

  • 256ビットの鍵というラベルを完全な設計と同一視すること
  • ノンス管理を無視すること
  • 暗号化がロック解除された画面を守ると思い込むこと

AES-GCM は削除を防ぎますか?

いいえ。機密性と完全性を守るもので、可用性を守るものではありません。

認証は利用者のログインを意味しますか?

ここでは、アカウントへのサインインではなく、暗号学的な完全性の認証を意味します。

このガイドの一次情報源