AEAD

Authenticated Encryption with Associated Data(AEAD)代表关联…

Authenticated Encryption with Associated Data(AEAD)代表关联数据的认证加密,认证加密(AE)是一种通过通常使用单个密钥,为系统同时提供机密性和真实性的加密算法,尽管AE同时提供了机密性和完整性,但仍然不安全,容易受到重放攻击。

关联数据的认证加密

前置知识

MAC

在密码学中,Message Authentication Code(消息认证码,有时也被称为tag)是用来认证消息的比较短的信息。换言之,MAC用来保证消息的数据完整性消息的数据源认证。

MAC由消息本身一个密钥经过一系列计算产生,用于生成MAC的算法,称为MAC算法。MAC算法应能满足如下几个条件:

  • 在仅有消息本身没有密钥的情况下,无法得到该消息的MAC
  • 同一个消息在使用不同密钥的情况下,生成的MAC应当无关联
  • 在已有一系列消息以及其MAC时,给定一个新的消息,无法得到该消息的MAC。

下图摘自维基百科,可以很好的描述MAC的使用原理:

image

HMAC

HMAC (有时扩展为 英语:keyed-hash message authentication code, 密钥散列消息认证码, 或 英语:hash-based message authentication code,散列消息认证码),是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数同时结合一个加密密钥。它可以用来保证资料的完整性,同时可以用来作某个消息的身份验证。

HMAC是MAC算法中的一种,其基于加密HASH算法实现。任何加密HASH, 比如MD5、SHA256等,都可以用来实现HMAC算法,其相应的算法称为HMAC-MD5、HMAC-SHA256等。

image-20220801013501-8ic6jvhAEAD

认证加密(英语:Authenticated encryption,AE)和带有关联数据的认证加密(authenticated encryption with associated data,AEAD,AE的变种)是一种能够同时保证数据的保密性完整性真实性的一种加密模式。这些属性都是在一个易于使用的编程接口下提供的。

具体的实现方法
  • Encrypt-then-MAC (EtM)

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

image

  • Encrypt-and-MAC (E&M)

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

image

  • MAC-then-Encrypt (MtE)

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

image

传统AE加密

AE(Authenticated Encryption,认证加密)是一种加密模式,它不仅提供数据的机密性(confidentiality),还提供完整性和认证(integrity and authenticity),防止数据在传输过程中被篡改或伪造。

传统的AE加密通常通过两种方式实现:

一、传统AE加密基本概念

传统AE加密的目标是:

  • 保密性:防止未授权用户读取明文。
  • 完整性与认证:确保消息在传输过程中未被篡改,且确实来自声称的发送方。

AE加密的输出通常包括:

  • 密文(Ciphertext)
  • 消息认证码(MAC 或 Tag)

二、常见的传统AE加密方法

传统AE加密方式主要通过以下两种方式实现:

1. Encrypt-then-MAC(EtM)

流程:

  1. 使用对称加密算法(如 AES-CBC、AES-CTR)对明文加密,生成密文。
  2. 使用 MAC 算法(如 HMAC-SHA256)对密文进行认证,生成认证标签(Tag)。
  3. 最终输出:密文 + Tag

解密时:

  • 先验证 MAC,再解密。

特点:

  • 最安全、推荐使用的方式。
  • 例如:IPSec 就采用了 EtM。

2. Encrypt-and-MAC(E&M)

流程:

  1. 使用对称加密算法加密明文,生成密文。
  2. 使用 MAC 算法对明文和(或)密文生成 Tag。
  3. 输出密文和 Tag。

缺点:

  • 安全性不如 EtM。
  • 不推荐,容易出错。

3. MAC-then-Encrypt(MtE)

流程:

  1. 使用 MAC 算法对明文生成 Tag。
  2. 将明文和 Tag 一起加密。
  3. 输出加密后的数据。

缺点:

  • 若实现不当可能泄漏信息(如解密前错误反馈)。
  • SSL/TLS 1.0–1.2 曾采用,已被弃用。

三、常用的传统AE构建组合

加密算法MAC算法模式安全性
AES-CBCHMAC-SHA256EtM
AES-CTRHMAC-SHA1/256EtM
AES-CBCHMAC-SHA1MtE/E&M中/低

四、现代AE替代方案

传统AE加密需要开发者手动组合加密算法和认证算法,容易出现实现错误。因此,后来出现了一些集成式认证加密算法(即 AEAD),如:

  • AES-GCM(Galois/Counter Mode)
  • ChaCha20-Poly1305

这些属于“现代AE加密”,自动完成加密与认证,更安全、更高效,已成为主流。


五、总结

类别特点是否推荐
Encrypt-then-MAC安全性高,分离加密与认证✅ 推荐
Encrypt-and-MAC实现简单,但容易出错❌ 不推荐
MAC-then-Encrypt不易发现认证失败,安全性差❌ 不推荐
AEAD(现代)一体化设计,易用且高效✅ 推荐

