Annexe C. Exemples
Cette annexe comprend un ensemble d'exemples qui montrent les différentes fonctionnalités et types de messages qui ont été définis dans ce document. Pour rendre les exemples plus faciles à lire, ils sont présentés en utilisant la notation de diagnostic CBOR étendue (définie dans la [RFC8610]) plutôt que comme un vidage binaire.
Un projet GitHub a été créé sur [GitHub-Examples] qui contient non seulement les exemples présentés dans ce document, mais aussi un ensemble plus complet d'exemples de test. Chaque exemple se trouve dans un fichier JSON qui contient les entrées utilisées pour créer l'exemple, certaines des valeurs intermédiaires qui peuvent être utilisées pour déboguer l'exemple, et la sortie de l'exemple présentée à la fois sous forme de vidage hexadécimal et au format de notation de diagnostic CBOR. Certains des exemples sur le site sont conçus pour être des cas de test d'échec ; ceux-ci sont clairement marqués comme tels dans le fichier JSON. Si des erreurs sont trouvées dans les exemples de ce document, les exemples sur GitHub seront mis à jour et une note à cet effet sera placée dans le fichier JSON.
Comme indiqué, les exemples sont présentés en utilisant la notation de diagnostic de CBOR. Un outil basé sur Ruby existe qui peut convertir entre la notation de diagnostic et le binaire. Cet outil peut être installé avec la ligne de commande :
gem install cbor-diag
La notation de diagnostic peut être convertie en fichiers binaires à l'aide de la ligne de commande suivante :
diag2cbor.rb < inputfile > outputfile
Les exemples peuvent être extraits de la version XML de ce document via une expression XPath, car tout le code source est balisé avec l'attribut type='cbor-diag'. (Selon l'évaluateur XPath utilisé, il peut être nécessaire de gérer l'entité >.)
//sourcecode[@type='cbor-diag']/text()
C.1. Exemples de messages signés
C.1.1. Signature unique
Cet exemple utilise ce qui suit :
- Algorithme de signature : ECDSA avec SHA-256, courbe P-256
La taille du fichier binaire est de 103 octets
98(
[
/ protected / h'',
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / << {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b
98f53afd2fa0f30a'
]
]
]
)
C.1.2. Signataires multiples
Cet exemple utilise ce qui suit :
-
Algorithme de signature : ECDSA avec SHA-256, courbe P-256
-
Algorithme de signature : ECDSA avec SHA-512, courbe P-521
La taille du fichier binaire est de 277 octets
98(
[
/ protected / h'',
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / << {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b
98f53afd2fa0f30a'
],
[
/ protected h'a1013823' / << {
/ alg / 1:-36 / ECDSA 521 /
} >> ,
/ unprotected / {
/ kid / 4:'[email protected]'
},
/ signature / h'00a2d28a7c2bdb1587877420f65adf7d0b9a06635dd1
de64bb62974c863f0b160dd2163734034e6ac003b01e8705524c5c4ca479a952f024
7ee8cb0b4fb7397ba08d009e0c8bf482270cc5771aa143966e5a469a09f613488030
c5b07ec6d722e3835adb5b2d8c44e95ffb13877dd2582866883535de3bb03d01753f
83ab87bb4f7a0297'
]
]
]
)
C.1.3. Signature avec criticité
Cet exemple utilise ce qui suit :
-
Algorithme de signature : ECDSA avec SHA-256, courbe P-256
-
Il y a un marqueur de criticité sur le paramètre d'en-tête "reserved".
La taille du fichier binaire est de 125 octets
98(
[
/ protected h'a2687265736572766564f40281687265736572766564' /
<< {
"reserved":false,
/ crit / 2:[
"reserved"
]
} >>,
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / << {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'3fc54702aa56e1b2cb20284294c9106a63f91bac658d
69351210a031d8fc7c5ff3e4be39445b1a3e83e1510d1aca2f2e8a7c081c7645042b
18aba9d1fad1bd9c'
]
]
]
)
C.2. Exemples de signataire unique
C.2.1. Signature ECDSA unique
Cet exemple utilise ce qui suit :
- Algorithme de signature : ECDSA avec SHA-256, courbe P-256
La taille du fichier binaire est de 98 octets
18(
[
/ protected h'a10126' / << {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ payload / 'This is the content.',
/ signature / h'8eb33e4ca31d1c465ab05aac34cc6b23d58fef5c083106c4
d25a91aef0b0117e2af9a291aa32e14ab834dc56ed2a223444547e01f11d3b0916e5
a4c345cacb36'
]
)
C.3. Exemples de messages enveloppés
C.3.1. ECDH direct
Cet exemple utilise ce qui suit :
-
CEK : AES-GCM avec clé de 128 bits
-
Classe de destinataire : ECDH éphémère-statique, courbe P-256
La taille du fichier binaire est de 151 octets
96(
[
/ protected h'a10101' / << {
/ alg / 1:1 / AES-GCM 128 /
} >>,
/ unprotected / {
/ iv / 5:h'c9cf4df2fe6c632bf7886413'
},
/ ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0
c52a357da7a644b8070a151b0',
/ recipients / [
[
/ protected h'a1013818' / << {
/ 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. Direct plus dérivation de clé
Cet exemple utilise ce qui suit :
-
CEK : AES-CCM avec clé de 128 bits, tronquer l'étiquette à 64 bits
-
Classe de destinataire : Utiliser HKDF sur un secret partagé avec les champs implicites suivants comme partie du contexte.
-
sel : "aabbccddeeffgghh"
-
Identité PartyU : "lighting-client"
-
Identité PartyV : "lighting-server"
-
Autre public supplémentaire : "Encryption Example 02"
-
La taille du fichier binaire est de 91 octets
96(
[
/ protected h'a1010a' / << {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >>,
/ unprotected / {
/ iv / 5:h'89f52f65a1c580933b5261a76c'
},
/ ciphertext / h'753548a19b1307084ca7b2056924ed95f2e3b17006dfe93
1b687b847',
/ recipients / [
[
/ protected h'a10129' / << {
/ alg / 1:-10
} >>,
/ unprotected / {
/ salt / -20:'aabbccddeeffgghh',
/ kid / 4:'our-secret'
},
/ ciphertext / h''
]
]
]
)
C.3.3. Contenu chiffré avec données externes
Cet exemple utilise ce qui suit :
-
CEK : AES-GCM avec clé de 128 bits
-
Classe de destinataire : ECDH statique-statique, courbe P-256 avec AES Key Wrap
-
AAD fourni de manière externe : h'0011bbcc22dd44ee55ff660077'
La taille du fichier binaire est de 173 octets
96(
[
/ protected h'a10101' / << {
/ 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. Exemples de messages chiffrés
C.4.1. Message chiffré simple
Cet exemple utilise ce qui suit :
- CEK : AES-CCM avec clé de 128 bits et une étiquette de 64 bits
La taille du fichier binaire est de 52 octets
16(
[
/ protected h'a1010a' / << {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >> ,
/ unprotected / {
/ iv / 5:h'89f52f65a1c580933b5261a78c'
},
/ ciphertext / h'5974e1b99a3a4cc09a659aa2e9e7fff161d38ce71cb45ce
460ffb569'
]
)
C.4.2. Message chiffré avec un IV partiel
Cet exemple utilise ce qui suit :
-
CEK : AES-CCM avec clé de 128 bits et une étiquette de 64 bits
-
Le préfixe pour l'IV est 89F52F65A1C580933B52
La taille du fichier binaire est de 41 octets
16(
[
/ protected h'a1010a' / << {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >> ,
/ unprotected / {
/ partial iv / 6:h'61a7'
},
/ ciphertext / h'252a8911d465c125b6764739700f0141ed09192de139e05
3bd09abca'
]
)
C.5. Exemples de messages MAC
C.5.1. MAC direct à secret partagé
Cet exemple utilise ce qui suit :
-
MAC : AES-CMAC, clé de 256 bits, tronquée à 64 bits
-
Classe de destinataire : secret partagé direct
La taille du fichier binaire est de 57 octets
97(
[
/ protected h'a1010f' / << {
/ 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. MAC direct ECDH
Cet exemple utilise ce qui suit :
-
MAC : HMAC avec SHA-256, clé de 256 bits
-
Classe de destinataire : accord de clé ECDH, deux clés statiques, HKDF avec structure de contexte
La taille du fichier binaire est de 214 octets
97(
[
/ protected h'a10105' / << {
/ alg / 1:5 / HMAC 256//256 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'81a03448acd3d305376eaa11fb3fe416a955be2cbe7ec96f012c99
4bc3f16a41',
/ recipients / [
[
/ protected h'a101381a' / << {
/ 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. MAC enveloppé
Cet exemple utilise ce qui suit :
-
MAC : AES-MAC, clé de 128 bits, tronquée à 64 bits
-
Classe de destinataire : AES Key Wrap avec une clé pré-partagée de 256 bits
La taille du fichier binaire est de 109 octets
97(
[
/ protected h'a1010e' / << {
/ 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. Message MAC à destinataires multiples
Cet exemple utilise ce qui suit :
-
MAC : HMAC avec SHA-256, clé de 128 bits
-
Classe de destinataire : Utilise deux méthodes différentes.
-
ECDH éphémère-statique, courbe P-521, AES Key Wrap avec clé de 128 bits
-
AES Key Wrap avec clé de 256 bits
-
La taille du fichier binaire est de 309 octets
97(
[
/ protected h'a10105' / << {
/ alg / 1:5 / HMAC 256//256 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'bf48235e809b5c42e995f2b7d5fa13620e7ed834e337f6aa43df16
1e49e9323e',
/ recipients / [
[
/ protected h'a101381c' / << {
/ 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. Exemples de messages MAC0
C.6.1. MAC direct à secret partagé
Cet exemple utilise ce qui suit :
-
MAC : AES-CMAC, clé de 256 bits, tronquée à 64 bits
-
Classe de destinataire : secret partagé direct
La taille du fichier binaire est de 37 octets
17(
[
/ protected h'a1010f' / << {
/ alg / 1:15 / AES-CBC-MAC-256//64 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'726043745027214f'
]
)
Notez que cet exemple utilise les mêmes entrées que l'annexe C.5.1.
C.7. Clés COSE
C.7.1. Clés publiques
Ceci est un exemple d'un ensemble de clés COSE. Cet exemple inclut les clés publiques pour tous les exemples précédents.
Dans l'ordre, les clés sont :
-
Une clé EC avec un kid de "[email protected]"
-
Une clé EC avec un kid de "11"
-
Une clé EC avec un kid de "[email protected]"
-
Une clé EC avec un kid de "[email protected]"
La taille du fichier binaire est de 481 octets
[
{
-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. Clés privées
Ceci est un exemple d'un ensemble de clés COSE. Cet exemple inclut les clés privées pour tous les exemples précédents.
Dans l'ordre, les clés sont :
-
Une clé EC avec un kid de "[email protected]"
-
Une clé EC avec un kid de "11"
-
Une clé EC avec un kid de "[email protected]"
-
Une clé à secret partagé avec un kid de "our-secret"
-
Une clé EC avec un kid de "[email protected]"
-
Une clé à secret partagé avec un kid de "our-secret2"
-
Une clé à secret partagé avec un kid de "018c0ae5-4d9b-471b-bfd6-eef314bc7037"
La taille du fichier binaire est de 816 octets
[
{
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'
}
]