摘要
- CMS
AuthEnvelopedData可以正确标注 AES-GCM、携带合规参数并通过认证标签校验,却仍不能证明同一密钥下的 nonce 在历史上从未重复。 - RFC 5084 因而要求自动化密钥管理,并把“每份内容使用一把新的内容认证加密密钥”列为安全构造;支持某种算法不等于完成其生命周期控制。
审计界面显示一排绿色结果:CMS 结构可解析,OID 指向 AES-GCM,nonce 长度为十二个八位组,认证标签正确。每个结果都可能准确,但界面上最令人放心的推论——“nonce 是唯一的”——并未由这些结果证明。
RFC 5084 规定 AES-CCM 与 AES-GCM 如何用于 CMS 的 AuthEnvelopedData。它为三种 AES 密钥长度分别分配算法标识符,要求参数存在,规定认证校验值长度,并把 CMS 的认证属性作为 AEAD 的附加认证数据。
标准把唯一性写在“密钥作用域”内。对同一把内容认证加密密钥,nonce 集合不得包含重复值。同一个 key/nonce 组合若用于两条不同消息,安全性质就会被破坏。当前对象能给出本次 nonce,却无法枚举另一台主机、另一个区域、旧备份或恢复前已经发生的所有加密操作。
这正是对象证据与历史证据的分界。十二个八位组是 GCM nonce 的推荐长度,也有更高的处理效率;它不证明某个克隆进程昨天没有生成完全相同的十二个八位组。看似随机也不够:虚拟机快照可以连同伪随机生成器状态一起复制。
RFC 5084 没有把问题留给一句模糊的“谨慎使用”。它要求实现采用自动化密钥管理。标准列出密钥传输、密钥协商、对称密钥加密密钥,以及由口令或共享秘密派生的密钥加密密钥。只要为每份内容生成新的内容认证加密密钥(CEK),这四条路径都能满足要求。
“每内容一把新 CEK”改变了协调规模。两个对象即使出现相同 nonce,只要实际 CEK 不同,就没有重复被禁止的 key/nonce 对。若组织选择长期复用 CEK,也可以安全运行,但必须为该密钥完整生命周期和全部部署范围维护持久、原子、不会回退的 nonce 命名空间。RFC 不替部署方发明数据库或故障切换协议。
对象内参数仍具有明确约束。GCM 的 GCMParameters 包含 nonce 和十二至十六个八位组的 ICV 长度;十二既是默认值也是推荐值,声明长度必须与 mac 字段匹配。CCM 的 nonce 为七至十三个八位组,ICV 长度可以是四至十六之间的偶数,推荐十二。其 nonce 长度还与可表达的内容长度之间存在取舍。
解析器应拒绝缺失的必选参数、非法长度以及 ICV 与 mac 不一致的对象。通过这些检查,只能证明一个对象符合编码合同。它不证明 CEK 的随机源足够可靠,不证明本地风险政策接受所选标签长度,也不证明另一个发送进程没有共享密钥与分配器状态。
RFC 5083 定义 AuthEnvelopedData 容器。RFC 5084 把其中的认证属性作为 AAD:它们受到认证,但不加密。mac 保护认证属性与加密内容。未认证属性不会因为与受保护字段装在同一个信封里,就自动获得授权效力。
这一点直接影响应用边界。认证标签通过,证明受保护输入与校验所用密钥、字节相符;它不证明某个自然人的身份,不批准业务动作,也不证明解密后的内容已经被正确处理。把未认证属性当成执行指令,是应用另作的一项决定。
RFC 5116 把 AEAD 接口抽象为密钥、nonce、明文和关联数据的输入,以及密文和标签的输出。算法只能处理收到的输入,无法查询协议之外的历史数据库。NIST SP 800-38D 同样把 GCM 的 IV 唯一性视为关键运行条件。
因此,审计记录需要标识密钥,但不能泄露密钥。可行做法是保存非秘密的密钥世代标识、分配器作用域和 nonce 原子分配事件,注明本次 CEK 是专门新建还是来自长期世代;同时保留认证属性的精确编码、密文摘要、标签长度、校验结果与软件版本。
设想一次区域切换:主站在共享 CEK 下分配计数值 12,441,复制只到 12,440。备站接管后从旧状态继续,为另一份内容再次使用 12,441。两个 CMS 对象都能正确解析,也可能都曾被接收者接受。只有把二者绑定到真实的同一密钥世代,才能发现违规。
反向误判同样危险。两份内容分别使用新 CEK,却恰好带有相同 nonce 字节。若监控只看 nonce 而不看真实密钥世代,就会报告不存在的重用。唯一性既不能查得太窄,也不能定义得太宽。
一条可重建的证据链应分别保存:原始 CMS 字节与内容类型;算法 OID 与参数;非秘密 CEK 世代或新密钥生成凭据;nonce 分配命名空间与原子事件;认证属性及其精确 AAD 编码;密文摘要与标签长度;接收者选择及密钥管理分支;解析、解包与标签校验结果;真正密钥作用域内的历史重复检查;明文释放政策;应用授权与结果。
这是运行建议,不是擅自给 RFC 5084 添加语法。按照 Heng Lu 对现实层的要求,算法名称、编码对象、标签通过、历史唯一、接收者决定与业务结果是相邻凭据,不是同一项事实。
来源
- RFC 5084 — CMS 中的 AES-CCM 与 AES-GCM
- RFC 5084 — 规范文本
- RFC Editor 的 RFC 5084 记录
- RFC 5084 勘误检索
- IETF Datatracker 的 RFC 5084 记录
- IETF Datatracker 的 RFC 5084 历史
- RFC 5083 — CMS Authenticated-Enveloped-Data
- RFC 5652 — Cryptographic Message Syntax
- RFC 8551 — S/MIME 4.0 消息规范
- RFC 5116 — AEAD 接口与算法
- RFC 3610 — Counter with CBC-MAC
- RFC 4107 — 密码密钥管理指南
- RFC 4086 — 安全随机性要求
- RFC 7696 — 密码算法敏捷性指南
- RFC 9053 — COSE 算法
- IANA — AEAD 参数
- NIST SP 800-38D — GCM 与 GMAC
- Heng Lu — 运行代码优先
- Heng Lu — 最小初始规范
- Heng Lu — 现实层
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
