认证加密

认证加密（英语：Authenticated encryption，AE）和带有关联数据的认证加密（authenticated encryption with associated data，AEAD，AE的变种）是一种能够同时保证数据的保密性、 完整性和真实性的一种加密模式。这些属性都是在一个易于使用的编程接口下提供的。
人们观察发现安全地将保密模式与认证模式组合可能是容易出错和困难的，于是认证加密应运而生。 这一点已由许多实际攻击证实，这些攻击通过对身份验证（包括SSL与TLS）的不正确实现或缺失，引入到了生产协议和应用程序中。
在2000年左右，围绕这个概念进行了一些努力。特别是，2000年Charanjit Jutla发表IACBC和IAPM模式，引发了人们对这些模式的强烈兴趣。 ISO/IEC 19772:2009已经对六种不同的认证加密模式（即OCB 2.0, Key Wrap, CCM, EAX, Encrypt-then-MAC (EtM)和GCM）进行了标准化。 在NIST的征集下开发了更多的模式。 海绵函数可以在双工模式下使用，提供经过认证的加密。

Encrypt-then-MAC (EtM)

首先对明文进行加密，然后根据得到的密文生成MAC。密文和它的MAC一起发送。用于例如IPsec中。EtM是ISO/IEC 19772:2009规定的六种认证加密方法中的一种。这是唯一可以达到认证加密安全性最高定义的方法，但这只有在使用的MAC“强不可伪造”时才能实现。2014年11月，EtM的传输层安全性协定（TLS）和资料包传输层安全（DTLS）扩展已经作为RFC 7366发布。各种EtM密码套件也存在于SSHv2中（例如hmac-sha1-etm@openssh.com）。

Encrypt-and-MAC (E&M)

基于明文生成MAC，并且明文在没有MAC的情况下被加密。明文的MAC和密文一起发送。用于例如SSH。E&M方法本身并未被证明是“强不可伪造”的。

MAC-then-Encrypt (MtE)

基于明文生成MAC，然后将明文和MAC一起加密以基于两者生成密文。密文（包含加密的MAC）被发送。MtE方法本身并未被证明是“强不可伪造”的。用于例如SSL/TLS。尽管有理论上的安全性，但对SSL/TLS进行更深入的分析将保护模型化为MAC-then-pad-then-encrypt，即明文先填充到加密函数的块大小。填充错误通常会导致接收方发现可检测到的错误，从而导致Padding oracle attack，如Lucky Thirteen attack。