関連データ(AEAD)による認証された暗号化

関連データを伴う認証付き暗号化(AEAD)プリミティブは、データ暗号化の最も一般的なプリミティブであり、ほとんどのニーズに適しています。

AEAD には次の特性があります。

  • Secrecy: 長さ以外の平文に関する情報は一切わかりません。
  • 真正性: 検出されずに、暗号テキストの基になる暗号化された平文を変更することはできません。
  • 対称性: 平文の暗号化と暗号テキストの復号は、同じ鍵で行われます。
  • ランダム化: 暗号化はランダム化されます。同じ平文の 2 つのメッセージがあっても、暗号テキストは同じになりません。攻撃者は、特定の平文に対応する暗号テキストを認識できません。これを回避するには、代わりに確定的 AEAD を使用します。

関連データ

AEAD を使用して、暗号テキストを特定の関連データに関連付けることができます。フィールド user-id と encrypted-medical-history を持つデータベースがあるとします。このシナリオでは、encrypted-medical-history を暗号化するときに、user-id を関連データとして使用できます。これにより、攻撃者がユーザー間で医療履歴を移動させることはできません。

関連データは任意です。指定した場合、同じ関連データが暗号化呼び出しと復号呼び出しの両方に渡された場合にのみ、復号が成功します。

キーの種類を選択する

ほとんどの用途で AES128_GCM をおすすめしますが、さまざまなニーズに対応するさまざまな鍵タイプがあります。AES128 は 128 ビットのセキュリティを提供し、AES256 は 256 ビットのセキュリティを提供します。

モードを選択する際に注意すべきセキュリティ上の制約は次の 2 つです。

  1. QPS: 同じ鍵で暗号化されるメッセージの数
  2. メッセージ サイズ: メッセージのサイズはどのくらいですか?

サポートされている鍵の種類:

  • 16 バイトの初期化ベクトル(IV)を使用する AES-CTR-HMAC(AES128_CTR_HMAC_SHA256、AES256_CTR_HMAC_SHA256)は、適切な境界を持つ最も保守的なモードです。
    • 鍵コミット。
  • AES-EAX(AES128_EAX、AES256_EAX)は、AES128_CTR_HMAC_SHA256 よりも保守性がやや低く、やや高速です。
    • キーコミットされていない MLGR。
  • AES-GCM(AES128_GCM、AES256_GCM)は通常、メッセージ数(232)とメッセージ サイズ(メッセージあたり約 64 GB)に最も厳しい制限がある最速のモードです。これらの上限を超えると、AES-GCM は平文と AES-GCM 内部キーの認証部分を漏洩して、致命的なエラーが発生します。
    • AES-GCM は堅牢ではなく [ABN]、キーコミットも行いません [GLR]。2 つの異なる鍵で復号可能な暗号テキストを生成できます。これにより、実用的な攻撃につながる可能性があります [DGRW]。鍵が攻撃者によって選択された場合は、脅威モデルを慎重に確認してください。
  • AES-GCM-SIV(AES128_GCM_SIV、AES256_GCM_SIV)[RFC8452] は、ノンスの誤用に対する耐性があり、AES-GCM とほぼ同等のパフォーマンスを発揮します。ランダム IV を使用する AES-GCM-SIV のメッセージ数とメッセージ サイズの上限は、AES-GCM の上限よりもはるかに高くなります。これらの上限を超えた場合、AES-GCM-SIV はそれほど致命的な失敗にはなりません。2 つのメッセージが等しいことが漏洩するだけです。AES-GCM-SIV は安全性が高いですが、実際にはあまり使用されていません。
    • ランダムなノンスの境界:
      • 232 個のメッセージ(各プレーンテキストは最大 8 GiB)
      • 248 個のメッセージ(各プレーン テキストは最大 32 MiB)
      • 264 個のメッセージ。各平文は最大 128 KiB
    • Java で使用するには、Conscrypt をインストールします。
    • 鍵コミットメントなしの ADGKLS。
  • XChaCha20-Poly1305(XCHACHA20_POLY1305)は、AES-GCM よりもメッセージ数とメッセージ サイズの上限がはるかに大きくなっていますが、失敗した場合(可能性は非常に低い)、鍵マテリアルも漏洩します。ハードウェア アクセラレーションは行われないため、ハードウェア アクセラレーションが利用可能な状況では AES モードよりも遅くなる可能性があります。
    • 鍵コミットメントなしの LGR。

AEAD 暗号文のワイヤー形式の詳細を確認する。

セキュリティ保証

AEAD 実装には、次の特徴があります。

  • CCA2 セキュリティ。
  • 80 ビット以上の認証強度。
  • 合計 250 バイトで少なくとも 232 のメッセージを暗号化できること。最大 232 個の選択平文または選択暗号文による攻撃の成功確率は 2-32 より大きくありません。

サンプル ユースケース

データを暗号化すると暗号テキストをコンテキストにバインドするをご覧ください。