8. COSE 能力
- COSE 能力
在某些情况下需要指定算法或 key type 的能力. 这在 S/MIME 规范中有对应概念, 其中 SMIMECapabilities 定义于 [RFC8551] 第 2.5.2 节. 本文档为 COSE 定义相同概念.
algorithm identifier 不包含在 capabilities data 中, 因为它应在消息中的其他位置编码. key type identifier 包含在 capabilities data 中, 因为预期它不会在其他位置编码.
本文定义两种不同类型的能力: 算法能力和 key type 能力. 一旦通过 IANA 注册定义, 某个算法或 key type 的能力列表就是不可变的. 如果后来发现某个 key type 或算法需要新能力, 则需要分配新的 code point 来处理. 一般而言, 能力会映射到算法特定的头参数或 key 参数, 但并不必须如此. 下文定义的 HSS-LMS key type 能力就是一个示例, 其中包含所使用的 hash algorithm.
capability 结构是一个值数组; 结构中包含的值取决于特定算法或 key type. 对于算法能力, 如果适用, 第一个元素应始终是 key type 值, 但不应在算法能力中包含 key 特定项目 (例如 curve). 这意味着, 如果希望枚举实现 ECDH 的设备的所有能力, 就需要指定算法和 key pair 的所有组合. 第 8.3 节最后一个示例展示了一种情况, 即允许在算法能力数组和 key type 能力之间指定笛卡尔积 (见 ECDH-ES+A25KW 元素). 对于 key, 第一个元素应是 key type 值. 这意味着如果同时使用算法能力和 key 能力, key type 值会重复, 但为了理解其余值, key type 是必需的.
8.1. 现有算法的分配
对于注册表中除 IV-GENERATION 之外的当前算法集合 (本文档中的算法以及 [RFC8230], [RFC8778] 和 [RFC9021] 中的算法), capabilities 列表是一个只含一个元素的数组, 该元素是 key type (来自 "COSE Key Types" 注册表). 预期未来注册的算法可以有零个, 一个或多个元素.
8.2. 现有 Key Type 的分配
已存在若干 key type; 以下内容处理如何为这些结构创建 capability 定义:
-
OKP, EC2: The list of capabilities is:
-
key type 值. (OKP 为 1, EC2 为 2.)
-
来自 "COSE Elliptic Curves" 注册表的, 用于该 key type 的一个 curve.
-
-
RSA: The list of capabilities is:
- key type 值 (3).
-
Symmetric: The list of capabilities is:
- key type 值 (4).
-
HSS-LMS: The list of capabilities is:
-
key type 值 (5).
-
来自 "COSE Algorithms" 注册表的底层 hash function 的 algorithm identifier.
-
-
WalnutDSA: The list of capabilities is:
-
key type 值 (6).
-
key 的 N 值 (group and matrix size), 类型为 uint.
-
key 的 q 值 (finite field order), 类型为 uint.
-
8.3. 示例
Capabilities 可用于密钥派生过程, 以确保双方使用相同参数. 以下三个示例展示了在指定应用协议时利用参数的不同方式:
-
仅算法能力: 如果协议希望要求特定算法, 例如 ES256, 但不关心使用哪个 curve, 这会很有用. 这要求在协议中指定 algorithm identifier. 见第一个示例.
-
仅 key type 能力: 如果协议希望要求特定 key type 和 curve, 例如 P-256, 但接受使用该 curve 的任何算法 (例如 ECDSA 和 ECDH), 这会很有用. 见第二个示例.
-
同时使用算法能力和 key type 能力: 如果协议需要固定围绕某个算法的所有选项, 例如使用 curve Ed25519 的 EdDSA, 则使用此方式. 与第一个示例一样, 需要在协议中指定 algorithm identifier. 见第三个示例, 它只是把两个能力连接在一起.
Algorithm ES256
0x8102 / [2 \ EC2 \ ] /
Key type EC2 with P-256 curve:
0x820201 / [2 \ EC2 , 1 \ P-256 ] /
ECDH-ES + A256KW with an X25519 curve:
0x8101820104 / [1 \ OKP ],[1 \ OKP , 4 \ X25519 ] /
实体也可以使用 capabilities 来通告其能力. 下方解码后的示例只是可用于该目的的多种编码之一. 每个数组元素包含三个字段: algorithm identifier, 一个或多个算法能力, 以及一个或多个 key type 能力.
[ [-8 / EdDSA /, [1 / OKP key type /], [ [1 / OKP /, 6 / Ed25519 / ], [1 /OKP/, 7 /Ed448 /] ] ], [-7 / ECDSA with SHA-256/, [2 /EC2 key type/], [ [2 /EC2/, 1 /P-256/], [2 /EC2/, 3 /P-521/] ] ], [ -31 / ECDH-ES+A256KW/, [ [ 2 /EC2/], [1 /OKP/ ] ], [ [2 /EC2/, 1 /P-256/], [1 /OKP/, 4 / X25519/ ] ] ], [ 1 / A128GCM /, [ 4 / Symmetric / ], [ 4 / Symmetric /] ] ]
检查上述内容:
-
第一个元素表示该实体支持使用 curve Ed25519 和 Ed448 的 EdDSA.
-
第二个元素表示该实体支持使用 curve P-256 和 P-521 的 ECDSA with SHA-256.
-
第三个元素表示该实体支持使用 AES256 key wrap 的 Ephemeral-Static ECDH. 该实体可支持带 EC2 key type 的 P-256 curve, 以及带 OKP key type 的 X25519 curve.
-
最后一个元素表示该实体支持用于内容加密的 128 位 AES-GCM.
该实体未通告其支持任何 MAC 算法.