2.1. 认证加密 (Authenticated Encryption)
2.1. 认证加密 (Authenticated Encryption)
认证加密操作有四个输入, 均为八位字节串:
密钥 K, 必须以均匀随机或伪随机方式生成.
Nonce N. 对任一特定密钥值, 除非每个 nonce 均为零长度, 否则提供给不同次认证加密操作调用的每个 nonce 必须互不相同. 能够生成互异 nonce 的应用应该采用第 3.2 节定义的 nonce 构成方法, 并可以采用任何满足唯一性要求的其他方法. 其他应用应该使用零长度 nonce.
明文 P, 包含待加密且待认证的数据.
关联数据 A, 包含需要认证但不需要保密的数据.
单一输出为:
密文 C, 其长度至少不小于明文长度, 或
表明所请求的加密操作无法执行的指示.
所有输入与输出均为可变长度八位字节串, 其长度满足下列限制:
密钥 K 的八位字节数在 1 到 255 之间. 对每种 AEAD 算法, K 的长度必须固定.
对任一特定密钥值, 要么 1) 提供给不同次认证加密操作调用的每个 nonce 必须互不相同, 要么 2) 每个 nonce 必须均为零长度. 若对某密钥使用零长度 nonce, 则与该密钥一起使用的每个 nonce 必须长度为零. 否则, nonce 的八位字节数应该为十二 (12). 可以对某密钥使用不同长度的 nonce. 部分算法不能与零长度 nonce 一起使用, 部分可以; 见第 4 节. 遵循推荐 nonce 长度的应用可避免随所用算法不同而构造不同长度 nonce. 该指引有助于将算法相关逻辑保留在应用之外.
明文 P 的八位字节数可以为零.
关联数据 A 的八位字节数可以为零.
密文 C 的八位字节数可以为零.
本规范不对 nonce, 明文, 密文或附加认证数据的最大长度作统一规定. 但是, 特定 AEAD 算法可以进一步限制这些输入与输出的长度. 特定 AEAD 实现可以进一步限制其输入与输出的长度. 若某 AEAD 算法实现被要求处理处于可接受长度范围之外的输入, 或处于该实现所支持长度范围之外的输入, 则必须返回错误码, 且不得输出任何其他信息. 特别地, 不得返回部分加密或部分解密的数据.
对明文 P 同时提供机密性与消息认证. 当 P 的长度为零时, AEAD 算法对输入 A 起到消息认证码 (Message Authentication Code, MAC) 的作用.
关联数据 A 用于保护需要认证但无需保密的信息. 例如, 使用 AEAD 保护网络协议时, 该输入可包含地址, 端口, 序号, 协议版本号以及其他表明应如何处理, 转发或处理明文或密文的字段. 在许多情形下, 希望对上述字段做认证, 同时又须以明文形式保留以使网络或系统正常工作. 当这些数据包含在输入 A 中时, 可在不将其复制进明文的前提下提供认证.
密钥 K 不得包含在其他任一输入 (N, P, A) 中. (该限制并非要求检查这些输入的值是否包含与密钥相同的子串; 而是指不得将密钥显式复制进这些输入.)
nonce 在算法内部被认证, 不必将其包含在 AD 输入中. 若对应用方便, 可以将 nonce 包含在 P 或 A 中.
nonce 可以与密文一起存储或传输, 也可以在认证解密操作前不久重建. 只要向解密模块提供足以构造 nonce 的信息即可. (例如, 系统可使用特定格式的序号作为 nonce, 此时可从密文顺序推断.) 由于认证解密过程会检测错误的 nonce 值, 若 nonce 重建错误并被送入认证解密操作, 也不会导致安全失败. 任何 nonce 重建方法都需考虑加密与解密过程之间密文可能丢失或重排的情况.
应用不得假定密文具有任何特定结构或格式.