Zum Hauptinhalt springen

7. Schlüsselobjekte

  1. Schlüsselobjekte

Eine COSE-Schlüsselstruktur baut auf einer CBOR-Map auf. Der Satz gemeinsamer Parameter, die in einem COSE-Schlüssel vorkommen können, ist im IANA-Register "COSE Key Common Parameters" [COSE.KeyParameters] (siehe Abschnitt 11.2) zu finden. Zusätzliche Parameter, die für bestimmte Schlüsseltypen definiert sind, können im IANA-Register "COSE Key Type Parameters" [COSE.KeyTypes] gefunden werden.

Ein COSE-Schlüsselsatz verwendet ein CBOR-Array-Objekt als seinen zugrunde liegenden Typ. Die Werte der Array-Elemente sind COSE-Schlüssel. Ein COSE-Schlüsselsatz MUSS mindestens ein Element im Array enthalten. Beispiele für COSE-Schlüsselsätze finden sich in Anhang C.7.

Jedes Element in einem COSE-Schlüsselsatz MUSS unabhängig verarbeitet werden. Wenn ein Element in einem COSE-Schlüsselsatz entweder fehlerhaft ist oder einen Schlüssel verwendet, der von einer Anwendung nicht verstanden wird, wird dieser Schlüssel ignoriert, und die anderen Schlüssel werden normal verarbeitet.

Das Element "kty" ist ein erforderliches Element in einer COSE_Key-Map.

Die CDDL-Grammatik, die COSE_Key und COSE_KeySet beschreibt, lautet:

   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. Allgemeine COSE-Schlüsselparameter

Dieses Dokument definiert einen Satz gemeinsamer Parameter für ein COSE-Schlüsselobjekt. Tabelle 4 bietet eine Zusammenfassung der in diesem Abschnitt definierten Parameter. Es gibt auch Parameter, die für bestimmte Schlüsseltypen definiert sind. Schlüsseltypspezifische Parameter sind in [RFC9053] zu finden.

  +=========+=======+========+============+====================+
| Name | Label | CBOR- | Wert- | Beschreibung |
| | | Typ | Register | |
+=========+=======+========+============+====================+
| kty | 1 | tstr / | COSE Key | Identifizierung |
| | | int | Types | des Schlüsseltyps |
+---------+-------+--------+------------+--------------------+
| kid | 2 | bstr | | Schlüsselidentifi- |
| | | | | zierungswert -- |
| | | | | passt zu "kid" in |
| | | | | Nachricht |
+---------+-------+--------+------------+--------------------+
| alg | 3 | tstr / | COSE | Schlüsselverwen- |
| | | int | Algorithms | dung auf diesen |
| | | | | Algorithmus be- |
| | | | | schränkt |
+---------+-------+--------+------------+--------------------+
| key_ops | 4 | [+ | | Satz zulässiger |
| | | (tstr/ | | Operationen be- |
| | | int)] | | schränken |
+---------+-------+--------+------------+--------------------+
| Base IV | 5 | bstr | | Base IV, das mit |
| | | | | Teil-IVs XOR-ver- |
| | | | | knüpft wird |
+---------+-------+--------+------------+--------------------+

Tabelle 4: Schlüssel-Map-Labels

kty: Dieser Parameter wird verwendet, um die Schlüsselfamilie für diese Struktur und damit den zu findenden Satz schlüsseltypspezifischer Parameter zu identifizieren. Der in diesem Dokument definierte Satz von Werten ist in [COSE.KeyTypes] zu finden. Dieser Parameter MUSS in einem Schlüsselobjekt vorhanden sein. Implementierungen MÜSSEN überprüfen, ob der Schlüsseltyp für den verarbeiteten Algorithmus geeignet ist. Der Schlüsseltyp MUSS als Teil des Vertrauensentscheidungsprozesses einbezogen werden.

alg: Dieser Parameter wird verwendet, um den Algorithmus einzuschränken, der mit dem Schlüssel verwendet wird. Wenn dieser Parameter in der Schlüsselstruktur vorhanden ist, MUSS die Anwendung überprüfen, ob dieser Algorithmus mit dem Algorithmus übereinstimmt, für den der Schlüssel verwendet wird. Wenn die Algorithmen nicht übereinstimmen, DARF dieses Schlüsselobjekt NICHT zur Durchführung der kryptografischen Operation verwendet werden. Beachten Sie, dass sich derselbe Schlüssel in einer anderen Schlüsselstruktur mit einem anderen oder keinem angegebenen Algorithmus befinden kann; dies wird jedoch als schlechte Sicherheitspraxis angesehen.

