7. 鍵オブジェクトパラメータ
- 鍵オブジェクトパラメータ
COSE_Key オブジェクトは、単一の鍵オブジェクトを保持する方法を定義します。個々の鍵タイプのメンバーを定義することは依然として必要です。このドキュメントのこのセクションでは、特定の鍵タイプのメンバーの初期セットを定義します。
各鍵タイプについて、パブリックメンバーとプライベートメンバーの両方を定義します。パブリックメンバーは、使用のために他者に送信されるものです。プライベートメンバーは、個人が鍵をアーカイブすることを可能にします。ただし、プライベート鍵がプロトコル内のエンティティに配布される状況もいくつかあります。例としては、乱数生成機能が低いエンティティ、マルチキャストタイプの操作のための集中型鍵生成、および共有シークレットが承認目的のベアラートークンとして使用されるプロトコルなどがあります。
鍵タイプは、COSE_Key オブジェクトの "kty" メンバーによって識別されます。このドキュメントでは、メンバーの4つの値を定義します。
+===========+=======+==========================+
| 名前 | 値 | 説明 |
+===========+=======+==========================+
| OKP | 1 | オクテット鍵ペア |
+-----------+-------+--------------------------+
| EC2 | 2 | 楕円曲線鍵(xおよびy |
| | | 座標ペア付き) |
+-----------+-------+--------------------------+
| Symmetric | 4 | 対称鍵 |
+-----------+-------+--------------------------+
| Reserved | 0 | この値は予約済み |
+-----------+-------+--------------------------+
表 17: 鍵タイプの値
7.1. 楕円曲線鍵
楕円曲線鍵には、2つの異なる鍵構造が定義されています。1つのバージョンは、x座標とy座標の両方を使用し、場合によっては点圧縮("EC2")を使用します。これは、[RFC5480]で使用されている従来の楕円曲線(EC)点表現です。もう1つのバージョンは、x座標のみを使用します。これは、y座標が再計算されるか、鍵合意操作に必要ないためです("OKP")。
アプリケーションは、曲線と鍵タイプが一貫していることを確認し、一貫していない場合は鍵を拒否しなければなりません(MUST)。
+=========+=======+==========+=====================================+ | 名前 | 値 | 鍵タイプ | 説明 | +=========+=======+==========+=====================================+ | P-256 | 1 | EC2 | NIST P-256、別名 secp256r1 | +---------+-------+----------+-------------------------------------+ | P-384 | 2 | EC2 | NIST P-384、別名 secp384r1 | +---------+-------+----------+-------------------------------------+ | P-521 | 3 | EC2 | NIST P-521、別名 secp521r1 | +---------+-------+----------+-------------------------------------+ | X25519 | 4 | OKP | X25519、ECDHでのみ使用 | +---------+-------+----------+-------------------------------------+ | X448 | 5 | OKP | X448、ECDHでのみ使用 | +---------+-------+----------+-------------------------------------+ | Ed25519 | 6 | OKP | Ed25519、EdDSAでのみ使用 | +---------+-------+----------+-------------------------------------+ | Ed448 | 7 | OKP | Ed448、EdDSAでのみ使用 | +---------+-------+----------+-------------------------------------+
表 18: 楕円曲線
7.1.1. ダブル座標曲線
一般的に、プロトコルは楕円曲線点を、x座標とy座標、またはx座標とy座標の符号ビットとして送信します。後者のエンコーディングは、潜在的なIPRの問題により、IETFによって推奨されていません。ただし、制約のある環境での操作の場合、y座標を送信しないことでメッセージを縮小する機能は、潜在的に有用です。
両方の座標を持つEC鍵の場合、"kty" メンバーは2(EC2)に設定されます。このセクションで定義される鍵パラメータは、表 19にまとめられています。この鍵タイプに対して定義されるメンバーは次のとおりです。
crv: 鍵で使用される曲線の識別子が含まれています。このドキュメントでこの鍵タイプに対して定義されている曲線は、表 18にあります。他の曲線は将来登録される可能性があり、プライベート曲線も使用できます。
x: EC点のx座標が含まれています。整数は、[SEC1]で定義されているようにバイト文字列に変換されます。先行するゼロオクテットは保持されなければなりません(MUST)。
y: EC点のy座標の符号ビットまたは値が含まれています。値yをエンコードする場合、整数は([SEC1]で定義されているように)バイト文字列に変換され、CBOR bstrとしてエンコードされます。先行するゼロオクテットは保持されなければなりません(MUST)。圧縮点エンコーディングもサポートされています。[SEC1]の楕円曲線点からオクテット文字列への変換関数に記載されているように符号ビットを計算します。符号ビットがゼロの場合、yをCBOR false値としてエンコードします。それ以外の場合は、yをCBOR true値としてエンコードします。無限遠点のエンコーディングはサポートされていません。
d: プライベート鍵が含まれています。
公開鍵の場合、構造内に "crv"、"x"、および "y" が存在することが必須です(REQUIRED)。プライベート鍵の場合、構造内に "crv" および "d" が存在することが必須です(REQUIRED)。プライベート鍵の場合、"x" および "y" も存在することが推奨されます(RECOMMENDED)が、これらは必須要素から再計算でき、省略することでスペースを節約できます。
+======+======+=======+========+=================================+
| 鍵 | 名前 |ラベル | CBOR | 説明 |
|タイプ| | | タイプ | |
+======+======+=======+========+=================================+
| 2 | crv | -1 | int / | EC 識別子 -- |
| | | | tstr | "COSE Elliptic Curves" |
| | | | | レジストリから取得 |
+------+------+-------+--------+---------------------------------+
| 2 | x | -2 | bstr | x座標 |
+------+------+-------+--------+---------------------------------+
| 2 | y | -3 | bstr / | y座標 |
| | | | bool | |
+------+------+-------+--------+---------------------------------+
| 2 | d | -4 | bstr | プライベート鍵 |
+------+------+-------+--------+---------------------------------+
表 19: EC 鍵パラメータ
7.2. オクテット鍵ペア
オクテット鍵ペア(OKP)の新しい鍵タイプが定義されました。このタイプを使用する鍵が楕円曲線であると想定しないでください。この鍵タイプは、他の曲線タイプ(たとえば、超楕円曲面に基づく数学)に使用される可能性があります。
このセクションで定義される鍵パラメータは、表 20にまとめられています。この鍵タイプに対して定義されるメンバーは次のとおりです。
crv: 鍵で使用される曲線の識別子が含まれています。このドキュメントでこの鍵タイプに対して定義されている曲線は、表 18にあります。他の曲線は将来登録される可能性があり、プライベート曲線も使用できます。
x: 公開鍵が含まれています。バイト文字列には、アルゴリズムで定義された公開鍵が含まれています。(X25519の場合、内部的にはリトルエンディアン整数です。)
d: プライベート鍵が含まれています。
公開鍵の場合、構造内に "crv" および "x" が存在することが必須です(REQUIRED)。プライベート鍵の場合、構造内に "crv" および "d" が存在することが必須です(REQUIRED)。プライベート鍵の場合、"x" も存在することが推奨されます(RECOMMENDED)が、これは必須要素から再計算でき、省略することでスペースを節約できます。
+======+==========+=======+=======+=================================+ | 名前 | 鍵 |ラベル | タイプ| 説明 | | | タイプ | | | | +======+==========+=======+=======+=================================+ | crv | 1 | -1 | int / | EC 識別子 -- | | | | | tstr | "COSE Elliptic Curves" | | | | | | レジストリから取得 | +------+----------+-------+-------+---------------------------------+ | x | 1 | -2 | bstr | 公開鍵 | +------+----------+-------+-------+---------------------------------+ | d | 1 | -4 | bstr | プライベート鍵 | +------+----------+-------+-------+---------------------------------+
表 20: オクテット鍵ペアパラメータ
7.3. 対称鍵
場合によっては、エンティティ間で対称鍵を転送する必要があります。この鍵構造により、それが可能になります。
対称鍵の場合、"kty" メンバーは4("Symmetric")に設定されます。この鍵タイプに対して定義されるメンバーは次のとおりです。
k: 鍵の値が含まれています。
この鍵構造には、パブリックメンバーのみを含む形式はありません。この鍵構造は送信されることが予想されるため、誤ってまたは安全でない方法で送信されないように注意する必要があります。対称鍵の場合、構造内に "k" が存在することが必須です(REQUIRED)。
+======+==========+=======+======+=============+
| 名前 | 鍵タイプ |ラベル |タイプ| 説明 |
+======+==========+=======+======+=============+
| k | 4 | -1 | bstr | 鍵の値 |
+------+----------+-------+------+-------------+
表 21: 対称鍵パラメータ