認証付き暗号

認証付き暗号（AE: Authenticated Encryption あるいは AEAD: Authenticated Encryption with Associated Data) とは、データの秘匿性、完全性、および認証性を同時に提供する暗号利用モードである。利用の容易な API ひとつでこうした特性が提供されるうえ、復号すると同時に完全性も検証される。
AE の必要性が明らかになったのは、秘匿用モードと認証用モードを安全に合成するのが困難であろうとの報告による。 このことは、実際に運用されているプロトコルやアプリケーションにおいて認証の不適切な実装や実装の欠如によって、実用的な攻撃経路がいくつも入りこんできたことで実証されている (SSL/TLS はその一例である)。
2000年にCharanjit Jutlaによって発表された IACBC および によってこの分野の研究が活発となった。6種類の異なるモード (OCB 2.0、Key Wrap、CCM、EAX、Encrypt-then-MAC (EtM) および GCM) が ISO/IEC 19772:2009 によって標準化され、さらにNISTによって開発がすすめられた。Sponge functions can be used in duplex mode to provide authenticated encryption.
AE モードの典型的な API は次のような関数を提供する:
"ヘッダ"部はネットワークや記録の目的で使われるメタデータの認証や完全性保護のためにあるので、秘匿する必要はなく、認証する必要がある。
秘匿性と完全性の保護に加えて、認証付き暗号は平文既知性 (PA: plaintext awareness) を備えており、選択暗号文攻撃に対して安全である。この種の攻撃で敵は、よく考えられた暗号文を "復号オラクル" に渡して復号結果を分析することで、暗号システムの攻略ヒント (たとえば秘密鍵に関する情報など) を得ようとする。認証付き暗号システムは不適切に細工された暗号文を識別して復号を拒否することができる。これはつまり、適切に暗号化アルゴリズムを使って生成しない限り暗号文の復号要求を防ぐということであり、適切に生成したということは平文をすでに知っているということを意味する。適切に実装されていれば、これにより攻撃者がすでに知っている以上の有用な情報を復号オラクルで取り出せないようになる。
共通鍵ブロック暗号で使うための認証付き暗号専用のモードも数多く開発されているが、一般的に認証付き暗号は、暗号システムとメッセージ認証符号 (MAC) を組み合わせて構成する。その場合、暗号システムは選択平文攻撃のもとで強秘匿性を有し、MAC 関数は選択メッセージ攻撃のもとで偽造不可でなければならない。Bellare and Namprempre (2000) はこうしたプリミティブの組み合わせを三通り考察し、暗号と MAC 双方の関数が必要な性質を満たす場合は、メッセージを暗号化してから暗号文に MAC を計算すること (EtM: Encrypt-then-MAC) で適応的選択暗号文攻撃に対し安全であることを実証した。
2013年には、認証付き暗号モードの設計を推進するためのコンペが発表された。
認証付き暗号の手法.
Encrypt-then-MAC (EtM).
はじめに平文を暗号化し、暗号文から MAC を計算する。暗号文と MAC を連結して送信される。ISO/IEC 19772:2009 に準拠する標準的な手法。IPSecなどで利用される。これは AE で最高水準の安全性を達成できる唯一の手法であるが、その達成のためには使用する MAC が「強偽造不可」(Strongly Unforgeable) でなければならない。2014年11月に、TLS および DTLS の拡張として EtM を定義する RFC 7366 が勧告された。
Encrypt-and-MAC (E&M).
平文から MAC を計算し、平文はそのまま暗号化される。暗号文と MAC を連結して送信される。SSHや Grain 128a などで利用される。E&M 自体は強偽造不可だと証明されていないが、。
MAC-then-Encrypt (MtE).
平文から MAC を計算し、平文と MAC を連結した状態で暗号化される。暗号文（暗号化された平文と暗号化された MAC を含む）が送信される。SSL/TLS などで利用される。MtE 自体は強偽造不可だと証明されていないが、SSL/TLS 実装は Krawczyk により強偽造不可であることが証明されている。SSL/TLS は、MtE と同時に使用するエンコーディングのおかげで事実上安全である。