8. COSE 機能
- COSE 機能
アルゴリズムまたは鍵タイプの機能は、いくつかの状況で指定する必要があります。これには、S/MIME仕様に対応するものがあり、SMIMECapabilitiesは[RFC8551]のセクション2.5.2で定義されています。このドキュメントは、COSEに対して同じ概念を定義します。
アルゴリズム識別子は、メッセージの他の場所でエンコードされる必要があるため、機能データには含まれません。鍵タイプ識別子は、他の場所でエンコードされることが期待されていないため、機能データに含まれます。
2つの異なるタイプの機能が定義されています。アルゴリズムの機能と鍵タイプの機能です。IANAへの登録によって定義されると、アルゴリズムまたは鍵タイプの機能のリストは不変です。後で鍵タイプまたはアルゴリズムに新しい機能が必要であることが判明した場合、それに対処するために新しいコードポイントを割り当てる必要があります。原則として、機能はアルゴリズム固有のヘッダーパラメータまたは鍵パラメータにマッピングされますが、そうする必要はありません。これの例は、以下で定義されているHSS-LMS鍵タイプ機能であり、使用されるハッシュアルゴリズムが含まれています。
機能構造は値の配列です。構造に含まれる値は、特定のアルゴリズムまたは鍵タイプに依存します。アルゴリズム機能の場合、最初の要素は常に鍵タイプ値(該当する場合)である必要がありますが、鍵に固有の項目(たとえば、曲線)はアルゴリズム機能に含めるべきではありません。つまり、ECDHを実装するデバイスのすべての機能を列挙したい場合は、アルゴリズムと鍵ペアのすべての組み合わせを指定する必要があります。セクション8.3の最後の例では、アルゴリズム機能の配列と鍵タイプ機能の配列の間で直積を指定できるようにすることでこれが行われるケースを示しています(ECDH-ES+A25KW要素を参照)。鍵の場合、最初の要素は鍵タイプ値である必要があります。これは、アルゴリズム機能と鍵機能の両方が使用される場合、鍵タイプ値が重複することを意味しますが、残りの値を理解するためには鍵タイプが必要です。
8.1. 既存のアルゴリズムへの割り当て
IV-GENERATION以外のレジストリ内の現在のアルゴリズムセット(このドキュメントのアルゴリズム、および[RFC8230]、[RFC8778]、[RFC9021]のアルゴリズム)の場合、機能リストは1つの要素、つまり鍵タイプ("COSE Key Types" レジストリから)を持つ配列です。将来登録されるアルゴリズムには、0個、1個、または複数の要素が含まれる可能性があります。
8.2. 既存の鍵タイプへの割り当て
既存の鍵タイプが多数あります。以下は、それらの構造の機能定義の作成を扱います。
-
OKP, EC2: 機能のリストは次のとおりです。
-
鍵タイプの値。(OKPの場合は1、EC2の場合は2。)
-
"COSE Elliptic Curves" レジストリからのその鍵タイプの1つの曲線。
-
-
RSA: 機能のリストは次のとおりです。
- 鍵タイプの値 (3)。
-
Symmetric: 機能のリストは次のとおりです。
- 鍵タイプの値 (4)。
-
HSS-LMS: 機能のリストは次のとおりです。
-
鍵タイプの値 (5)。
-
"COSE Algorithms" レジストリからの基礎となるハッシュ関数のアルゴリズム識別子。
-
-
WalnutDSA: 機能のリストは次のとおりです。
-
鍵タイプの値 (6)。
-
鍵のN値(グループおよび行列サイズ)、uint。
-
鍵のq値(有限体位数)、uint。
-
8.3. 例
機能は、双方が同じパラメータを使用していることを確認するために、鍵導出プロセスで使用できます。以下の3つの例は、アプリケーションプロトコルを指定する際にパラメータを利用するさまざまな方法を示しています。
-
アルゴリズム機能のみ: プロトコルが特定のアルゴリズム(ES256など)を必要とするが、使用されている曲線については問わない場合に役立ちます。これには、アルゴリズム識別子をプロトコルで指定する必要があります。最初の例を参照してください。
-
鍵タイプ機能のみ: プロトコルが特定の鍵タイプと曲線(P-256など)を必要とするが、その曲線を使用するアルゴリズム(ECDSAとECDHの両方など)を受け入れる場合に役立ちます。2番目の例を参照してください。
-
アルゴリズムと鍵タイプの両方の機能: プロトコルがアルゴリズムに関するすべてのオプション(たとえば、曲線Ed25519を使用したEdDSA)を決定する必要がある場合に使用されます。最初の例と同様に、アルゴリズム識別子をプロトコルで指定する必要があります。3番目の例を参照してください。これは、2つの機能を連結するだけです。
アルゴリズム ES256
0x8102 / [2 \ EC2 \ ] /
鍵タイプ EC2 と P-256 曲線:
0x820201 / [2 \ EC2 , 1 \ P-256 ] /
ECDH-ES + A256KW と X25519 曲線:
0x8101820104 / [1 \ OKP ],[1 \ OKP , 4 \ X25519 ] /
機能は、エンティティが何ができるかを宣伝するためにも使用できます。以下のデコードされた例は、その目的で使用できる多くのエンコーディングの1つです。各配列要素には、アルゴリズム識別子、1つ以上のアルゴリズム機能、および1つ以上の鍵タイプ機能の3つのフィールドが含まれています。
[
[-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 /]
]
]
上記を検討すると:
-
最初の要素は、エンティティが曲線Ed25519およびEd448を使用したEdDSAをサポートしていることを示します。
-
2番目の要素は、エンティティが曲線P-256およびP-521を使用したSHA-256付きECDSAをサポートしていることを示します。
-
3番目の要素は、エンティティがAES256キーラップを使用したEphemeral-Static ECDHをサポートしていることを示します。エンティティは、EC2鍵タイプのP-256曲線とOKP鍵タイプのX25519曲線をサポートできます。
-
最後の要素は、エンティティがコンテンツ暗号化のために128ビットのAES-GCMをサポートしていることを示します。
エンティティは、MACアルゴリズムをサポートしていることを宣伝していません。