関連データを伴うストリーミング認証付き暗号化(ストリーミング AEAD)

ストリーミング AEAD プリミティブは、ストリーミング データの認証付き暗号化を提供します。暗号化するデータが 1 つのステップで処理できないほど大きい場合に便利です。一般的なユースケースとしては、大規模なファイルやライブ データ ストリームの暗号化などがあります。

暗号化はセグメント単位で行われ、セグメントは暗号テキスト内の場所にバインドされ、削除や並べ替えはできません。1 つの暗号テキストのセグメントを別の暗号テキストに挿入することはできません。既存の暗号文を変更するには、データ ストリーム全体を再暗号化する必要があります。1

暗号テキストの一部のみが一度に復号されて認証されるため、復号は高速です。暗号文全体を処理しなくても、部分的な平文を取得できます。

ストリーミング AEAD 実装は AEAD の定義を満たし、nOAE で安全です。次のプロパティがあります。

  • 秘匿性: 平文については、長さ以外は何もわかりません。
  • 真正性: 暗号テキストの基盤となる暗号化された平文が検出されずに変更することはできません。
  • 対称: 平文の暗号化と暗号テキストの復号は、同じ鍵で行われます。
  • ランダム化: 暗号化はランダム化されます。同じ平文の 2 つのメッセージは異なる暗号テキストを生成します。攻撃者は、特定の平文がどの暗号テキストに対応しているかを知ることはできません。

関連データ

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

キータイプを選択する

ほとんどの用途には AES128_GCM_HKDF_1MB をおすすめします。原則:

  • AES128_GCM_HKDF_1MB(または AES256_GCM_HKDF_1MB)はより高速なオプションです。最大 264 バイトの 264 ファイルを暗号化できます。暗号化と復号のプロセスで約 1 MB のメモリが消費されます。
  • AES128_GCM_HKDF_4KB は約 4 KB のメモリを消費します。システムにメモリがあまりない場合に適しています。
  • AES128_CTR_HMAC_SHA256_1MB(または AES256_CTR_HMAC_SHA256_1MB)は、より保守的なオプションです。

セキュリティ保証

ストリーミング AEAD 実装は、次の機能を提供します。

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

使用例

サイズの大きなファイルやデータ ストリームを暗号化したいをご覧ください。


  1. この制限の理由は、AES-GCM 暗号を使用しているためです。同じ場所で別の平文セグメントを暗号化することは、IV を再利用することと同等であり、AES-GCM のセキュリティ保証に違反します。もう 1 つの理由は、攻撃者が検出されることなく以前のバージョンのファイルを復元しようとするロールバック攻撃を防ぐことです。 

  2. 2 つの32 セグメントがサポートされており、各セグメントには segment_size - tag_size バイトの平文が含まれます。1 MB セグメントの場合、プレーンテキストの合計サイズは 232 *(220-16)~= 251 バイトです。 

  3. 派生キー(128 ビット)とノンス接頭辞(7 バイトの独立したランダム値)の組み合わせが繰り返されると、ストリーミング AEAD は安全ではなくなります。184 ビットの衝突耐性があり、成功確率を 2-32 未満にしたい場合、これはおおよそ 264 のメッセージに相当します。