Zum Hauptinhalt springen

Anhang C. Beispiele

Dieser Anhang enthält eine Reihe von Beispielen, die die verschiedenen Funktionen und Nachrichtentypen zeigen, die in diesem Dokument definiert wurden. Um die Beispiele leichter lesbar zu machen, werden sie unter Verwendung der erweiterten CBOR-Diagnosenotation (definiert in [RFC8610]) anstelle eines binären Dumps dargestellt.

Ein GitHub-Projekt wurde unter [GitHub-Examples] erstellt, das nicht nur die in diesem Dokument vorgestellten Beispiele, sondern auch einen vollständigeren Satz von Testbeispielen enthält. Jedes Beispiel befindet sich in einer JSON-Datei, die die Eingaben enthält, die zum Erstellen des Beispiels verwendet wurden, einige der Zwischenwerte, die beim Debuggen des Beispiels verwendet werden können, und die Ausgabe des Beispiels, die sowohl als Hex-Dump als auch im Format der CBOR-Diagnosenotation dargestellt wird. Einige der Beispiele auf der Website sind als Fehler-Testfälle konzipiert; diese sind in der JSON-Datei deutlich als solche gekennzeichnet. Wenn Fehler in den Beispielen in diesem Dokument gefunden werden, werden die Beispiele auf GitHub aktualisiert und ein entsprechender Hinweis in der JSON-Datei platziert.

Wie bereits erwähnt, werden die Beispiele unter Verwendung der Diagnosenotation von CBOR dargestellt. Es gibt ein Ruby-basiertes Tool, das zwischen der Diagnosenotation und Binärdaten konvertieren kann. Dieses Tool kann mit der folgenden Befehlszeile installiert werden:

gem install cbor-diag

Die Diagnosenotation kann mit der folgenden Befehlszeile in Binärdateien konvertiert werden:

diag2cbor.rb < inputfile > outputfile

Die Beispiele können über einen XPath-Ausdruck aus der XML-Version dieses Dokuments extrahiert werden, da der gesamte Quellcode mit dem Attribut type='cbor-diag' getaggt ist. (Abhängig vom verwendeten XPath-Evaluator kann es erforderlich sein, > als Entität zu behandeln.)

//sourcecode[@type='cbor-diag']/text()

C.1. Beispiele für signierte Nachrichten

C.1.1. Einzelne Signatur

Dieses Beispiel verwendet Folgendes:

  • Signaturalgorithmus: ECDSA mit SHA-256, Kurve P-256

Die Größe der Binärdatei beträgt 103 Bytes

98(
[
/ protected / h'',
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / &lt;&lt; {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b
98f53afd2fa0f30a'
]
]
]
)

C.1.2. Mehrere Unterzeichner

Dieses Beispiel verwendet Folgendes:

  • Signaturalgorithmus: ECDSA mit SHA-256, Kurve P-256

  • Signaturalgorithmus: ECDSA mit SHA-512, Kurve P-521

Die Größe der Binärdatei beträgt 277 Bytes

98(
[
/ protected / h'',
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / &lt;&lt; {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b
98f53afd2fa0f30a'
],
[
/ protected h'a1013823' / &lt;&lt; {
/ alg / 1:-36 / ECDSA 521 /
} >> ,
/ unprotected / {
/ kid / 4:'[email protected]'
},
/ signature / h'00a2d28a7c2bdb1587877420f65adf7d0b9a06635dd1
de64bb62974c863f0b160dd2163734034e6ac003b01e8705524c5c4ca479a952f024
7ee8cb0b4fb7397ba08d009e0c8bf482270cc5771aa143966e5a469a09f613488030
c5b07ec6d722e3835adb5b2d8c44e95ffb13877dd2582866883535de3bb03d01753f
83ab87bb4f7a0297'
]
]
]
)

C.1.3. Signatur mit Kritikalität

Dieses Beispiel verwendet Folgendes:

  • Signaturalgorithmus: ECDSA mit SHA-256, Kurve P-256

  • Es gibt einen Kritikalitätsmarker auf dem "reserved" Header-Parameter.

Die Größe der Binärdatei beträgt 125 Bytes

98(
[
/ protected h'a2687265736572766564f40281687265736572766564' /
&lt;&lt; {
"reserved":false,
/ crit / 2:[
"reserved"
]
} >>,
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / &lt;&lt; {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'3fc54702aa56e1b2cb20284294c9106a63f91bac658d
69351210a031d8fc7c5ff3e4be39445b1a3e83e1510d1aca2f2e8a7c081c7645042b
18aba9d1fad1bd9c'
]
]
]
)

C.2. Beispiele für einzelne Unterzeichner

