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

1. はじめに

モノのインターネット (IoT) を構成する小型で制約のあるデバイスへの注目が高まっています。このプロセスから生まれた標準の1つが「簡潔なバイナリ・オブジェクト表現 (CBOR)」[RFC8949] です。CBORは、バイナリデータを許可することなどにより、JavaScript Object Notation (JSON) [STD90] のデータモデルを拡張しました。CBORは、IoTの世界を扱ういくつかのIETFワーキンググループによって、データ構造をエンコードする方法として採用されています。CBORは、転送されるメッセージと実装サイズの両方の点で小さくなるように、またスキーマフリーのデコーダーを持つように特別に設計されました。IoTにメッセージセキュリティサービスを提供する必要があり、メッセージエンコーディング形式としてCBORを使用することは理にかなっています。

カウンター署名(Countersignature)は、主要な署名を確認する2番目の署名です。CBORオブジェクト署名および暗号化 (COSE) をインターネット標準に進める過程で、[RFC8152] のセクション4.5で言及されているCOSE_Sign1構造に対するカウンター署名のセキュリティプロパティの説明が正しくないことが判明しました。この状況を改善するために、COSEワーキンググループは、[RFC8152] を廃止する [RFC9052] からカウンター署名のテキストをすべて削除することを決定しました。本文書は、望ましいセキュリティプロパティを持つ新しいカウンター署名を定義します。

以前のカウンター署名アルゴリズムの問題は、暗号学的に計算された値が常に含まれているわけではないことでした。暗号値が配列の3番目のスロットにあるという最初の仮定は、当時は正しくないことが知られていましたが、メッセージ認証コード (MAC) 構造の場合、これは問題とは見なされませんでした。本文書で定義されている新しいアルゴリズムでは、カウンター署名の計算により多くの値を含める必要があります。これに対する例外はCOSE_Signature構造であり、暗号学的に計算された値はありません。

本文書で定義されている新しいアルゴリズムは、計算された暗号値がすでに含まれている場合に、同じカウンター署名値を生成するように設計されています。これは、これらの構造については、ヘッダーパラメータの値を変更するだけでよいことを意味します。

本文書の公開に伴い、実装者は以前のカウンター署名アルゴリズムの使用を、本文書で指定されているものに移行することをお勧めします。特に、「CounterSignature」の使用は「CounterSignatureV2」に移行し、「CounterSignature0」の使用は「CounterSignature0V2」に移行します。さらに、新しい実装では「CounterSignature」の検証をサポートして、すべての実装が「CounterSignature」をヘッダーパラメータラベル7として理解すると想定している [RFC8152] に準拠した送信者との互換性を維持する必要があります。同様に、「CounterSignature0」の検証も、さらなる互換性のためにサポートされる場合があります。

1.1. 要件の用語

本文書におけるキーワード "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", および "OPTIONAL" は、ここに示されているようにすべて大文字で表示される場合にのみ、BCP 14 [RFC2119] [RFC8174] で説明されているように解釈されます。

1.2. CBOR文法

本文書のCBOR文法は、Concise Data Definition Language (CDDL) [RFC8610] を使用しています。

収集されたCDDLは、以下のXPath式を介して、本文書のXMLバージョンから抽出できます。(使用しているXPathエバリュエーターによっては、> をエンティティとして処理する必要がある場合があります。)

//sourcecode[@type='cddl']/text()

CDDLは、最初の非終端記号がファイル内の最初の記号であることを期待しています。このため、CDDLの最初のフラグメントをここに示します。

start = COSE_Countersignature_Tagged / Internal_Types

; This is defined to make the tool quieter:
Internal_Types = Countersign_structure / COSE_Countersignature0

非終端記号 Internal_Types は、本文書の作成中に使用される自動検証ツールを処理するために定義されています。これは、セキュリティ計算に使用されるが転送用には出力されない非終端記号を参照します。

1.3. 文書の用語

本文書では、以下の用語を使用します。

「Byte(バイト)」は「octet(オクテット)」の同義語です。

制約付きアプリケーションプロトコル (CoAP) は、制約のあるシステムで使用するための特殊なWeb転送プロトコルです。これは [RFC7252] で定義されています。

「Context(コンテキスト)」は、COSEメッセージの一部ではない情報を表すために、本文書全体で使用されます。コンテキストの一部である情報は、プロトコルの相互作用、関連するキー構造、アプリケーション構成など、さまざまなソースから取得できます。使用するコンテキストは、暗黙的であるか、[RFC8613] で定義されている「kid context」ヘッダーパラメータまたはプロトコル固有の識別子を使用して識別できます。コンテキストは通常、暗号化構成に含める必要があります。詳細については、[RFC9052] のセクション4.4を参照してください。

用語「byte string(バイト文字列)」はバイトのシーケンスに使用され、用語「text string(テキスト文字列)」は文字のシーケンスに使用されます。