Zum Hauptinhalt springen

8. COSE-Funktionen

  1. COSE-Funktionen

Die Fähigkeiten eines Algorithmus oder Schlüsseltyps müssen in einigen Situationen spezifiziert werden. Dies hat ein Gegenstück in den S/MIME-Spezifikationen, wo SMIMECapabilities in Abschnitt 2.5.2 von [RFC8551] definiert ist. Dieses Dokument definiert das gleiche Konzept für COSE.

Der Algorithmusbezeichner ist nicht in den Fähigkeitsdaten enthalten, da er an anderer Stelle in der Nachricht codiert werden sollte. Der Schlüsseltypbezeichner ist in den Fähigkeitsdaten enthalten, da nicht erwartet wird, dass er an anderer Stelle codiert wird.

Es werden zwei verschiedene Arten von Fähigkeiten definiert: Fähigkeiten für Algorithmen und Fähigkeiten für Schlüsseltypen. Sobald sie durch Registrierung bei der IANA definiert sind, ist die Liste der Fähigkeiten für einen Algorithmus oder Schlüsseltyp unveränderlich. Wenn später festgestellt wird, dass eine neue Fähigkeit für einen Schlüsseltyp oder Algorithmus benötigt wird, erfordert dies die Zuweisung eines neuen Codepunkts, um dies zu bewältigen. Als allgemeine Regel werden die Fähigkeiten auf algorithmusspezifische Header-Parameter oder Schlüsselparameter abgebildet, müssen dies aber nicht tun. Ein Beispiel hierfür sind die unten definierten HSS-LMS-Schlüsseltypfähigkeiten, bei denen der verwendete Hash-Algorithmus enthalten ist.

Die Fähigkeitsstruktur ist ein Array von Werten; die in der Struktur enthaltenen Werte hängen von einem bestimmten Algorithmus oder Schlüsseltyp ab. Bei Algorithmusfähigkeiten sollte das erste Element immer ein Schlüsseltypwert sein, falls zutreffend, aber die für einen Schlüssel spezifischen Elemente (z. B. eine Kurve) sollten nicht in den Algorithmusfähigkeiten enthalten sein. Das bedeutet, dass, wenn man alle Fähigkeiten für ein Gerät aufzählen möchte, das ECDH implementiert, alle Kombinationen von Algorithmen und Schlüsselpaaren angegeben werden müssen. Das letzte Beispiel in Abschnitt 8.3 bietet einen Fall, in dem dies durch die Möglichkeit der Angabe eines Kreuzprodukts zwischen einem Array von Algorithmusfähigkeiten und Schlüsseltypfähigkeiten erfolgt (siehe das Element ECDH-ES+A25KW). Für einen Schlüssel sollte das erste Element der Schlüsseltypwert sein. Während dies bedeutet, dass der Schlüsseltypwert dupliziert wird, wenn sowohl eine Algorithmus- als auch eine Schlüsselfähigkeit verwendet werden, wird der Schlüsseltyp benötigt, um den Rest der Werte zu verstehen.

8.1. Zuweisungen für bestehende Algorithmen

Für den aktuellen Satz von Algorithmen im Register außer IV-GENERATION (die in diesem Dokument sowie die in [RFC8230], [RFC8778] und [RFC9021]) ist die Fähigkeitsliste ein Array mit einem Element, dem Schlüsseltyp (aus dem "COSE Key Types"-Register). Es wird erwartet, dass zukünftige registrierte Algorithmen null, eins oder mehrere Elemente haben könnten.

8.2. Zuweisungen für bestehende Schlüsseltypen

Es gibt eine Reihe bereits existierender Schlüsseltypen; im Folgenden geht es um die Erstellung der Fähigkeitsdefinition für diese Strukturen:

  • OKP, EC2: Die Liste der Fähigkeiten ist:

    • Der Schlüsseltypwert. (1 für OKP oder 2 für EC2.)

    • Eine Kurve für diesen Schlüsseltyp aus dem "COSE Elliptic Curves"-Register.

  • RSA: Die Liste der Fähigkeiten ist:

    • Der Schlüsseltypwert (3).
  • Symmetric: Die Liste der Fähigkeiten ist:

    • Der Schlüsseltypwert (4).
  • HSS-LMS: Die Liste der Fähigkeiten ist:

    • Der Schlüsseltypwert (5).

    • Algorithmusbezeichner für die zugrunde liegende Hash-Funktion aus dem "COSE Algorithms"-Register.

  • WalnutDSA: Die Liste der Fähigkeiten ist:

    • Der Schlüsseltypwert (6).

    • Der N-Wert (Gruppen- und Matrixgröße) für den Schlüssel, ein uint.

    • Der q-Wert (Ordnung des endlichen Körpers) für den Schlüssel, ein uint.

