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

确定性带关联数据的加密认证 (Deterministic AEAD) 基元可提供具有确定性属性的加密:加密相同的数据始终会生成相同的密文。此类加密对密钥封装或对加密数据进行搜索的某些方案很有用(如需了解详情,请参阅 RFC 5297,第 1.3 节)。由于其确定性属性,此基元实现可能会导致机密性丢失,因为攻击者只需找出给定消息的密文即可识别该消息的其他实例。

确定性 AEAD 具有以下属性:

  • Secrecy:除了明文的长度和重复明文的等式之外,其他任何信息均不为人知。
  • 真实性:无法在不被检测的情况下更改密文底层的加密明文。
  • 对称:使用相同的密钥加密明文和解密密文。
  • 确定性:只要主键保持不变,使用相同参数对明文加密两次,就会得到相同的密文。

相关数据

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

选择密钥类型

我们建议在所有用例中使用 AES256_SIV 密钥类型。

安全保证

  • 身份验证强度至少为 80 位。
  • 明文和关联数据可以具有任意长度(介于 0 到 232 字节之间)。
  • 128 位安全级别,可防范密钥恢复攻击,以及最多使用 232 个密钥的多用户攻击。也就是说,如果攻击者获得了使用 232 个密钥加密的同一消息的 232 个密文,则需要执行 2128 次计算才能获得单个密钥。
  • 能够安全地加密 238 条消息,前提是每条消息的长度均小于 1MB。

用例示例

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