使用关联数据的身份验证加密 (AEAD)

带关联数据的身份验证加密 (AEAD) 基元是最常见的数据加密基元,可满足大多数需求。

AEAD 具有以下属性:

  • 保密:除了明文长度之外,对明文没有任何已知。
  • 真实性:在不被检测到的情况下,无法更改密文底层的加密明文。
  • 对称:使用同一密钥加密明文和解密密文。
  • 随机:加密是随机进行的。明文相同的两条消息会产生不同的密文。攻击者不知道哪个密文与给定的明文相对应。如果您想避免这种情况,请改用确定性 AEAD

相关数据

AEAD 可用于将密文与特定关联数据联系。假设您有一个数据库,其中包含 user-idencrypted-medical-history 字段。在这种情况下,可以在加密 encrypted-medical-history 时将 user-id 用作关联数据。这可以防止攻击者将医疗记录从一个用户转移到另一个用户。

选择密钥类型

虽然我们建议将 AES128_GCM 用于大多数用途,但有多种密钥类型可满足不同的需求(为实现 256 位安全性,请将下面的 AES128 替换为 AES256)。一般情况:

  • 采用 16 字节初始化矢量 (IV) 的 AES128_CTR_HMAC_SHA256 是具有良好边界的最保守模式。
  • 与 AES128_CTR_HMAC_SHA256 相比,AES128_EAX 稍微保守一些,稍微快一些。
  • AES128_GCM 通常是最快的模式,对消息数量和消息大小限制最严格。当超出明文和相关数据长度的限制(见下文)时,AES128_GCM 会失败并泄露密钥材料。
  • AES128_GCM_SIV 的速度几乎与 AES128_GCM 一样快,可以很好地限定大量消息的边界,但存在一定程度上稍低一些。如需在 Java 中使用此方法,您必须安装 Conscrypt
  • 与 AES128_GCM 相比,XChaCha20Poly1305 在消息数量和消息大小限制上具有更高的限制,但在失败(可能性极小)时,它也会泄露密钥材料。它不是硬件加速,因此在支持硬件加速的情况下,它的速度可能比 AES 模式慢。

安全保证

AEAD 实现具有以下优势:

  • CCA2 安全性。
  • 至少 80 位身份验证强度。
  • 能够加密至少 232 条消息(总共 250 个字节)。使用最多 232 个选定的明文或所选密文的成功概率大于 2-32 的攻击。

用例示例

请参阅“我要加密数据”,并将密文绑定到其上下文