跳到主要内容

7. Creating and Validating CWTs (创建与校验 CWT)

7. Creating and Validating CWTs (创建与校验 CWT)

7.1 Creating a CWT (创建 CWT)

要创建 CWT, 执行以下步骤. 当各步骤的输入与输出之间不存在依赖关系时, 步骤顺序并不重要.

  1. 创建包含所需声明的 CWT Claims Set (CWT 声明集).

  2. 令 Message (消息) 为 CWT Claims Set 的二进制表示.

  3. 创建包含所需 Header Parameters (头部参数) 集合的 COSE Header (COSE 头部). COSE Header 必须符合 [RFC8152] 规范.

  4. 根据 CWT 是签名, MAC 保护还是加密, 分三种情况:

    • 若 CWT 经签名, 则使用 Message 作为 COSE_Sign/COSE_Sign1 Payload (有效载荷) 创建 COSE_Sign/COSE_Sign1 对象; 必须遵循 [RFC8152] 中为创建 COSE_Sign/COSE_Sign1 对象规定的全部步骤.

    • 否则, 若 CWT 经 MAC 保护, 则使用 Message 作为 COSE_Mac/COSE_Mac0 Payload 创建 COSE_Mac/COSE_Mac0 对象; 必须遵循 [RFC8152] 中为创建 COSE_Mac/COSE_Mac0 对象规定的全部步骤.

    • 否则, 若 CWT 为 COSE_Encrypt/COSE_Encrypt0 对象, 则使用 Message 作为 COSE_Encrypt/COSE_Encrypt0 对象的明文 (plaintext) 创建 COSE_Encrypt/COSE_Encrypt0; 必须遵循 [RFC8152] 中为创建 COSE_Encrypt/COSE_Encrypt0 对象规定的全部步骤.

  5. 若还将执行嵌套的签名, MAC 或加密操作, 则令 Message 为带标签的 COSE_Sign/COSE_Sign1, COSE_Mac/COSE_Mac0 或 COSE_Encrypt/COSE_Encrypt0, 并返回第 3 步.

  6. 若应用需要, 在 COSE 对象前添加适当的 COSE CBOR 标签以指示 COSE 对象的类型. 若应用需要, 在 COSE 对象前添加 CWT CBOR 标签以表明该 COSE 对象是一个 CWT.

7.2 Validating a CWT (校验 CWT)

校验 CWT 时执行以下步骤. 当各步骤的输入与输出之间不存在依赖关系时, 步骤顺序并不重要. 若所列任一步骤失败, 则必须拒绝该 CWT, 即由应用将其视为无效输入.

  1. 验证 CWT 是否为有效的 CBOR 对象.

  2. 若对象以 CWT CBOR 标签开头, 则移除该标签并验证其后跟随某一 COSE CBOR 标签.

  3. 若对象带有某一 COSE CBOR 标签之一, 则移除该标签并用其确定 CWT 的类型: COSE_Sign/COSE_Sign1, COSE_Mac/COSE_Mac0 或 COSE_Encrypt/COSE_Encrypt0. 若对象没有 COSE CBOR 标签, 则从应用上下文确定 COSE 消息类型.

  4. 验证得到的 COSE Header 仅包含语法与语义均被理解且受支持的参数与值, 或包含规范中指定在不被理解时可忽略的参数与值.

  5. 根据 CWT 是经签名, MAC 保护还是加密, 分三种情况:

    • 若 CWT 为 COSE_Sign/COSE_Sign1, 则遵循 [RFC8152] 第 4 节 ("Signing Objects", 签名对象) 中为校验 COSE_Sign/COSE_Sign1 对象规定的步骤. 令 Message 为 COSE_Sign/COSE_Sign1 payload.

    • 否则, 若 CWT 为 COSE_Mac/COSE_Mac0, 则遵循 [RFC8152] 第 6 节 ("MAC Objects", MAC 对象) 中为校验 COSE_Mac/COSE_Mac0 对象规定的步骤. 令 Message 为 COSE_Mac/COSE_Mac0 payload.

    • 否则, 若 CWT 为 COSE_Encrypt/COSE_Encrypt0 对象, 则遵循 [RFC8152] 第 5 节 ("Encryption Objects", 加密对象) 中为校验 COSE_Encrypt/COSE_Encrypt0 对象规定的步骤. 令 Message 为得到的明文 (plaintext).

  6. 若 Message 以 COSE CBOR 标签开头, 则该 Message 曾是嵌套签名, MAC 或加密操作对象的 CWT. 在此情况下, 以 Message 作为 CWT 返回第 1 步.

  7. 验证 Message 是否为有效的 CBOR 映射; 令 CWT Claims Set 为该 CBOR 映射.