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

具有关联数据的确定性身份验证加密 (Deterministic AEAD) 原语提供具有确定性的加密:加密相同的数据始终会产生相同的密文。这种加密类型非常适合密钥封装或某些加密数据搜索方案(如需了解详情,请参阅 RFC 5297 第 1.3 节)。由于这种原语具有确定性属性,因此其实现可能会导致机密性丢失,因为攻击者只需要找出给定消息的密文,即可识别该消息的其他实例。

确定性 AEAD 具有以下属性:

  • Secrecy:除了明文的长度和重复明文的相等性之外,对明文一无所知。
  • 真实性:在不被检测到的情况下,无法更改密文所对应的加密明文。
  • 对称:使用同一密钥加密明文和解密密文。
  • 确定性:只要主键不发生变化,使用相同参数对明文加密两次就会得到相同的密文。

相关数据

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

关联数据是可选的。如果指定了关联数据,则只有在加密和解密调用中传递了相同的关联数据时,解密才会成功。

选择密钥类型

我们建议在所有使用情形下都使用 AES256_SIV 密钥类型。

安全保证

  • 至少 80 位身份验证强度。
  • 明文和关联数据可以具有任意长度(在 0..232 字节范围内)。
  • 在密钥恢复攻击中,以及在最多使用 232 个密钥的多用户攻击中,可提供 128 位安全级别。这意味着,如果攻击者获得了 232 个使用 232 个密钥加密的同一消息的密文,则需要进行 2128 次计算才能获得单个密钥。
  • 能够安全加密 238 条消息,前提是每条消息的长度都小于 1MB。

用例示例

我想确定性地加密数据,并希望将密文绑定到其上下文