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

确定性 AEAD 提供具有确定性属性的加密:加密相同的数据始终会生成相同的密文。这种加密对于密钥封装或某些搜索加密数据的架构很有用(如需了解详情,请参阅 RFC 5297 第 1.3 节)。由于该基元的确定性,其实现可能会导致泄露保密,因为攻击者只需找出给定消息的密文即可识别该消息的其他实例。

确定性 AEAD 具有以下属性:

  • 保密:除了其长度和重复明文的相等性之外,对明文没有任何已知。
  • 真实性:在不被检测到的情况下,无法更改密文底层的加密明文。
  • 对称:使用同一密钥加密明文和解密密文。
  • 确定性:只要主密钥未更改,使用相同参数对明文两次加密将得到相同的密文。

相关数据

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

选择密钥类型

我们建议所有用例都使用 AES256_SIV 密钥类型

安全保证

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

示例用例

请参阅我想确定地加密数据我想将密文绑定到其上下文