7. Creating and Validating CWTs (创建与校验 CWT)
7. Creating and Validating CWTs (创建与校验 CWT)
7.1 Creating a CWT (创建 CWT)
要创建 CWT, 执行以下步骤. 当各步骤的输入与输出之间不存在依赖关系时, 步骤顺序并不重要.
-
创建包含所需声明的 CWT Claims Set (CWT 声明集).
-
令 Message (消息) 为 CWT Claims Set 的二进制表示.
-
创建包含所需 Header Parameters (头部参数) 集合的 COSE Header (COSE 头部). COSE Header 必须符合 [RFC8152] 规范.
-
根据 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 对象规定的全部步骤.
-
-
若还将执行嵌套的签名, MAC 或加密操作, 则令 Message 为带标签的 COSE_Sign/COSE_Sign1, COSE_Mac/COSE_Mac0 或 COSE_Encrypt/COSE_Encrypt0, 并返回第 3 步.
-
若应用需要, 在 COSE 对象前添加适当的 COSE CBOR 标签以指示 COSE 对象的类型. 若应用需要, 在 COSE 对象前添加 CWT CBOR 标签以表明该 COSE 对象是一个 CWT.
7.2 Validating a CWT (校验 CWT)
校验 CWT 时执行以下步骤. 当各步骤的输入与输出之间不存在依赖关系时, 步骤顺序并不重要. 若所列任一步骤失败, 则必须拒绝该 CWT, 即由应用将其视为无效输入.
-
验证 CWT 是否为有效的 CBOR 对象.
-
若对象以 CWT CBOR 标签开头, 则移除该标签并验证其后跟随某一 COSE CBOR 标签.
-
若对象带有某一 COSE CBOR 标签之一, 则移除该标签并用其确定 CWT 的类型: COSE_Sign/COSE_Sign1, COSE_Mac/COSE_Mac0 或 COSE_Encrypt/COSE_Encrypt0. 若对象没有 COSE CBOR 标签, 则从应用上下文确定 COSE 消息类型.
-
验证得到的 COSE Header 仅包含语法与语义均被理解且受支持的参数与值, 或包含规范中指定在不被理解时可忽略的参数与值.
-
根据 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).
-
-
若 Message 以 COSE CBOR 标签开头, 则该 Message 曾是嵌套签名, MAC 或加密操作对象的 CWT. 在此情况下, 以 Message 作为 CWT 返回第 1 步.
-
验证 Message 是否为有效的 CBOR 映射; 令 CWT Claims Set 为该 CBOR 映射.