7. Schlüsselobjektparameter
- Schlüsselobjektparameter
Das COSE_Key-Objekt definiert eine Möglichkeit, ein einzelnes Schlüsselobjekt zu halten. Es ist weiterhin erforderlich, dass die Mitglieder der einzelnen Schlüsseltypen definiert werden. In diesem Abschnitt des Dokuments definieren wir einen ersten Satz von Mitgliedern für bestimmte Schlüsseltypen.
Für jeden der Schlüsseltypen definieren wir sowohl öffentliche als auch private Mitglieder. Die öffentlichen Mitglieder sind das, was zur Nutzung an andere übertragen wird. Private Mitglieder ermöglichen es Einzelpersonen, Schlüssel zu archivieren. Es gibt jedoch Umstände, unter denen private Schlüssel an Entitäten in einem Protokoll verteilt werden können. Beispiele hierfür sind: Entitäten mit schlechter Zufallszahlenerzeugung, zentralisierte Schlüsselerstellung für Multicast-Typ-Operationen und Protokolle, bei denen ein gemeinsames Geheimnis als Bearer-Token für Autorisierungszwecke verwendet wird.
Schlüsseltypen werden durch das "kty"-Mitglied des COSE_Key-Objekts identifiziert. In diesem Dokument definieren wir vier Werte für das Mitglied:
+===========+=======+==========================+
| Name | Wert | Beschreibung |
+===========+=======+==========================+
| OKP | 1 | Oktett-Schlüsselpaar |
+-----------+-------+--------------------------+
| EC2 | 2 | Elliptische Kurven |
| | | Schlüssel m. x/y-Koord. |
+-----------+-------+--------------------------+
| Symmetric | 4 | Symmetrische Schlüssel |
+-----------+-------+--------------------------+
| Reserved | 0 | Dieser Wert ist reserv. |
+-----------+-------+--------------------------+
Tabelle 17: Schlüsseltypwerte
7.1. Schlüssel für elliptische Kurven
Es werden zwei verschiedene Schlüsselstrukturen für Schlüssel für elliptische Kurven definiert. Eine Version verwendet sowohl eine x-Koordinate als auch eine y-Koordinate, möglicherweise mit Punktkomprimierung ("EC2"). Dies ist die konventionelle Darstellung von Punkten auf elliptischen Kurven (EC), die in [RFC5480] verwendet wird. Die andere Version verwendet nur die x-Koordinate, da die y-Koordinate entweder neu berechnet werden muss oder für die Schlüsselvereinbarungsoperation nicht benötigt wird ("OKP").
Anwendungen MÜSSEN überprüfen, ob die Kurve und der Schlüsseltyp konsistent sind, und einen Schlüssel ablehnen, wenn sie es nicht sind.
+=========+=======+==========+=====================================+ | Name | Wert | Schl.typ | Beschreibung | +=========+=======+==========+=====================================+ | P-256 | 1 | EC2 | NIST P-256, auch bek. als secp256r1 | +---------+-------+----------+-------------------------------------+ | P-384 | 2 | EC2 | NIST P-384, auch bek. als secp384r1 | +---------+-------+----------+-------------------------------------+ | P-521 | 3 | EC2 | NIST P-521, auch bek. als secp521r1 | +---------+-------+----------+-------------------------------------+ | X25519 | 4 | OKP | X25519 zur Verwendung nur mit ECDH | +---------+-------+----------+-------------------------------------+ | X448 | 5 | OKP | X448 zur Verwendung nur mit ECDH | +---------+-------+----------+-------------------------------------+ | Ed25519 | 6 | OKP | Ed25519 zur Verwendung nur m. EdDSA | +---------+-------+----------+-------------------------------------+ | Ed448 | 7 | OKP | Ed448 zur Verwendung nur m. EdDSA | +---------+-------+----------+-------------------------------------+
Tabelle 18: Elliptische Kurven
7.1.1. Doppelkoordinatenkurven
Im Allgemeinen übertragen Protokolle Punkte auf elliptischen Kurven entweder als x-Koordinate und y-Koordinate oder als x-Koordinate und ein Vorzeichenbit für die y-Koordinate. Die letztere Codierung wurde von der IETF aufgrund potenzieller IPR-Probleme nicht empfohlen. Für Operationen in eingeschränkten Umgebungen ist die Möglichkeit, eine Nachricht zu verkleinern, indem die y-Koordinate nicht gesendet wird, jedoch möglicherweise nützlich.
Für EC-Schlüssel mit beiden Koordinaten wird das "kty"-Mitglied auf 2 (EC2) gesetzt. Die in diesem Abschnitt definierten Schlüsselparameter sind in Tabelle 19 zusammengefasst. Die für diesen Schlüsseltyp definierten Mitglieder sind:
crv: Dies enthält einen Bezeichner der Kurve, die mit dem Schlüssel verwendet werden soll. Die in diesem Dokument für diesen Schlüsseltyp definierten Kurven finden Sie in Tabelle 18. Andere Kurven können in Zukunft registriert werden, und es können auch private Kurven verwendet werden.
x: Dies enthält die x-Koordinate für den EC-Punkt. Die Ganzzahl wird wie in [SEC1] definiert in eine Bytefolge konvertiert. Führende Null-Oktette MÜSSEN beibehalten werden.
y: Dies enthält entweder das Vorzeichenbit oder den Wert der y-Koordinate für den EC-Punkt. Beim Codieren des Werts y wird die Ganzzahl in eine Bytefolge konvertiert (wie in [SEC1] definiert) und als CBOR bstr codiert. Führende Null-Oktette MÜSSEN beibehalten werden. Die komprimierte Punktcodierung wird ebenfalls unterstützt. Berechnen Sie das Vorzeichenbit wie in der Funktion zur Konvertierung von Punkten auf elliptischen Kurven in Oktett-Strings von [SEC1] festgelegt. Wenn das Vorzeichenbit Null ist, codieren Sie y als CBOR-False-Wert; andernfalls codieren Sie y als CBOR-True-Wert. Die Codierung des Unendlichkeitspunkts wird nicht unterstützt.
d: Dies enthält den privaten Schlüssel.
Für öffentliche Schlüssel ist es ERFORDERLICH, dass "crv", "x" und "y" in der Struktur vorhanden sind. Für private Schlüssel ist es ERFORDERLICH, dass "crv" und "d" in der Struktur vorhanden sind. Für private Schlüssel wird EMPFOHLEN, dass "x" und "y" ebenfalls vorhanden sind, aber sie können aus den erforderlichen Elementen neu berechnet werden, und ihr Weglassen spart Platz.
+======+======+=======+========+=================================+
| Schl.| Name | Label | CBOR | Beschreibung |
| Typ | | | Typ | |
+======+======+=======+========+=================================+
| 2 | crv | -1 | int / | EC-Bezeichner -- Aus dem |
| | | | tstr | "COSE Elliptic Curves"-Register |
+------+------+-------+--------+---------------------------------+
| 2 | x | -2 | bstr | x-Koordinate |
+------+------+-------+--------+---------------------------------+
| 2 | y | -3 | bstr / | y-Koordinate |
| | | | bool | |
+------+------+-------+--------+---------------------------------+
| 2 | d | -4 | bstr | Privater Schlüssel |
+------+------+-------+--------+---------------------------------+
Tabelle 19: EC-Schlüsselparameter
7.2. Oktett-Schlüsselpaar
Ein neuer Schlüsseltyp ist für Oktett-Schlüsselpaare (OKPs) definiert. Gehen Sie nicht davon aus, dass Schlüssel, die diesen Typ verwenden, elliptische Kurven sind. Dieser Schlüsseltyp könnte für andere Kurventypen verwendet werden (zum Beispiel Mathematik basierend auf hyperelliptischen Oberflächen).
Die in diesem Abschnitt definierten Schlüsselparameter sind in Tabelle 20 zusammengefasst. Die für diesen Schlüsseltyp definierten Mitglieder sind:
crv: Dies enthält einen Bezeichner der Kurve, die mit dem Schlüssel verwendet werden soll. Die in diesem Dokument für diesen Schlüsseltyp definierten Kurven finden Sie in Tabelle 18. Andere Kurven können in Zukunft registriert werden, und es können auch private Kurven verwendet werden.
x: Dies enthält den öffentlichen Schlüssel. Die Bytefolge enthält den öffentlichen Schlüssel, wie er durch den Algorithmus definiert ist. (Für X25519 ist es intern eine Little-Endian-Ganzzahl.)
d: Dies enthält den privaten Schlüssel.
Für öffentliche Schlüssel ist es ERFORDERLICH, dass "crv" und "x" in der Struktur vorhanden sind. Für private Schlüssel ist es ERFORDERLICH, dass "crv" und "d" in der Struktur vorhanden sind. Für private Schlüssel wird EMPFOHLEN, dass "x" ebenfalls vorhanden ist, aber es kann aus den erforderlichen Elementen neu berechnet werden, und sein Weglassen spart Platz.
+======+==========+=======+=======+=================================+ | Name | Schl. | Label | Typ | Beschreibung | | | Typ | | | | +======+==========+=======+=======+=================================+ | crv | 1 | -1 | int / | EC-Bezeichner -- Aus dem | | | | | tstr | "COSE Elliptic Curves"-Register | +------+----------+-------+-------+---------------------------------+ | x | 1 | -2 | bstr | Öffentlicher Schlüssel | +------+----------+-------+-------+---------------------------------+ | d | 1 | -4 | bstr | Privater Schlüssel | +------+----------+-------+-------+---------------------------------+
Tabelle 20: Oktett-Schlüsselpaar-Parameter
7.3. Symmetrische Schlüssel
Gelegentlich ist es erforderlich, dass ein symmetrischer Schlüssel zwischen Entitäten transportiert wird. Diese Schlüsselstruktur ermöglicht dies.
Für symmetrische Schlüssel wird das "kty"-Mitglied auf 4 ("Symmetric") gesetzt. Das für diesen Schlüsseltyp definierte Mitglied ist:
k: Dies enthält den Wert des Schlüssels.
Diese Schlüsselstruktur hat keine Form, die nur öffentliche Mitglieder enthält. Da erwartet wird, dass diese Schlüsselstruktur übertragen wird, muss darauf geachtet werden, dass sie niemals versehentlich oder unsicher übertragen wird. Für symmetrische Schlüssel ist es ERFORDERLICH, dass "k" in der Struktur vorhanden ist.
+======+==========+=======+======+=============+
| Name | Schl.typ | Label | Typ | Beschreibung|
+======+==========+=======+======+=============+
| k | 4 | -1 | bstr | Schlüss.wert|
+------+----------+-------+------+-------------+
Tabelle 21: Symmetrische Schlüsselparameter