メインコンテンツまでスキップ

7. 鍵オブジェクト

  1. 鍵オブジェクト

COSE鍵構造は、CBORマップ上に構築されています。COSE鍵に現れる可能性のある一般的なパラメータのセットは、IANA「COSE Key Common Parameters」レジストリ[COSE.KeyParameters](第11.2節を参照)にあります。特定の鍵タイプ用に定義された追加パラメータは、IANA「COSE Key Type Parameters」レジストリ[COSE.KeyTypes]にあります。

COSE鍵セットは、その基礎となるタイプとしてCBOR配列オブジェクトを使用します。配列要素の値はCOSE鍵です。COSE鍵セットは、配列内に少なくとも1つの要素を持たなければなりません。COSE鍵セットの例は、付録C.7にあります。

COSE鍵セット内の各要素は、個別に処理されなければなりません。COSE鍵セット内の1つの要素が不正な形式であるか、アプリケーションによって理解されない鍵を使用している場合、その鍵は無視され、他の鍵は正常に処理されます。

要素「kty」は、COSE_Keyマップの必須要素です。

COSE_KeyおよびCOSE_KeySetを記述するCDDL文法は次のとおりです:

   COSE_Key = {
1 => tstr / int, ; kty
? 2 => bstr, ; kid
? 3 => tstr / int, ; alg
? 4 => [+ (tstr / int) ], ; key_ops
? 5 => bstr, ; Base IV
* label => values
}

COSE_KeySet = [+COSE_Key]

7.1. COSE鍵共通パラメータ

このドキュメントは、COSE鍵オブジェクトの一連の共通パラメータを定義します。表4は、このセクションで定義されているパラメータの要約を提供します。特定の鍵タイプ用に定義されたパラメータもあります。鍵タイプ固有のパラメータは[RFC9053]にあります。

  +=========+=======+========+============+====================+
| 名前 | ラベル| CBOR | 値 | 説明 |
| | | タイプ | レジストリ | |
+=========+=======+========+============+====================+
| kty | 1 | tstr / | COSE Key | 鍵タイプの識別 |
| | | int | Types | |
+---------+-------+--------+------------+--------------------+
| kid | 2 | bstr | | 鍵識別値 |
| | | | | -- メッセージ内の |
| | | | | 「kid」と一致 |
+---------+-------+--------+------------+--------------------+
| alg | 3 | tstr / | COSE | 鍵の使用を |
| | | int | Algorithms | このアルゴリズムに |
| | | | | 制限する |
+---------+-------+--------+------------+--------------------+
| key_ops | 4 | [+ | | 許可される操作の |
| | | (tstr/ | | セットを制限する |
| | | int)] | | |
+---------+-------+--------+------------+--------------------+
| Base IV | 5 | bstr | | 部分IVとXORされる |
| | | | | ベースIV |
+---------+-------+--------+------------+--------------------+

表 4: 鍵マップラベル

kty: このパラメータは、この構造の鍵のファミリーを識別するために使用され、したがって、見つかる鍵タイプ固有のパラメータのセットを識別します。このドキュメントで定義されている値のセットは、[COSE.KeyTypes]にあります。このパラメータは、鍵オブジェクトに存在しなければなりません。実装は、鍵タイプが処理されているアルゴリズムに適切であることを確認しなければなりません。鍵タイプは、信頼決定プロセスの一部として含まれなければなりません。

alg: このパラメータは、鍵で使用されるアルゴリズムを制限するために使用されます。このパラメータが鍵構造に存在する場合、アプリケーションは、このアルゴリズムが鍵が使用されているアルゴリズムと一致することを確認しなければなりません。アルゴリズムが一致しない場合、この鍵オブジェクトは暗号化操作を実行するために使用してはなりません。同じ鍵が、異なるアルゴリズムが指定されているか、アルゴリズムが指定されていない別の鍵構造にある可能性があることに注意してください。ただし、これは不十分なセキュリティ慣行と見なされます。

kid: このパラメータは、鍵の識別子を与えるために使用されます。識別子は構造化されておらず、ユーザーが提供したバイト文字列から鍵の公開部分で計算された値まで、何でもかまいません。このフィールドは、チェックする必要がある鍵のセットを絞り込むために、メッセージ内の「kid」パラメータと照合することを目的としています。識別子の値は一意の値ではなく、異なる鍵であっても他の鍵オブジェクトで発生する可能性があります。

key_ops: このパラメータは、鍵が使用される操作のセットを制限するために定義されています。フィールドの値は、表5の値の配列です。アルゴリズムは、出現が許可され、特定の操作に必要な主要な操作の値を定義します。値のセットは、[RFC7517]および[W3C.WebCrypto]の値のセットと一致します。

Base IV: このパラメータは、IVのベース部分を運ぶために定義されています。これは、第3.1節で定義されている部分IVヘッダーパラメータと共に使用するように設計されています。このフィールドは、ベースIVを鍵に関連付け、その後、部分IVを使用してメッセージごとに変更する機能を提供します。

  アプリケーションでベースIVを使用する場合は、細心の注意が必要です。同じIVが2回使用されると、多くの暗号化アルゴリズムはセキュリティを失います。

送信者ごとに異なる鍵が導出される場合、同じベースIVから開始することでこの条件を満たす可能性があります。同じ鍵が複数の送信者に使用される場合、アプリケーションは送信者間でIVスペースを分割する方法を提供する必要があります。これは、開始する異なるベースポイント、または開始する異なる部分IVを提供し、キー更新の前に送信されるメッセージの数を制限することによって行うことができます。

+=========+=======+==============================================+
| 名前 | 値 | 説明 |
+=========+=======+==============================================+
| sign | 1 | 鍵は署名の作成に使用されます。 |
| | | 秘密鍵フィールドが必要です。 |
+---------+-------+----------------------------------------------+
| verify | 2 | 鍵は署名の検証に使用されます。 |
| | | |
+---------+-------+----------------------------------------------+
| encrypt | 3 | 鍵は鍵転送の暗号化に使用されます。 |
| | | |
+---------+-------+----------------------------------------------+
| decrypt | 4 | 鍵は鍵転送の復号に使用されます。 |
| | | 秘密鍵フィールドが必要です。 |
+---------+-------+----------------------------------------------+
| wrap | 5 | 鍵はキーラップ暗号化に使用されます。 |
| key | | |
+---------+-------+----------------------------------------------+
| unwrap | 6 | 鍵はキーラップ復号に使用されます。 |
| key | | 秘密鍵フィールドが必要です。 |
+---------+-------+----------------------------------------------+
| derive | 7 | 鍵は鍵の導出に使用されます。 |
| key | | 秘密鍵フィールドが必要です。 |
+---------+-------+----------------------------------------------+
| derive | 8 | 鍵は、鍵として使用されないビットの導出に使用 |
| bits | | されます。秘密鍵フィールドが必要です。 |
+---------+-------+----------------------------------------------+
| MAC | 9 | 鍵はMACの作成に使用されます。 |
| create | | |
+---------+-------+----------------------------------------------+
| MAC | 10 | 鍵はMACの検証に使用されます。 |
| verify | | |
+---------+-------+----------------------------------------------+

表 5: 鍵操作値