kid: Dieser Parameter wird verwendet, um einen Bezeichner für einen Schlüssel anzugeben. Der Bezeichner ist nicht strukturiert und kann alles sein, von einer vom Benutzer bereitgestellten Byte-Zeichenfolge bis zu einem auf dem öffentlichen Teil des Schlüssels berechneten Wert. Dieses Feld ist dazu bestimmt, mit einem "kid"-Parameter in einer Nachricht abgeglichen zu werden, um den Satz der zu überprüfenden Schlüssel einzugrenzen. Der Wert des Bezeichners ist kein eindeutiger Wert und kann in anderen Schlüsselobjekten vorkommen, auch für unterschiedliche Schlüssel.

key_ops: Dieser Parameter ist definiert, um den Satz von Operationen einzuschränken, für die ein Schlüssel verwendet werden soll. Der Wert des Feldes ist ein Array von Werten aus Tabelle 5. Algorithmen definieren die Werte von Schlüsseloperationen, die auftreten dürfen und für bestimmte Operationen erforderlich sind. Der Satz von Werten stimmt mit dem in [RFC7517] und [W3C.WebCrypto] überein.

Base IV: Dieser Parameter ist definiert, um den Basisteil eines IV zu tragen. Er ist für die Verwendung mit dem in Abschnitt 3.1 definierten Partial IV-Header-Parameter konzipiert. Dieses Feld bietet die Möglichkeit, ein Base IV einem Schlüssel zuzuordnen, der dann nachrichtenspezifisch mit dem Partial IV modifiziert wird.

  Bei der Verwendung eines Base IV in einer Anwendung ist äußerste Vorsicht geboten. Viele Verschlüsselungsalgorithmen verlieren an Sicherheit, wenn derselbe IV zweimal verwendet wird.

Wenn für jeden Absender unterschiedliche Schlüssel abgeleitet werden, wird das Starten beim gleichen Base IV diese Bedingung wahrscheinlich erfüllen. Wenn derselbe Schlüssel für mehrere Absender verwendet wird, muss die Anwendung eine Methode bereitstellen, um den IV-Raum zwischen den Absendern aufzuteilen. Dies könnte dadurch geschehen, dass ein anderer Basispunkt zum Starten oder ein anderes Partial IV zum Starten bereitgestellt wird und die Anzahl der zu sendenden Nachrichten vor der Schlüsselerneuerung begrenzt wird.

+=========+=======+==============================================+
| Name | Wert | Beschreibung |
+=========+=======+==============================================+
| sign | 1 | Der Schlüssel wird zum Erstellen von Signa- |
| | | turen verwendet. Erfordert private Schlüssel-|
| | | felder. |
+---------+-------+----------------------------------------------+
| verify | 2 | Der Schlüssel wird zur Überprüfung von |
| | | Signaturen verwendet. |
+---------+-------+----------------------------------------------+
| encrypt | 3 | Der Schlüssel wird für die Schlüsseltrans- |
| | | portverschlüsselung verwendet. |
+---------+-------+----------------------------------------------+
| decrypt | 4 | Der Schlüssel wird für die Schlüsseltrans- |
| | | portentschlüsselung verwendet. Erfordert |
| | | private Schlüsselfelder. |
+---------+-------+----------------------------------------------+
| wrap | 5 | Der Schlüssel wird für die Key-Wrap-Ver- |
| key | | schlüsselung verwendet. |
+---------+-------+----------------------------------------------+
| unwrap | 6 | Der Schlüssel wird für die Key-Wrap-Ent- |
| key | | schlüsselung verwendet. Erfordert private |
| | | Schlüsselfelder. |
+---------+-------+----------------------------------------------+
| derive | 7 | Der Schlüssel wird zum Ableiten von Schlüs- |
| key | | seln verwendet. Erfordert private Schlüssel- |
| | | felder. |
+---------+-------+----------------------------------------------+
| derive | 8 | Der Schlüssel wird zum Ableiten von Bits |
| bits | | verwendet, die nicht als Schlüssel verwendet |
| | | werden sollen. Erfordert private Schlüssel- |
| | | felder. |
+---------+-------+----------------------------------------------+
| MAC | 9 | Der Schlüssel wird zum Erstellen von MACs |
| create | | verwendet. |
+---------+-------+----------------------------------------------+
| MAC | 10 | Der Schlüssel wird zum Validieren von MACs |
| verify | | verwendet. |
+---------+-------+----------------------------------------------+

Tabelle 5: Schlüsseloperationswerte