4. AEAD 算法规范要求 (Requirements on AEAD Algorithm Specifications)
4. AEAD 算法规范要求 (Requirements on AEAD Algorithm Specifications)
每种 AEAD 算法必须仅接受固定密钥长度 K_LEN 的密钥, 且不得要求输入密钥具有特定数据格式. 若算法需要此类结构 (例如, 子密钥须满足特定奇偶校验格式), 须在算法内部自行提供.
每种 AEAD 算法必须接受长度在零到 P_MAX 个八位字节之间 (含端点) 的任意明文, P_MAX 由该算法具体规定. P_MAX 必须大于零, 且应该至少为 65,536 (2^16) 个八位字节. 该尺度是网络数据分组的典型上限. 其他应用可能使用更大的 P_MAX, 因此通用算法宜支持更高上限.
每种 AEAD 算法必须接受长度在零到 A_MAX 个八位字节之间 (含端点) 的任意关联数据, A_MAX 由该算法具体规定. A_MAX 必须大于零, 且应该至少为 65,536 (2^16) 个八位字节. 其他应用可能使用更大的 A_MAX, 因此通用算法宜支持更高上限.
每种 AEAD 算法必须接受长度在 N_MIN 与 N_MAX 个八位字节之间 (含端点) 的任意 nonce, N_MIN 与 N_MAX 由该算法具体规定. N_MAX 与 N_MIN 可以相等. 每种算法应该接受长度为十二 (12) 个八位字节的 nonce. 下文所述随机化或有状态算法可以令 N_MAX 等于零.
AEAD 算法可以以任意方式组织其密文输出; 例如, 密文可包含认证标签. 每种算法应该选择便于高效处理的结构.
认证加密算法可以纳入或使用随机源, 例如生成并入密文输出的内部初始化向量 (initialization vector). 此类 AEAD 算法称为随机化算法; 注意仅加密是随机的, 解密恒为确定性. 随机化算法可以令 N_MAX 等于零.
认证加密算法可以在多次加密调用之间维护内部状态, 例如用于构造算法内部使用的互异值 (内部 nonce). 此类 AEAD 算法称为有状态算法. 当应用输入零长度 nonce 时, 算法可采用该方法仍保持良好安全性. 有状态算法可以令 N_MAX 等于零.
AEAD 算法规范必须包含上文定义的 K_LEN, P_MAX, A_MAX, N_MIN, N_MAX. 此外, 必须规定最大可能密文的八位字节数, 记为 C_MAX.
每种 AEAD 算法必须说明明文长度与密文长度之间的关系. 该关系不得依赖外部参数, 例如认证强度参数 (如认证标签长度). 若存在此类依赖, 会使算法使用复杂化, 导致仅凭 AEAD 注册表信息不足以保证互操作性.
每种 AEAD 算法规范应该说明无意中重用 nonce 值会导致何种安全性下降.
每种 AEAD 算法规范应该引用详细的安全分析. 本文档不规定特定安全模型, 因为文献中已使用多种模型. 安全分析应该定义或引用安全模型.
属于上文所定义随机化或有状态的算法, 应该用这些术语描述自身.