跳到主要内容

1. 引言 (Introduction)

构成物联网 (Internet of Things, IoT) 的小型受限设备越来越受到关注. 这一过程中产生的标准之一是 "Concise Binary Object Representation (CBOR)" [RFC8949]. CBOR 通过允许二进制数据等变化扩展了 JavaScript Object Notation (JSON) [STD90] 的数据模型. 多个处理 IoT 领域问题的 IETF 工作组已经采用 CBOR 作为其数据结构的编码方法. CBOR 的设计目标是让传输的消息和实现规模都较小, 并支持无模式解码器 (schema-free decoder). IoT 需要消息安全服务, 因此使用 CBOR 作为消息编码格式是合理的.

计数器签名 (countersignature) 是用于确认主签名的第二个签名. 在将 CBOR Object Signing and Encryption (COSE) 推进为 Internet Standard 的过程中, 人们注意到 [RFC8152] Section 4.5 中提到的 COSE_Sign1 结构对 countersignature 安全属性的描述并不正确. 为解决这一问题, COSE Working Group 决定从取代 [RFC8152] 的 [RFC9052] 中移除所有 countersignature 文本. 本文档定义了一种具有预期安全属性的新 countersignature.

先前 countersignature 算法的问题在于, 以密码学方式计算出的值并不总是被纳入其中. 当时已经知道"cryptographic value 位于数组第三个槽位"这一初始假设并不总成立, 但对于消息认证码 (Message Authentication Code, MAC) 结构, 这并未被认为是问题. 本文档定义的新算法要求在 countersignature 计算中纳入更多值. 例外是 COSE_Signature 结构, 因为其中没有以密码学方式计算出的值.

本文档定义的新算法经过设计, 在已经包含计算出的 cryptographic value 的情况下会生成相同的 countersignature value. 这意味着对于这些结构, 唯一需要做的就是更改 header parameter 的值.

随着本文档发布, 鼓励实现者将先前 countersignature 算法的用法迁移到本文档指定的算法. 特别是, "CounterSignature" 的用法将迁移到 "CounterSignatureV2", "CounterSignature0" 的用法将迁移到 "CounterSignature0V2". 此外, 新实现必须支持验证 "CounterSignature", 以便与遵循 [RFC8152] 的发送方保持兼容; [RFC8152] 假设所有实现都会将 "CounterSignature" 理解为 header parameter label 7. 同样, 为了进一步兼容, 可以支持验证 "CounterSignature0".

1.1. 需求术语 (Requirements Terminology)

本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" 和 "OPTIONAL", 当且仅当它们像这里这样以全大写形式出现时, 应按 BCP 14 [RFC2119] [RFC8174] 中的描述解释.

1.2. CBOR 语法 (CBOR Grammar)

本文档中的 CBOR grammar 使用 Concise Data Definition Language (CDDL) [RFC8610].

可以通过下面的 XPath 表达式从本文档的 XML 版本中提取汇总后的 CDDL. (取决于所使用的 XPath 求值器, 可能需要将 > 作为实体处理.)

//sourcecode[@type='cddl']/text()

CDDL 期望初始非终结符号是文件中的第一个符号. 因此, 这里给出第一个 CDDL 片段.

start = COSE_Countersignature_Tagged / Internal_Types

; This is defined to make the tool quieter:
Internal_Types = Countersign_structure / COSE_Countersignature0

定义非终结符 Internal_Types 是为了处理本文档编写期间使用的自动化验证工具. 它引用那些用于安全计算但不会为传输而发出的非终结符.

1.3. 文档术语 (Document Terminology)

本文档使用以下术语.

"Byte" 是 "octet" 的同义词.

Constrained Application Protocol (CoAP) 是一种用于受限系统的专用 Web 传输协议. 它定义于 [RFC7252].

本文档通篇使用 "Context" 表示不属于 COSE message 的信息. 属于 context 的信息可以来自不同来源, 包括协议交互, 关联的密钥结构和应用程序配置. 所使用的 context 可以是隐式的, 也可以使用 [RFC8613] 中定义的 "kid context" header parameter 或特定于协议的标识符来标识. 通常应将 context 纳入 cryptographic construction; 更多细节见 [RFC9052] Section 4.4.

术语 "byte string" 用于字节序列, 而术语 "text string" 用于字符序列.