Zum Hauptinhalt springen

2. Grundlegende COSE-Struktur

  1. Grundlegende COSE-Struktur

Die COSE-Objektstruktur ist so konzipiert, dass beim Parsen und Verarbeiten der verschiedenen Arten von Sicherheitsnachrichten eine große Menge an gemeinsamem Code vorhanden sein kann. Alle Nachrichtenstrukturen basieren auf dem CBOR-Array-Typ. Die ersten drei Elemente des Arrays enthalten immer die gleichen Informationen:

  1. Die geschützten Header-Parameter, codiert und in einen bstr verpackt.

  2. Die ungeschützten Header-Parameter als Map.

  3. Der Inhalt der Nachricht. Der Inhalt ist je nach Fall entweder der Klartext oder der Geheimtext. Der Inhalt kann losgelöst sein (d. h. getrennt von der COSE-Struktur transportiert werden), aber der Ort wird weiterhin verwendet. Der Inhalt ist in einen bstr verpackt, wenn er vorhanden ist, und ist ein nil-Wert, wenn er losgelöst ist.

Elemente nach diesem Punkt hängen vom spezifischen Nachrichtentyp ab.

COSE-Nachrichten werden unter Verwendung des Konzepts von Schichten erstellt, um verschiedene Arten von kryptografischen Konzepten zu trennen. Als Beispiel dafür, wie das funktioniert, betrachten Sie die COSE_Encrypt-Nachricht (Abschnitt 5.1). Dieser Nachrichtentyp ist in zwei Schichten unterteilt: die Inhaltsschicht und die Empfängerschicht. Die Inhaltsschicht enthält den verschlüsselten Klartext und Informationen über die verschlüsselte Nachricht. Die Empfängerschicht enthält den verschlüsselten Inhaltsverschlüsselungsschlüssel (CEK) und Informationen darüber, wie er verschlüsselt ist, für jeden Empfänger. Eine einschichtige Version der Verschlüsselungsnachricht COSE_Encrypt0 (Abschnitt 5.2) wird für Fälle bereitgestellt, in denen der CEK vorab geteilt wird.

Die Identifizierung, welcher Nachrichtentyp präsentiert wurde, erfolgt durch die folgenden Methoden:

  1. Der spezifische Nachrichtentyp ist aus dem Kontext bekannt. Dies kann durch einen Marker in der enthaltenden Struktur oder durch Einschränkungen definiert werden, die durch das Anwendungsprotokoll spezifiziert sind.

  2. Der Nachrichtentyp wird durch ein CBOR-Tag identifiziert. Nachrichten mit einem CBOR-Tag werden in dieser Spezifikation als getaggte Nachrichten bezeichnet, während solche ohne das CBOR-Tag als ungetaggte Nachrichten bezeichnet werden. Dieses Dokument definiert ein CBOR-Tag für jede der Nachrichtenstrukturen. Diese Tags finden Sie in Tabelle 1.

  3. Wenn ein COSE-Objekt in einem Medientyp von „application/cose“ transportiert wird, kann der optionale Parameter „cose-type“ verwendet werden, um das eingebettete Objekt zu identifizieren. Der Parameter ist OPTIONAL, wenn die getaggte Version der Struktur verwendet wird. Der Parameter ist ERFORDERLICH, wenn die ungetaggte Version der Struktur verwendet wird. Der Wert, der mit dem Parameter für jede der Strukturen verwendet werden soll, findet sich in Tabelle 1.

  4. Wenn ein COSE-Objekt als CoAP-Payload transportiert wird, kann die CoAP Content-Format-Option verwendet werden, um den Nachrichteninhalt zu identifizieren. Die CoAP Content-Format-Werte finden Sie in Tabelle 2. Das CBOR-Tag für die Nachrichtenstruktur ist nicht erforderlich, da jede Sicherheitsnachricht eindeutig identifiziert wird.

+==========+===============+===============+=======================+ | 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 | +----------+---------------+---------------+-----------------------+

               Tabelle 1: COSE-Nachrichtenidentifikation

+===========================+==========+=====+===========+
| 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 |
+---------------------------+----------+-----+-----------+

Tabelle 2: CoAP Content-Formats für COSE

Das folgende CDDL-Fragment identifiziert alle Top-Nachrichten, die in diesem Dokument definiert sind. Separate Nicht-Terminale sind für die getaggten und ungetaggten Versionen der Nachrichten definiert.

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