Authenticated Encryption with Associated Data (認証付暗号化方式:AEAD) と呼ばれる方式である.
認証付暗号化方式 AEAD は,次の 3 つのアルゴリズムの組 AE = (AE-K, AE-E, AE-D) で定義される.ここで,AE は,鍵の集合 KS,nonce(初期乱数値) の集合 NS,ヘッダの集合 HS ⊆ Σ*,平文の集合 MS ⊆ Σ*,暗号文の集合 CS ⊆ Σ* を伴う.MS については,M ∈ MS ならば Σlen(M) ⊆ MS である.
認証付暗号化方式 AEAD は,メッセージ秘匿とメッセージ認証の機能を併せ持つブロック暗号利用モードである.このようなブロック暗号のモードは,Authenticated Encryption Modes という名称で分類され,中でも NIST が標準化しているのは CCM と GCM モードである.CCM モードは IEEE 802.11i 規格の一部として実用化されている.
AEAD のアプリケーションインタフェースは,次のように定義される.
An Interface and Algorithms for Authenticated Encryption, RFC 5116,January 2008
CCM は認証子生成・暗号化アルゴリズム Generation-Encryption と,復号・検証アルゴリズムDecryption-Verification からなる.なお,CCM ではブロック長128 ビットのブロック暗号を用いるよう規定されている.また,CCMではブロック暗号の暗号化関数のみが用いられ,復号関数は用いられない.
CCM は,メッセージ及び認証データに対して,CBC-MAC による MAC を生成し,MAC 処理で生成されたタグとメッセージを CTR モードで暗号化する.CTR と CBC-MAC の両方に同じ秘密鍵を用いるので鍵のセットアップは 1 回である.ECB モードの 2 倍のブロック暗号呼び出しを行うため,処理量も ECB に比べ 約 2 倍になる.また,CCM 処理中の CTR 処理と CBC-MAC 処理は並列処理が可能である.
CCMは,適応的選択平文攻撃に対する証明可能安全性を有しいる.実用上問題となる脆弱性の指摘されていないブロック暗号を用いる場合,ブロック暗号のブロック長を b とするとき,攻撃に要するブロック暗号の呼出し回数は O(2b/2) である.
Recommendation for block cipher modes of operation: The CCM mode for authentication and confidentiality., NIST Special Publication 800-38C, 2004.
GCM は,ブロック暗号に基づく認証暗号化モードであり,メッセージの暗号化 (機密性)とメッセージ認証コード生成 (データ完全性)の 2 つの機能を持つ.GCM は,2007年にNISTにより,米国政府推奨の認証暗号化モードとして採用されている.
GCM はブロック暗号のカウンタモードによる暗号化関数と,ユニバーサルハッシュ関数を利用したメッセージ認証コードからなる.
GCM は, データを暗号化するのにカウンタモードを利用するが,これは効率的にパイプライン化できる. さらに, GCM 認証は, ハードウェアでの高速な実装に特に良く適した操作を用いている. 非常に高速な実装や効率的でコンパクトな回路での実装が可能になっている. GCMでは,ブロック長128 ビットのブロック暗号を用いるよう規定されている.
GCM は適応的選択暗号文攻撃に対する証明可能安全性を有している.実用上問題となる脆弱性の指摘されていないブロック暗号を用いる限りは,GCM は適応的選択暗号文攻撃に対して安全な守秘・認証用暗号利用モードである.
Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC, NIST Special Publication 800-38D November, 2007
Poly1305 は, Daniel J. Bernstein によって設計されたメッセージ認証コードである.
Poly1305 は,256 ビットの鍵 K と任意長のメッセージ M を入力とし,128 ビットのタグ T を出力する.256 ビットの入力鍵はそれぞれ128 ビットの鍵 r と s に分割される.出力タグは
((m[0]rn + m[1]rn-1 + ・・・ + m[n]) mod (2130 - 5) mod 2128
で計算される.ここで, m[i] は入力メッセージ M を16 ビットに分割したブロックの i 番目のブロックである.
共通鍵暗号としてChaCha20,メッセージ認証コードとして Poly1305 を組み合わせたものが RFC 7905 として標準化され,TLS/SSL などで採用されている.
ChaCha20 and Poly1305 for IETF Protocols