跳到主要内容

4. 对 "aes128gcm" 内容编码使用的限制

4. 对 "aes128gcm" 内容编码使用的限制

应用服务器 MUST 使用单条记录 (single record) 加密推送消息. 从而允许仅处理单条记录的最小接收端实现. 应用服务器 MUST 将 "aes128gcm" 内容编码首部中的 "rs" 参数设为大于明文长度, 填充分隔符 (1 字节), 任意填充以及认证标签 (16 字节) 长度之和的值.

推送消息 MUST 在加密内容编码首部的 "keyid" 参数中包含应用服务器的 ECDH 公钥. [X9.62] 定义的非压缩点形式 (即以 0x04 字节开头的 65 字节序列) 构成整个 "keyid". 注意这意味着 "keyid" 参数将不是 [RFC8188] 所推荐的合法 UTF-8.

推送服务不要求支持超过 4096 字节的载荷体 (见 [RFC8030] 第 7.2 节). 扣除首部 (86 字节), 填充 (至少 1 字节) 以及 AEAD_AES_128_GCM 的扩展 (16 字节) 后, 明文至多 3993 字节.

应用服务器 MUST NOT 对推送消息使用其他内容编码. 尤其可能压缩的内容编码会导致推送消息内容泄露. 因此 Content-Encoding 首部字段必须恰好有一个取值, 即 "aes128gcm". 不允许出现多个 "aes128gcm" 值.

用户代理不要求支持多条记录. 用户代理 MAY 忽略 "rs" 参数. 若未检查记录大小, 在所有合法情况下解密大概率会失败. MUST 校验填充分隔符字节; 除 0x02 以外的值 MUST 导致丢弃该消息.