1. 集成式设计(Integrated Design)

◾ 传统AE:

  • 加密和认证通常需要手动组合两种不同的算法,如 AES-CBC + HMAC-SHA256
  • 使用者必须自行决定采用 EtM、E&M 还是 MtE 等模式。
  • 容易出现实现失误,导致安全问题。

✅ AEAD:

  • 加密和认证集成在一个算法内部,例如:
    • AES-GCM
    • ChaCha20-Poly1305
  • 不需要手动搭配 MAC 算法,接口清晰,开发者更难“用错”。

AE(Authenticated Encryption):带认证的加密,确保数据的保密性和完整性,但不一定统一为一个原子操作。

AEAD(Authenticated Encryption with Associated Data):是一种具体的加密模式,它不仅加密数据并验证其完整性,还能保护“附加数据”(如包头、元信息等)。

EtM / E&M / MtE 是什么?

这些是加密与认证的三种组合方式:

1. EtM(Encrypt-then-MAC)加密后再做认证

  • 流程:先加密明文 → 然后对密文做 MAC
  • 接收方:先验证 MAC(认证)→ 再解密(加密)
  • 被认为是最安全的一种组合方式
  • ✅ 可以用于实现 AEAD
  • ✅ 一些 AEAD 模式(如 AES-GCM)逻辑上属于 EtM
  • 可实现 AEAD

2. E&M(Encrypt-and-MAC)加密和认证并行执行

  • 流程:加密明文,同时对明文做 MAC
  • 接收方:验证 MAC 后再解密
  • ⚠️ 安全性依赖实现细节,容易出错(比如明文被认证但没有被加密保护)
  • 不属于 AEAD 标准模型
  • 仅可视作一种 AE(认证加密)尝试,但不推荐

3. MtE(MAC-then-Encrypt)先认证后加密

  • 流程:对明文生成 MAC → 将明文和 MAC 一起加密
  • 接收方:解密 → 然后验证 MAC
  • ⚠️ 某些模式下会泄漏认证信息,存在安全隐患
  • ❌ 不属于 AEAD 标准模型
  • ⚠️ 某些旧协议中曾使用,如 SSL 3.0(后来被证明不安全)

所以回答你的问题:

EtM、E&M、MtE 这三种加密方式到底是 AE 加密还是 AEAD?

  • 它们本身是组合策略,不是特定算法。
  • EtM 可以实现 AEAD,也广泛用于 AEAD 模式。
  • E&M 和 MtE 只是 AE 的实现方式,不符合 AEAD 要求。

AEAD(Authenticated Encryption with Associated Data) 的实现不仅限于 EtM(Encrypt-then-MAC) 模式,它还有其他实现方式。AEAD 并不强制要求某种特定的顺序或结构,而是要求以下几点:

  • 加密和认证为一个原子操作
  • 支持附加数据(Associated Data)的认证
  • 保证机密性、完整性和认证

AEAD 的常见实现方式大体上可以归为三种:EtM、E&tM(Encrypt and Tag in one step)、以及基于特殊构造的设计(如 sponge-based AEAD)。以下是具体说明:


AEAD 的实现方式

✅ 1. EtM(Encrypt-then-MAC)

  • 原理:先对明文加密得到密文,然后对密文做 MAC。
  • 代表算法:IPsec(HMAC+加密)、某些构造下的 AES-GCM。
  • 优点:加密前可以先认证密文;密文未通过验证则不解密,更安全。
  • 总结:可被视为一种 AEAD 实现方式。

✅ 2. E&tM(Encrypt and Tag in One Step)

  • 原理:将加密和生成认证标签(Tag)作为一个不可分离的操作
  • 代表算法
    • AES-GCM
    • ChaCha20-Poly1305
    • AES-CCM
  • 这些算法中,加密过程和 MAC 过程密切交织,生成的 tag 不再是独立的 HMAC,而是加密过程自然产生的。
  • 总结:这是现代 AEAD 的主流形式

✅ 3. MAC-then-Encrypt 变种(MtE)(非推荐)

  • 传统 MtE 被认为有安全缺陷,但某些 AEAD 模式通过特定设计弥补了它的不足。
  • 比如在一些 block cipher mode(如 OCB)中,明文和认证信息一起输入 cipher 构造认证 tag。
  • 这类 AEAD 模式并非严格遵循 MtE,而是采用了一种变种的加密认证融合方式。

✅ 4. Sponge-based AEAD

  • 基于 sponge 构造(例如 Keccak)的一类 AEAD 模式。
  • 代表:ASCON(轻量级 AEAD,用于物联网)、KetjeKeyak 等。
  • 这类 AEAD 通常结构新颖,不能简单划分为 EtM 或 MtE。
  • 也是未来密码标准(如 NIST 轻量级加密竞赛)关注的方向。

