摘要
- RFC 3657 为 Camellia 的 CMS 内容加密和密钥封装分配了不同的算法标识符。CBC 内容加密必须带有 16 字节 IV;密钥封装算法标识符则必须省略参数。
- S/MIME 能力声明采用第三种形式:参数为
NULL。密钥封装 OID 标识的是密钥加密密钥(KEK)的长度,不必等于被封装的内容加密密钥(CEK)长度。
同一个名称,不代表同一种操作
在 CMS 信封中,“Camellia”并不足以让接收方还原发送方做了什么。接收方还必须知道该算法是用于加密消息内容,还是用于封装内容加密密钥(CEK),然后按相应角色解释算法标识符。RFC 3657 于 2004 年 1 月发布,属于 Standards Track;它为 Camellia 规定了这两类 CMS 标识符:一类用于内容 CBC 加密,另一类用于密钥封装。RFC 3657
参数规则清楚地显示了区别。对于 id-camellia128-cbc、id-camellia192-cbc 和 id-camellia256-cbc,AlgorithmIdentifier 的参数字段必须存在,并且包含 16 字节的初始化向量。IV 是内容加密描述的一部分,不能仅凭算法名称推断。RFC 3657 还要求按 CMS 规则填充明文。RFC 3657 RFC 5652
密钥封装的要求恰好相反。三个 Camellia 封装 OID 各带一个表示长度的弧段,但其 AlgorithmIdentifier 参数必须缺省。封装算法自身定义如何使用内部初始值,所以这个字段不传递 IV。OID 中的长度表示密钥加密密钥(KEK)的长度,而不是对被封装 CEK 长度的保证。实现必须支持 KEK 与 CEK 等长;若实现支持不同长度,KEK 必须不短于 CEK。因此 RFC 3657 定义的是编码和兼容边界,不是让整个信封内的密钥都采用同一长度。RFC 3657 RFC 3394
能力声明采用第三种编码
RFC 3657 还规定 S/MIME 客户端如何通过 SMIMECapabilities 声明支持 Camellia。能力 OID 后面带有 NULL 参数。这与密钥封装标识符中参数缺省并不矛盾,因为它们是语义不同的 ASN.1 结构。在线路编码中,NULL 也不等同于没有参数。RFC 还给出了三种密钥长度对应的 DER 编码,使能力声明的格式能够被精确比较。RFC 3657 RFC 2633
能力列表经过签名,按偏好排序,但只部分描述发送方支持的功能。发送方之后还要结合私下协议、用户偏好和法律限制来作出选择。它不是实时握手,不是对收件人当前配置的测试,也不能证明某封邮件实际上用了 Camellia。要判断某次操作选择了什么算法,必须检查 CMS 信封中的内容加密字段和接收方密钥管理字段,而不能只看此前的能力声明。RFC 3657
互操作性取决于不混淆这些边界
互操作审查应分别核对三种上下文。内容 CBC 加密要检查标识符、密钥长度以及 16 字节 IV 是否存在;密钥封装要检查参数是否省略,并按实现声明的支持范围比较 KEK 与 CEK 的实际长度;能力声明则要比较签名后的 DER 值(包括 NULL)和偏好顺序。若把这些结构混为一谈,即使各方都说支持同一算法,也可能产生解析或协商分歧。
RFC 3657 规定 Camellia 密钥封装沿用 RFC 3394 的构造,只是以 Camellia 替换 AES,因为两者的分组长度均为 128 位。默认完整性初始值是常量 A6A6A6A6A6A6A6A6;若解封装未能恢复该值,接收方必须报错且不得返回任何密钥数据。RFC 也允许使用替代初始值,以满足特定应用的完整性范围。该检查针对规定构造中的封装密钥数据,并不验证发送者身份、CMS 内容来源,也不授予用户操作解密结果的权限。RFC 3657 RFC 3394
这篇文章是在重建一份历史编码契约,而非提出当代安全建议或统计部署情况。CMS 算法总表和后续规范可以补足背景,但不能证明哪些产品实现了 RFC 3657,更无法证明普及程度。更有限也更持久的经验是:算法标识符是带类型的协议字段,必须把 OID、参数是否存在以及外层结构放在一起阅读。RFC 3370 RFC 8419
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
