共通鍵暗号とメッセージ認証コードを組み合わせてメッセージを送るときの方式は EtM、MtE、E&M の3通りがある。
どういう違いがあるか、簡単に把握したかったので http://crypto.stackexchange.com/questions/202/should-we-mac-then-encrypt-or-encrypt-then-mac を抄訳してみた。
- Encrypt-then-MAC (EtM)
- 暗号文の完全性が提供される
- 平文の完全性が提供される
- MAC が不正な暗号文を弾いてくれる (暗号を復号しなくても不正かどうかわかる)
- MAC から平文を推測することが不可能
- MAC-then-Encrypt (MtE)
- 暗号文の完全性が提供されないので、暗号文を復号するまでメッセージが正しいものなのか偽造されたものなのか分からない。
- 平文の完全性は提供される
- 偽造した暗号文を弾くことができないため、メッセージを偽造できてしまう (復号化後に判別できる)
- MAC は暗号化されてしまっているので、MAC から平文を得ることはできない
- Encrypt-and-MAC (E&M)
- MAC は平文に対して適用されているので、暗号文の完全性は提供しない。このせいで選択暗号文攻撃 (Chosen-ciphertext attack; CCA) に対して脆弱となる場合がある
- 暗号文の中身の差し替えが可能となってしまう。復号時に完全性を確認できるため。
- 平文の完全性は確認できる
- 理論上、MACから平文を推測できる(かも)
EtM が MtE, E&M よりも良い……ということになる。各種プロトコルの状況は以下の通り。
- SSH: E&M。
- OpenSSH 6.2 (2013/03/22 リリース) が独自に EtM に対応している。対応しているバージョンの OpenSSH 同士ならばデフォルトで EtM が使われる。ssh_config(5) を参照するべし。
- TLS/SSL: MtE。
- RFC 7366 (2014年9月発行) で EtM が使えるように拡張された。まだサポートしているブラウザはない模様。
- IPsec: EtM。