2. 基本的なCOSE構造
- 基本的なCOSE構造
COSEオブジェクト構造は、異なる種類のセキュリティメッセージを解析および処理する際に、大量の共通コードが存在できるように設計されています。すべてのメッセージ構造は、CBOR配列タイプに基づいて構築されています。配列の最初の3つの要素には、常に同じ情報が含まれています。
-
保護されたヘッダーパラメータ。エンコードされ、bstrにラップされています。
-
保護されていないヘッダーパラメータ。マップとして表現されます。
-
メッセージの内容。内容は、必要に応じて平文または暗号文のいずれかです。内容は分離されている(つまり、COSE構造とは別に転送される)場合がありますが、場所は引き続き使用されます。内容は、存在する場合はbstrにラップされ、分離されている場合はnil値になります。
この点以降の要素は、特定のメッセージタイプに依存します。
COSEメッセージは、異なる種類の暗号概念を分離するために、レイヤーの概念を使用して構築されています。これがどのように機能するかの例として、COSE_Encryptメッセージ(セクション5.1)を考えてみましょう。このメッセージタイプは、コンテンツレイヤーと受信者レイヤーの2つのレイヤーに分かれています。コンテンツレイヤーには、暗号化された平文と暗号化されたメッセージに関する情報が含まれています。受信者レイヤーには、各受信者の暗号化されたコンテンツ暗号化キー(CEK)と、それがどのように暗号化されているかに関する情報が含まれています。暗号化メッセージの単一層バージョンであるCOSE_Encrypt0(セクション5.2)は、CEKが事前に共有されている場合のために提供されています。
提示されたメッセージの種類の識別は、次の方法で行われます。
-
特定のメッセージタイプは、コンテキストからわかります。これは、包含構造内のマーカーによって、またはアプリケーションプロトコルによって指定された制限によって定義される場合があります。
-
メッセージタイプは、CBORタグによって識別されます。CBORタグを持つメッセージは、この仕様ではタグ付きメッセージと呼ばれ、CBORタグを持たないメッセージはタグなしメッセージと呼ばれます。このドキュメントでは、各メッセージ構造に対してCBORタグを定義しています。これらのタグは表1にあります。
-
COSEオブジェクトが「application/cose」のメディアタイプで運ばれる場合、オプションのパラメータ「cose-type」を使用して、埋め込まれたオブジェクトを識別できます。構造のタグ付きバージョンが使用される場合、パラメータはOPTIONAL(任意)です。構造のタグなしバージョンが使用される場合、パラメータはREQUIRED(必須)です。各構造のパラメータで使用する値は、表1にあります。
-
COSEオブジェクトがCoAPペイロードとして運ばれる場合、CoAP Content-Formatオプションを使用してメッセージコンテンツを識別できます。CoAP Content-Format値は表2にあります。各セキュリティメッセージは一意に識別されるため、メッセージ構造のCBORタグは必要ありません。
+==========+===============+===============+=======================+ | CBOR Tag | cose-type | Data Item | Semantics | +==========+===============+===============+=======================+ | 98 | cose-sign | COSE_Sign | COSE Signed Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 18 | cose-sign1 | COSE_Sign1 | COSE Single Signer | | | | | Data Object | +----------+---------------+---------------+-----------------------+ | 96 | cose-encrypt | COSE_Encrypt | COSE Encrypted Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 16 | cose-encrypt0 | COSE_Encrypt0 | COSE Single Recipient | | | | | Encrypted Data Object | +----------+---------------+---------------+-----------------------+ | 97 | cose-mac | COSE_Mac | COSE MACed Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 17 | cose-mac0 | COSE_Mac0 | COSE Mac w/o | | | | | Recipients Object | +----------+---------------+---------------+-----------------------+
表 1: COSEメッセージの識別
+===========================+==========+=====+===========+
| Media Type | Encoding | ID | Reference |
+===========================+==========+=====+===========+
| application/cose; cose- | | 98 | RFC 9052 |
| type="cose-sign" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 18 | RFC 9052 |
| type="cose-sign1" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 96 | RFC 9052 |
| type="cose-encrypt" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 16 | RFC 9052 |
| type="cose-encrypt0" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 97 | RFC 9052 |
| type="cose-mac" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 17 | RFC 9052 |
| type="cose-mac0" | | | |
+---------------------------+----------+-----+-----------+
| application/cose-key | | 101 | RFC 9052 |
+---------------------------+----------+-----+-----------+
| application/cose-key-set | | 102 | RFC 9052 |
+---------------------------+----------+-----+-----------+
表 2: COSEのCoAP Content-Formats
以下のCDDLフラグメントは、このドキュメントで定義されているすべてのトップメッセージを識別します。タグ付きおよびタグなしバージョンのメッセージに対して、個別の非終端記号が定義されています。
COSE_Messages = COSE_Untagged_Message / COSE_Tagged_Message
COSE_Untagged_Message = COSE_Sign / COSE_Sign1 / COSE_Encrypt / COSE_Encrypt0 / COSE_Mac / COSE_Mac0
COSE_Tagged_Message = COSE_Sign_Tagged / COSE_Sign1_Tagged / COSE_Encrypt_Tagged / COSE_Encrypt0_Tagged / COSE_Mac_Tagged / COSE_Mac0_Tagged