✅ 5. OCB(Offset Codebook)模式

  • 高效的一种 AEAD 模式。
  • 属于“并行加密和认证”的自定义模式,不能简单划分为 EtM/MtE。
  • 专利限制较多,实际应用受限(不过 OCB3 已开放使用)。
  • 性能和安全性都很好。

总结表格:

AEAD 实现方式结构类型代表算法是否等价 EtM安全性
EtM加密后做 MACIPsec(Enc+HMAC)✅ 高
Encrypt & Tag一体加密与认证AES-GCM, ChaCha20-Poly1305否(更紧密)✅ 高
MtE 变种特殊设计融合OCB, CCM✅ 高(取决于设计)
Sponge-based AEAD自定义结构ASCON, Ketje, Keyak✅ 高

关联数据是AEAD和传统方法之间的重要区别在于,传统方法不使用关联数据进行认证,而AEAD在真实性和机密性方面更安全,其中一个最重要的细节是关联数据不需要与密文一起存储或传输。

双方能够正确推断的任何上下文相关的非秘密值都可以作为关联数据。举个例子,如果双方正在执行一个以状态机为基础的复杂协议,那么双方始终可以知道自己的状态以及一个诚实的对方应该处于的状态,那么这些状态可以用作关联数据。

同时有许多AEAD的算法,包括但不限于以下几种:

  • CCM (Counter with CBC-MAC)
  • GCM (Galois Counter Mode)
  • OCB (Offset Code Book)
  • Key Wrap
  • EAX
  • Encrypt-then-MAC (EtM)

它们既可以通过加密提供机密性,又能确保数据的完整性(确保数据未被修改)和真实性(确保数据来自特定实体)

什么是 AEAD?

加密仅提供机密性,不提供完整性或真实性。如果可以对密文进行修改,并导致明文发生可预测的修改,则密文具有可塑性。消息可以被更改,并且这些更改可能无法被检测到。仅仅加密消息并不能防止这种情况发生。

举个例子,假设 Alice 想给 Bob 汇款 100 美元。金融服务机构使用流密码加密交易,其工作原理是将明文交易与密钥流进行异或运算。每笔交易都有固定的格式,指定收款人以及转账金额。Alice 加密这笔 100 美元的交易,并将密文发送给 Bob。

攻击者截获了加密交易,并试图在不被发现的情况下修改数据。攻击者将密文与交易格式中千位占位符位置的数字 9 进行异或运算。虽然攻击者无法解密消息,但了解交易格式后,他们就能知道在哪里进行修改。

Bob 收到修改后的密文,并使用自己的密钥流进行解密。由于对手的修改,Bob 收到的交易金额为 9100 美元**,**而不是 100 美元。由于只使用了加密,Bob 无法检测到这种修改!

为了保护消息免遭修改,我们必须随消息传输可用于验证消息身份的附加数据。对于 AEAD,这通常采用消息认证码 (MAC) 的形式。MAC 必须具备以下特性:在不知道认证密钥的情况下,很难找到任何消息的有效 MAC。对于给定的消息和 MAC 标签,也很难找到具有相同 MAC 的第二条消息(抗第二原像性)。也很难找到导致相同 MAC 标签的一对消息(抗碰撞性)。

密钥(加密)哈希函数通常用于生成消息认证码。与加密算法结合使用时,它们可用于创建 AEAD 密码系统,该系统既可以加密数据,也可以认证数据。例如,AES CCM 算法将 AES CTR 模式与 AES CBCMAC 算法相结合用于认证。另一个示例是 AES GCM 算法,它将 AES CTR 模式与 GHASH 算法相结合用于 MAC 计算。在这两种算法中,系统都会计算传输消息的 MAC(称为标签),并将其与消息一起发送。每个消息的标签通常为 16 个字节,并将此额外开销添加到消息中。消息接收者可以同时验证标签和消息。如果消息或标签以任何方式被修改,接收者将拒绝该消息,认为其无效。这将防止消息被篡改。

2 TinyJAMBU(NIST 轻量级加密决赛入围者)[TinyJAMBU:轻量级认证加密算法系列,Wu 等人]

附加数据

AEAD 提供数据真实性,且机密性是可选的。它允许将附加数据与加密数据一起发送,而无需对其进行加密。附加的明文数据和加密数据都会一起进行身份验证:如果其中任何一部分发生更改,都将导致标签无效。这在许多情况下都很有用,例如在数据包头中。如果数据被打包并通过网络发送,数据包通常包含一个包含元数据(例如发送方和接收方地址)的头。这些数据在发送时无法加密,因为路由上的其他节点需要能够读取这些信息,以便将数据包发送到正确的目的地。我们仍然希望保护这些信息不被修改。即使消息的部分内容已加密,AEAD 也允许将这些明文数据与消息的其余部分一起进行身份验证。AEAD 甚至可以用于在不加密任何数据的情况下发送消息,同时仍然提供消息的真实性。

评论

评论加载中……