8.3. Beispiele

Fähigkeiten können in einem Schlüsselableitungsprozess verwendet werden, um sicherzustellen, dass beide Seiten dieselben Parameter verwenden. Die drei folgenden Beispiele zeigen verschiedene Möglichkeiten, wie man Parameter bei der Spezifikation eines Anwendungsprotokolls nutzen kann:

  • Nur eine Algorithmusfähigkeit: Dies ist nützlich, wenn das Protokoll einen bestimmten Algorithmus, wie z. B. ES256, erfordern möchte, aber agnostisch ist, welche Kurve verwendet wird. Dies erfordert, dass der Algorithmusbezeichner im Protokoll angegeben wird. Siehe das erste Beispiel.

  • Nur eine Schlüsseltypfähigkeit: Dies ist nützlich, wenn das Protokoll einen bestimmten Schlüsseltyp und eine bestimmte Kurve, wie z. B. P-256, erfordern möchte, aber jeden Algorithmus akzeptiert, der diese Kurve verwendet (z. B. sowohl ECDSA als auch ECDH). Siehe das zweite Beispiel.

  • Sowohl Algorithmus- als auch Schlüsseltypfähigkeiten: Dies wird verwendet, wenn das Protokoll alle Optionen rund um einen Algorithmus festlegen muss – z. B. EdDSA mit der Kurve Ed25519. Wie beim ersten Beispiel muss der Algorithmusbezeichner im Protokoll angegeben werden. Siehe das dritte Beispiel, das die beiden Fähigkeiten einfach miteinander verknüpft.

Algorithmus ES256

0x8102 / [2 \ EC2 \ ] /

Schlüsseltyp EC2 mit P-256 Kurve:

0x820201 / [2 \ EC2 , 1 \ P-256 ] /

ECDH-ES + A256KW mit einer X25519 Kurve:

0x8101820104 / [1 \ OKP ],[1 \ OKP , 4 \ X25519 ] /

Die Fähigkeiten können auch von einer Entität verwendet werden, um bekannt zu geben, wozu sie in der Lage ist. Das unten stehende decodierte Beispiel ist eine von vielen Codierungen, die zu diesem Zweck verwendet werden könnten. Jedes Array-Element enthält drei Felder: den Algorithmusbezeichner, eine oder mehrere Algorithmusfähigkeiten und eine oder mehrere Schlüsseltypfähigkeiten.

[
[-8 / EdDSA /,
[1 / OKP key type /],
[
[1 / OKP /, 6 / Ed25519 / ],
[1 /OKP/, 7 /Ed448 /]
]
],
[-7 / ECDSA with SHA-256/,
[2 /EC2 key type/],
[
[2 /EC2/, 1 /P-256/],
[2 /EC2/, 3 /P-521/]
]
],
[ -31 / ECDH-ES+A256KW/,
[
[ 2 /EC2/],
[1 /OKP/ ]
],
[
[2 /EC2/, 1 /P-256/],
[1 /OKP/, 4 / X25519/ ]
]
],
[ 1 / A128GCM /,
[ 4 / Symmetric / ],
[ 4 / Symmetric /]
]
]

Untersuchung des obigen Beispiels:

  • Das erste Element zeigt an, dass die Entität EdDSA mit den Kurven Ed25519 und Ed448 unterstützt.

  • Das zweite Element zeigt an, dass die Entität ECDSA mit SHA-256 mit den Kurven P-256 und P-521 unterstützt.

  • Das dritte Element zeigt an, dass die Entität Ephemeral-Static ECDH unter Verwendung von AES256 Key Wrap unterstützt. Die Entität kann die P-256-Kurve mit einem EC2-Schlüsseltyp und die X25519-Kurve mit einem OKP-Schlüsseltyp unterstützen.

  • Das letzte Element zeigt an, dass die Entität AES-GCM mit 128 Bit für die Inhaltsverschlüsselung unterstützt.

Die Entität gibt nicht bekannt, dass sie irgendwelche MAC-Algorithmen unterstützt.