C.2.1. Einzelne ECDSA-Signatur

Dieses Beispiel verwendet Folgendes:

  • Signaturalgorithmus: ECDSA mit SHA-256, Kurve P-256

Die Größe der Binärdatei beträgt 98 Bytes

18(
[
/ protected h'a10126' / &lt;&lt; {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ payload / 'This is the content.',
/ signature / h'8eb33e4ca31d1c465ab05aac34cc6b23d58fef5c083106c4
d25a91aef0b0117e2af9a291aa32e14ab834dc56ed2a223444547e01f11d3b0916e5
a4c345cacb36'
]
)

C.3. Beispiele für ummantelte Nachrichten

C.3.1. Direktes ECDH

Dieses Beispiel verwendet Folgendes:

  • CEK: AES-GCM mit 128-Bit-Schlüssel

  • Empfängerklasse: ECDH Ephemeral-Static, Kurve P-256

Die Größe der Binärdatei beträgt 151 Bytes

96(
[
/ protected h'a10101' / &lt;&lt; {
/ alg / 1:1 / AES-GCM 128 /
} >>,
/ unprotected / {
/ iv / 5:h'c9cf4df2fe6c632bf7886413'
},
/ ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0
c52a357da7a644b8070a151b0',
/ recipients / [
[
/ protected h'a1013818' / &lt;&lt; {
/ alg / 1:-25 / ECDH-ES + HKDF-256 /
} >>,
/ unprotected / {
/ ephemeral / -1:{
/ kty / 1:2,
/ crv / -1:1,
/ x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf
bf054e1c7b4d91d6280',
/ y / -3:true
},
/ kid / 4:'[email protected]'
},
/ ciphertext / h''
]
]
]
)

C.3.2. Direkt plus Schlüsselableitung

Dieses Beispiel verwendet Folgendes:

  • CEK: AES-CCM mit 128-Bit-Schlüssel, Tag auf 64 Bit kürzen

  • Empfängerklasse: Verwenden Sie HKDF auf einem gemeinsamen Geheimnis mit den folgenden impliziten Feldern als Teil des Kontexts.

    • Salt: "aabbccddeeffgghh"

    • PartyU-Identität: "lighting-client"

    • PartyV-Identität: "lighting-server"

    • Zusätzliches öffentliches Anderes: "Encryption Example 02"

Die Größe der Binärdatei beträgt 91 Bytes

96(
[
/ protected h'a1010a' / &lt;&lt; {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >>,
/ unprotected / {
/ iv / 5:h'89f52f65a1c580933b5261a76c'
},
/ ciphertext / h'753548a19b1307084ca7b2056924ed95f2e3b17006dfe93
1b687b847',
/ recipients / [
[
/ protected h'a10129' / &lt;&lt; {
/ alg / 1:-10
} >>,
/ unprotected / {
/ salt / -20:'aabbccddeeffgghh',
/ kid / 4:'our-secret'
},
/ ciphertext / h''
]
]
]
)

C.3.3. Verschlüsselter Inhalt mit externen Daten

Dieses Beispiel verwendet Folgendes:

  • CEK: AES-GCM mit 128-Bit-Schlüssel

  • Empfängerklasse: ECDH Static-Static, Kurve P-256 mit AES Key Wrap

  • Extern bereitgestellte AAD: h'0011bbcc22dd44ee55ff660077'

Die Größe der Binärdatei beträgt 173 Bytes

96(
[
/ protected h'a10101' / &lt;&lt; {
/ alg / 1:1 / AES-GCM 128 /
} >> ,
/ unprotected / {
/ iv / 5:h'02d1f7e6f26c43d4868d87ce'
},
/ ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e28529d8f5335
e5f0165eee976b4a5f6c6f09d',
/ recipients / [
[
/ protected / h'a101381f' / {
\ alg \ 1:-32 \ ECDH-SS+A128KW \
} / ,
/ unprotected / {
/ static kid / -3:'[email protected]',
/ kid / 4:'[email protected]',
/ U nonce / -22:h'0101'
},
/ ciphertext / h'41e0d76f579dbd0d936a662d54d8582037de2e366fd
e1c62'
]
]
]
)

C.4. Beispiele für verschlüsselte Nachrichten

C.4.1. Einfache verschlüsselte Nachricht

Dieses Beispiel verwendet Folgendes:

  • CEK: AES-CCM mit 128-Bit-Schlüssel und einem 64-Bit-Tag

Die Größe der Binärdatei beträgt 52 Bytes

16(
[
/ protected h'a1010a' / &lt;&lt; {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >> ,
/ unprotected / {
/ iv / 5:h'89f52f65a1c580933b5261a78c'
},
/ ciphertext / h'5974e1b99a3a4cc09a659aa2e9e7fff161d38ce71cb45ce
460ffb569'
]
)

C.4.2. Verschlüsselte Nachricht mit teilweisem IV

Dieses Beispiel verwendet Folgendes:

  • CEK: AES-CCM mit 128-Bit-Schlüssel und einem 64-Bit-Tag

  • Präfix für IV ist 89F52F65A1C580933B52

Die Größe der Binärdatei beträgt 41 Bytes

16(
[
/ protected h'a1010a' / &lt;&lt; {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >> ,
/ unprotected / {
/ partial iv / 6:h'61a7'
},
/ ciphertext / h'252a8911d465c125b6764739700f0141ed09192de139e05
3bd09abca'
]
)

C.5. Beispiele für MAC-Nachrichten

C.5.1. Gemeinsames Geheimnis direkter MAC

Dieses Beispiel verwendet Folgendes:

  • MAC: AES-CMAC, 256-Bit-Schlüssel, gekürzt auf 64 Bit

  • Empfängerklasse: direktes gemeinsames Geheimnis

Die Größe der Binärdatei beträgt 57 Bytes

97(
[
/ protected h'a1010f' / &lt;&lt; {
/ alg / 1:15 / AES-CBC-MAC-256//64 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'9e1226ba1f81b848',
/ recipients / [
[
/ protected / h'',
/ unprotected / {
/ alg / 1:-6 / direct /,
/ kid / 4:'our-secret'
},
/ ciphertext / h''
]
]
]
)

C.5.2. ECDH direkter MAC

Dieses Beispiel verwendet Folgendes:

  • MAC: HMAC mit SHA-256, 256-Bit-Schlüssel

  • Empfängerklasse: ECDH-Schlüsselvereinbarung, zwei statische Schlüssel, HKDF mit Kontextstruktur

Die Größe der Binärdatei beträgt 214 Bytes

97(
[
/ protected h'a10105' / &lt;&lt; {
/ alg / 1:5 / HMAC 256//256 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'81a03448acd3d305376eaa11fb3fe416a955be2cbe7ec96f012c99
4bc3f16a41',
/ recipients / [
[
/ protected h'a101381a' / &lt;&lt; {
/ alg / 1:-27 / ECDH-SS + HKDF-256 /
} >> ,
/ unprotected / {
/ static kid / -3:'[email protected]',
/ kid / 4:'[email protected]',
/ U nonce / -22:h'4d8553e7e74f3c6a3a9dd3ef286a8195cbf8a23d
19558ccfec7d34b824f42d92bd06bd2c7f0271f0214e141fb779ae2856abf585a583
68b017e7f2a9e5ce4db5'
},
/ ciphertext / h''
]
]
]
)

C.5.3. Eingewickelter MAC

Dieses Beispiel verwendet Folgendes:

  • MAC: AES-MAC, 128-Bit-Schlüssel, gekürzt auf 64 Bit

  • Empfängerklasse: AES Key Wrap mit einem vorinstallierten 256-Bit-Schlüssel

Die Größe der Binärdatei beträgt 109 Bytes

97(
[
/ protected h'a1010e' / &lt;&lt; {
/ alg / 1:14 / AES-CBC-MAC-128//64 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'36f5afaf0bab5d43',
/ recipients / [
[
/ protected / h'',
/ unprotected / {
/ alg / 1:-5 / A256KW /,
/ kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037'
},
/ ciphertext / h'711ab0dc2fc4585dce27effa6781c8093eba906f227
b6eb0'
]
]
]
)

C.5.4. MAC-Nachricht mit mehreren Empfängern

Dieses Beispiel verwendet Folgendes:

  • MAC: HMAC mit SHA-256, 128-Bit-Schlüssel

  • Empfängerklasse: Verwendet zwei verschiedene Methoden.

    1. ECDH Ephemeral-Static, Kurve P-521, AES Key Wrap mit 128-Bit-Schlüssel

    2. AES Key Wrap mit 256-Bit-Schlüssel

Die Größe der Binärdatei beträgt 309 Bytes

97(
[
/ protected h'a10105' / &lt;&lt; {
/ alg / 1:5 / HMAC 256//256 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'bf48235e809b5c42e995f2b7d5fa13620e7ed834e337f6aa43df16
1e49e9323e',
/ recipients / [
[
/ protected h'a101381c' / &lt;&lt; {
/ alg / 1:-29 / ECDH-ES+A128KW /
} >> ,
/ unprotected / {
/ ephemeral / -1:{
/ kty / 1:2,
/ crv / -1:3,
/ x / -2:h'0043b12669acac3fd27898ffba0bcd2e6c366d53bc4db
71f909a759304acfb5e18cdc7ba0b13ff8c7636271a6924b1ac63c02688075b55ef2
d613574e7dc242f79c3',
/ y / -3:true
},
/ kid / 4:'[email protected]'
},
/ ciphertext / h'339bc4f79984cdc6b3e6ce5f315a4c7d2b0ac466fce
a69e8c07dfbca5bb1f661bc5f8e0df9e3eff5'
],
[
/ protected / h'',
/ unprotected / {
/ alg / 1:-5 / A256KW /,
/ kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037'
},
/ ciphertext / h'0b2c7cfce04e98276342d6476a7723c090dfdd15f9a
518e7736549e998370695e6d6a83b4ae507bb'
]
]
]
)

C.6. Beispiele für MAC0-Nachrichten

C.6.1. Gemeinsames Geheimnis direkter MAC

Dieses Beispiel verwendet Folgendes:

  • MAC: AES-CMAC, 256-Bit-Schlüssel, gekürzt auf 64 Bit

  • Empfängerklasse: direktes gemeinsames Geheimnis

Die Größe der Binärdatei beträgt 37 Bytes

17(
[
/ protected h'a1010f' / &lt;&lt; {
/ alg / 1:15 / AES-CBC-MAC-256//64 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'726043745027214f'
]
)

Beachten Sie, dass dieses Beispiel dieselben Eingaben verwendet wie Anhang C.5.1.

C.7. COSE-Schlüssel

C.7.1. Öffentliche Schlüssel

Dies ist ein Beispiel für ein COSE-Schlüsselset. Dieses Beispiel enthält die öffentlichen Schlüssel für alle vorherigen Beispiele.

Die Schlüssel sind der Reihe nach:

Die Größe der Binärdatei beträgt 481 Bytes

[
{
-1:1,
-2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0
8551d',
-3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008
4d19c',
1:2,
2:'[email protected]'
},
{
-1:1,
-2:h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a
09eff',
-3:h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbf
c117e',
1:2,
2:'11'
},
{
-1:3,
-2:h'0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de
7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8
f42ad',
-3:h'01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e
60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1
d9475',
1:2,
2:'[email protected]'
},
{
-1:1,
-2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91
d6280',
-3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf
822bb',
1:2,
2:'[email protected]'
}
]

C.7.2. Private Schlüssel

Dies ist ein Beispiel für ein COSE-Schlüsselset. Dieses Beispiel enthält die privaten Schlüssel für alle vorherigen Beispiele.

Die Schlüssel sind der Reihe nach:

  • Ein EC-Schlüssel mit einer kid von "[email protected]"

  • Ein EC-Schlüssel mit einer kid von "11"

  • Ein EC-Schlüssel mit einer kid von "[email protected]"

  • Ein Schlüssel mit gemeinsamem Geheimnis mit einer kid von "our-secret"

  • Ein EC-Schlüssel mit einer kid von "[email protected]"

  • Ein Schlüssel mit gemeinsamem Geheimnis mit kid "our-secret2"

  • Ein Schlüssel mit gemeinsamem Geheimnis mit einer kid von "018c0ae5-4d9b-471b-bfd6-eef314bc7037"

Die Größe der Binärdatei beträgt 816 Bytes

[
{
1:2,
2:'[email protected]',
-1:1,
-2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0
8551d',
-3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008
4d19c',
-4:h'aff907c99f9ad3aae6c4cdf21122bce2bd68b5283e6907154ad911840fa
208cf'
},
{
1:2,
2:'11',
-1:1,
-2:h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a
09eff',
-3:h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbf
c117e',
-4:h'57c92077664146e876760c9520d054aa93c3afb04e306705db609030850
7b4d3'
},
{
1:2,
2:'[email protected]',
-1:3,
-2:h'0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de
7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8
f42ad',
-3:h'01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e
60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1
d9475',
-4:h'00085138ddabf5ca975f5860f91a08e91d6d5f9a76ad4018766a476680b
55cd339e8ab6c72b5facdb2a2a50ac25bd086647dd3e2e6e99e84ca2c3609fdf177f
eb26d'
},
{
1:4,
2:'our-secret',
-1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4
27188'
},
{
1:2,
-1:1,
2:'[email protected]',
-2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91
d6280',
-3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf
822bb',
-4:h'02d1f7e6f26c43d4868d87ceb2353161740aacf1f7163647984b522a848
df1c3'
},
{
1:4,
2:'our-secret2',
-1:h'849b5786457c1491be3a76dcea6c4271'
},
{
1:4,
2:'018c0ae5-4d9b-471b-bfd6-eef314bc7037',
-1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4
27188'
}
]