跳到主要内容

2.1. Authenticated Encryption (认证加密)

2.1. Authenticated Encryption (认证加密)

认证加密操作有四个输入, 均为八位字节串:

密钥 K, 必须以均匀随机或伪随机方式生成。

Nonce N。对任一特定密钥值, 除非每个 nonce 均为零长度, 否则提供给不同次认证加密操作调用的每个 nonce 必须 (MUST) 互不相同。能够生成互异 nonce 的应用应该 (SHOULD) 采用第 3.2 节定义的 nonce 构成方法, 并可以 (MAY) 采用任何满足唯一性要求的其他方法。其他应用应该 (SHOULD) 使用零长度 nonce。

明文 P, 包含待加密且待认证的数据。

关联数据 A, 包含需要认证但不需要保密的数据。

单一输出为:

密文 C, 其长度至少不小于明文长度, 或

表明所请求的加密操作无法执行的指示。

所有输入与输出均为可变长度八位字节串, 其长度满足下列限制:

密钥 K 的八位字节数在 1 到 255 之间。对每种 AEAD 算法, K 的长度必须 (MUST) 固定。

对任一特定密钥值, 要么 1) 提供给不同次认证加密操作调用的每个 nonce 必须 (MUST) 互不相同, 要么 2) 每个 nonce 必须 (MUST) 均为零长度。若对某密钥使用零长度 nonce, 则与该密钥一起使用的每个 nonce 必须 (MUST) 长度为零。否则, nonce 的八位字节数应该 (SHOULD) 为十二 (12)。可以 (MAY) 对某密钥使用不同长度的 nonce。部分算法不能与零长度 nonce 一起使用, 部分可以; 见第 4 节。遵循推荐 nonce 长度的应用可避免随所用算法不同而构造不同长度 nonce。该指引有助于将算法相关逻辑保留在应用之外。

明文 P 的八位字节数可以 (MAY) 为零。

关联数据 A 的八位字节数可以 (MAY) 为零。

密文 C 的八位字节数可以 (MAY) 为零。

本规范不对 nonce、明文、密文或附加认证数据的最大长度作统一规定。但是, 特定 AEAD 算法可以 (MAY) 进一步限制这些输入与输出的长度。特定 AEAD 实现可以 (MAY) 进一步限制其输入与输出的长度。若某 AEAD 算法实现被要求处理处于可接受长度范围之外的输入, 或处于该实现所支持长度范围之外的输入, 则必须 (MUST) 返回错误码, 且不得 (MUST NOT) 输出任何其他信息。特别地, 不得 (MUST NOT) 返回部分加密或部分解密的数据。

对明文 P 同时提供机密性与消息认证。当 P 的长度为零时, AEAD 算法对输入 A 起到消息认证码 (Message Authentication Code, MAC) 的作用。

关联数据 A 用于保护需要认证但无需保密的信息。例如, 使用 AEAD 保护网络协议时, 该输入可包含地址、端口、序号、协议版本号以及其他表明应如何处理、转发或处理明文或密文的字段。在许多情形下, 希望对上述字段做认证, 同时又须以明文形式保留以使网络或系统正常工作。当这些数据包含在输入 A 中时, 可在不将其复制进明文的前提下提供认证。

密钥 K 不得 (MUST NOT) 包含在其他任一输入 (N, P, A) 中。(该限制并非要求检查这些输入的值是否包含与密钥相同的子串; 而是指不得将密钥显式复制进这些输入。)

nonce 在算法内部被认证, 不必将其包含在 AD 输入中。若对应用方便, 可以将 nonce 包含在 P 或 A 中。

nonce 可以与密文一起存储或传输, 也可以在认证解密操作前不久重建。只要向解密模块提供足以构造 nonce 的信息即可。(例如, 系统可使用特定格式的序号作为 nonce, 此时可从密文顺序推断。) 由于认证解密过程会检测错误的 nonce 值, 若 nonce 重建错误并被送入认证解密操作, 也不会导致安全失败。任何 nonce 重建方法都需考虑加密与解密过程之间密文可能丢失或重排的情况。

应用不得 (MUST NOT) 假定密文具有任何特定结构或格式。