Référence Format des messages du kit Kit SDK de chiffrement AWS - Kit SDK de chiffrement AWS

Si nous fournissons une traduction de la version anglaise du guide, la version anglaise du guide aura préséance en cas de contradiction. La traduction sera une traduction automatique.

Référence Format des messages du kit Kit SDK de chiffrement AWS

Les informations de cette page constituent une référence pour le développement de votre propre bibliothèque de chiffrement compatible avec le kit Kit SDK de chiffrement AWS. Si vous ne créez pas votre propre bibliothèque de chiffrement compatible, vous n'aurez probablement pas besoin de ces informations.

Pour utiliser le kit Kit SDK de chiffrement AWS dans l'un des langages de programmation pris en charge, consultez Langages de programmation.

Pour connaître la spécification qui définit les éléments d'une implémentation Kit SDK de chiffrement AWS correcte, consultez la Spécification Kit SDK de chiffrement AWS dans le référentiel aws-encryption-sdk-specification dans GitHub.

Les opérations de chiffrement du kit Kit SDK de chiffrement AWS renvoient une structure de données, ou message, unique qui contient les données chiffrées (texte chiffré) et toutes les clés de données chiffrées. Pour comprendre cette structure de données, ou pour créer des bibliothèques capables de la lire et de l'écrire, vous devez comprendre le format de message.

Le format de message se compose d'au moins deux parties : un en-tête et un corps. Dans certains cas, le format de message se compose d'une troisième partie, un pied de page. Le format de message définit une séquence ordonnée d'octets dans l’ordre des octets réseau, également appelé format de poids fort. Le format de message commence par l'en-tête, est suivi du corps, puis du pied de page (le cas échéant).

Structure de l'en-tête

L'en-tête du message contient la clé de données chiffrée, ainsi que des informations sur la manière dont le corps du message est formé. Le tableau suivant décrit les champs qui composent l'en-tête. Les octets sont ajoutés dans l'ordre indiqué.

Structure de l'en-tête
Field Longueur (octets)
Version () 1
Type. 1
ID de l'algorithme 2.
ID de message 16
Longueur AAD

2.

Lorsque le contexte de chiffrement est vide, la longueur AAD est 0.

DONNÉES AAD

Variable Est égal à la valeur spécifiée dans les 2 octets précédents (Longueur AAD).

Lorsque le contexte de chiffrement est vide, il n'y a pas de champ AAD dans l'en-tête.

Nombre de clés de données chiffrées 2.
Clé(s) de données chiffrée(s) Variable Déterminé par le nombre de clés de données chiffrées et la longueur de chacune.
Type de contenu 1
(Instances réservées) 4
Longueur du vecteur d'initialisation 1
Longueur du cadre 4
Authentification de l'en-tête Variable Déterminé par l'algorithme ayant généré le message.
Version ()

Version de ce format de message. La version actuelle est 1.0, codée en tant qu'octet 01 au format hexadécimal.

Type.

Type de ce format de message. Le type indique le type de structure. Le seul type pris en charge est décrit comme données chiffrées authentifiées client. Sa valeur type est 128, codée en tant qu'octet 80, au format hexadécimal.

ID de l'algorithme

Identifiant de l'algorithme utilisé. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé. Pour plus d'informations sur ces algorithmes, consultez Référence relative aux algorithmes du kit Kit SDK de chiffrement AWS.

ID de message

Une valeur de 128 bits générée de façon aléatoire qui identifie le message. L'ID de message :

  • identifie de façon unique le message chiffré ;

  • lie faiblement l'en-tête du message au corps du message ;

  • fournit un mécanisme pour réutiliser une clé de données en toute sécurité avec plusieurs messages chiffrés ;

  • protège contre la réutilisation accidentelle d'une clé de données ou l'épuisement des clés dans le kit Kit SDK de chiffrement AWS.

Longueur AAD

Longueur des données authentifiées supplémentaires (données AAD). Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre d'octets qui contiennent les données AAD.

Lorsque le contexte de chiffrement est vide, la longueur AAD est 0.

DONNÉES AAD

Données authentifiées supplémentaires. Les données AAD constituent un encodage du contexte de chiffrement, un tableau de paires clé-valeur dans lequel chaque clé et valeur est une chaîne de caractères codés UTF-8. Le contexte de chiffrement est converti en une séquence d'octets et utilisé pour la valeur AAD. Lorsque le contexte de chiffrement est vide, il n'y a pas de champ AAD dans l'en-tête.

Lorsque le avec signature sont utilisés, le contexte de chiffrement doit contenir la paire clé-valeur {'aws-crypto-public-key', Qtxt}. Qtxt représente le point de courbe elliptique Q compressé selon SEC 1 version 2.0 puis encodé en base64. Le contexte de chiffrement peut contenir des valeurs supplémentaires, mais la longueur maximale des données AAD construites est 2^16 - 1 octets.

Le tableau suivant décrit les champs qui composent les données AAD. Les paires clé-valeur sont triées, par clé, en ordre croissant d'après le code caractère UTF-8. Les octets sont ajoutés dans l'ordre indiqué.

Structure AAD
Field Longueur (octets)
Nombre de paires clé-valeur 2.
Longueur de clé 2
Clé Variable Est égal à la valeur spécifiée dans les 2 octets précédents (Longueur de clé).
Longueur de valeur 2.
Value Variable Est égal à la valeur spécifiée dans les 2 octets précédents (Longueur de valeur).
Nombre de paires clé-valeur

Nombre de paires clé-valeur dans les données AAD. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre de paires clé-valeur dans les données AAD. Le nombre maximum de paires clé-valeur dans les données AAD est 2^16 - 1.

Lorsqu'il n'y a pas de contexte de chiffrement ou si le contexte de chiffrement est vide, ce champ n'est pas présent dans la structure AAD.

Longueur de clé

Longueur de la clé pour la paire clé-valeur. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre d'octets qui contiennent la clé.

Clé

Clé de la paire clé-valeur. Il s'agit d'une séquence d'octets codés en UTF-8.

Longueur de valeur

Longueur de la valeur pour la paire clé-valeur. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre d'octets qui contiennent la valeur.

Value

Valeur de la paire clé-valeur. Il s'agit d'une séquence d'octets codés en UTF-8.

Nombre de clés de données chiffrées

Nombre de clés de données chiffrées. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre de clés de données chiffrées.

Clé(s) de données chiffrée(s)

Séquence de clés de données chiffrées. La longueur de la séquence est déterminée par le nombre de clés de données chiffrées et la longueur de chacune. La séquence contient au moins une clé de données chiffrée.

Le tableau suivant décrit les champs qui composent chaque clé de données chiffrée. Les octets sont ajoutés dans l'ordre indiqué.

Structure de la clé de données chiffrée
Field Longueur, en octets
Longueur de l'ID du fournisseur des clés 2.
ID du fournisseur de clés Variable Est égal à la valeur spécifiée dans les 2 octets précédents (Longueur de l'ID du fournisseur de clés).
Longueur de l'information du fournisseur de clés 2.
Information du fournisseur de clés Variable Est égal à la valeur spécifiée dans les 2 octets précédents (Longueur de l'information du fournisseur de clés).
Longueur de la clé de données chiffrée 2.
Clé de données chiffrée Variable Est égal à la valeur spécifiée dans les 2 octets précédents (Longueur de la clé de données chiffrée).
Longueur de l'ID du fournisseur des clés

Longueur de l'identifiant du fournisseur de clés. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre d'octets qui contiennent l'ID du fournisseur des clés.

ID du fournisseur de clés

Identifiant du fournisseur de clés. Il est utilisé pour indiquer le fournisseur de la clé de données chiffrée et doit être extensible.

Longueur de l'information du fournisseur de clés

Longueur de l'information du fournisseur de clés. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre d'octets qui contiennent l'information du fournisseur des clés.

Information du fournisseur de clés

Information sur le fournisseur de clés. Il est déterminé par le fournisseur de clés.

Quand AWS KMS est le fournisseur de clés principales ou si vous utilisez un Porte-clés AWS KMS, cette valeur contient l'Amazon Resource Name (ARN) de la AWS KMS clé principale client (CMK).

Longueur de la clé de données chiffrée

Longueur de la clé de données chiffrée. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre d'octets qui contiennent la clé de données chiffrée.

Clé de données chiffrée

Clé de données chiffrée. Il s'agit de la clé de chiffrement des données chiffrée par le fournisseur de clés.

Type de contenu

Type de données chiffrées, non encadrées ou encadrées.

Note

Dans la mesure du possible, utilisez des données encadrées. Le Kit SDK de chiffrement AWS prend en charge les données non encadrées uniquement pour une utilisation héritée. Certaines implémentations de langage de la Kit SDK de chiffrement AWS peuvent toujours générer du texte chiffré non encadré. Toutes les implémentations de langage prises en charge peuvent déchiffrer le texte chiffré encadré et non encadré.

Les données encadrées sont divisées en parties de longueur égale ; chaque partie est chiffrée séparément. Le type du contenu encadré est 2, codé en tant qu'octet 02 au format hexadécimal.

Les données non tramées ne sont pas divisées ; il s’agit d’un blob chiffré unique. Le type du contenu non encadré est 1, codé en tant qu'octet 01 au format hexadécimal.

(Instances réservées)

Séquence réservée de 4 octets. La valeur doit être 0. Elle est codée en tant qu'octets 00 00 00 00 en notation hexadécimale (c'est-à-dire, une séquence de 4 octets d'une valeur d'entier 32 bits égale à 0).

Longueur du vecteur d'initialisation

Longueur du vecteur d'initialisation. Il s'agit d'une valeur de 1 octet interprétée comme un entier 8 bits non signé qui spécifie le nombre d'octets qui contiennent le vecteur d'initialisation. Cette valeur est déterminée par la valeur d'octets du vecteur d'initialisation de l'algorithme qui a généré le message.

Longueur du cadre

Longueur de chaque trame de données encadrées. Il s’agit d’une valeur de 4 octets interprétée comme un entier 32 bits non signé qui spécifie le nombre d’octets dans chaque trame. Lorsque les données ne sont pas encadrées, c’est-à-dire lorsque la valeur de la Content Type champ est 1, cette valeur doit être 0.

Note

Dans la mesure du possible, utilisez des données encadrées. Le Kit SDK de chiffrement AWS prend en charge les données non encadrées uniquement pour une utilisation héritée. Certaines implémentations de langage de la Kit SDK de chiffrement AWS peuvent toujours générer du texte chiffré non encadré. Toutes les implémentations de langage prises en charge peuvent déchiffrer le texte chiffré encadré et non encadré.

Authentification de l'en-tête

L'authentification de l'en-tête est déterminée par l'algorithme qui a généré le message. L'authentification de l'en-tête est calculée sur l'ensemble de l'en-tête. Elle se compose d'un vecteur d'initialisation et d'une balise d'authentification. Les octets sont ajoutés dans l'ordre indiqué.

Structure de l'authentification de l'en-tête
Field Longueur, en octets
IV Variable Déterminée par la valeur d'octets du vecteur d'initialisation de l'algorithme qui a généré le message.
Balise d'authentification Variable Déterminée par la valeur d'octets de la balise d'authentification de l'algorithme qui a généré le message.
IV

Vecteur d'initialisation utilisé pour calculer la balise d'authentification de l'en-tête.

Balise d'authentification

Valeur d'authentification pour l'en-tête. Elle est utilisée pour authentifier l'ensemble du contenu de l'en-tête.

Structure du corps

Le corps du message contient les données chiffrées, appelées texte chiffré. La structure du corps dépend du type de contenu (non encadré ou encadré). Les sections suivantes décrivent le format du corps du message pour chaque type de contenu.

Données non encadrées

Les données non encadrées sont chiffrées dans un objet blob unique avec un vecteur d'initialisation et des données de corps uniques.

Note

Dans la mesure du possible, utilisez des données encadrées. Le Kit SDK de chiffrement AWS prend en charge les données non encadrées uniquement pour une utilisation héritée. Certaines implémentations de langage de la Kit SDK de chiffrement AWS peuvent toujours générer du texte chiffré non encadré. Toutes les implémentations de langage prises en charge peuvent déchiffrer le texte chiffré encadré et non encadré.

Le tableau suivant décrit les champs qui composent les données non encadrées. Les octets sont ajoutés dans l'ordre indiqué.

Structure du corps non encadré
Field Longueur, en octets
IV Variable Est égal à la valeur spécifiée dans l'octet Longueur du vecteur d'initialisation de l'en-tête.
Longueur du contenu chiffré 8
Contenu chiffré Variable Est égal à la valeur spécifiée dans les 8 octets précédents (Longueur du contenu chiffré).
Balise d'authentification Variable Déterminé par l'implémentation d'algorithme utilisée.
IV

Vecteur d'initialisation à utiliser avec l'algorithme de chiffrement.

Longueur du contenu chiffré

Longueur du contenu chiffré, ou texte chiffré. Il s'agit d'une valeur de 8 octets interprétée comme un entier 64 bits non signé qui spécifie le nombre d'octets qui contiennent le contenu chiffré.

Techniquement, la valeur maximale autorisée est de 2^63 - 1, ou 8 exbioctets (8 Eio). Toutefois, dans la pratique, la valeur maximale est de 2^36 - 32, ou 64 gibioctets (64 Gio), en raison des restrictions imposées par les algorithmes implémentés.

Note

L'implémentation Java de ce kit SDK limite encore cette valeur à 2^31 - 1, ou 2 gibioctets (2 Gio), en raison des restrictions du langage.

Contenu chiffré

Contenu chiffré (texte chiffré), tel que renvoyé par l'algorithme de chiffrement.

Balise d'authentification

Valeur d'authentification pour le corps. Elle est utilisée pour authentifier le corps du message.

Données encadrées

Dans les données encadrées, les données en texte brut sont divisées en parties de longueur égale appelées trames. Le Kit SDK de chiffrement AWS chiffre chaque cadre séparément avec un IV et un corps AAD uniques.

Note

Dans la mesure du possible, utilisez des données encadrées. Le Kit SDK de chiffrement AWS prend en charge les données non encadrées uniquement pour une utilisation héritée. Certaines implémentations de langage de la Kit SDK de chiffrement AWS peuvent toujours générer du texte chiffré non encadré. Toutes les implémentations de langage prises en charge peuvent déchiffrer le texte chiffré encadré et non encadré.

La longueur du cadre, qui est la longueur du contenu chiffré dans le cadre, peut être différente pour chaque message. Le nombre maximal d'octets dans une trame est de 2^32 - 1. Le nombre maximal d'images dans un message est de 2^32 - 1.

Il existe deux types de cadres : régulier et final. Chaque message doit comporter ou inclure une image finale.

Toutes les images régulières d'un message ont la même longueur d'image. Le cadre final peut avoir une longueur de cadre différente.

La composition des cadres dans les données encadrées varie en fonction de la longueur du contenu chiffré.

  • Égale à la longueur du cadre — Lorsque la longueur du contenu chiffré est identique à la longueur de cadre des cadres standard, le message peut être composé d'un cadre normal contenant les données, suivi d'un cadre final de longueur zéro (0). Ou bien, le message peut être composé d'un seul cadre final contenant les données. Dans ce cas, le cadre final a la même longueur de cadre que les cadres normaux.

  • Multiple de la longueur de cadre — Lorsque la longueur de contenu chiffrée est un multiple exact de la longueur de cadre des cadres normaux, le message peut se terminer par un cadre normal contenant les données, suivi d'un cadre final de longueur zéro (0). Ou bien, le message peut se terminer dans un cadre final contenant les données. Dans ce cas, le cadre final a la même longueur de cadre que les cadres normaux.

  • Pas un multiple de la longueur de cadre — Lorsque la longueur de contenu chiffré n'est pas un multiple exact de la longueur de cadre des cadres normaux, le cadre final contient les données restantes. La longueur du cadre final est inférieure à la longueur de cadre des cadres normaux.

  • Inférieur à la longueur de cadre — Lorsque la longueur du contenu chiffré est inférieure à la longueur de cadre des cadres normaux, le message consiste en un cadre final contenant toutes les données. La longueur du cadre final est inférieure à la longueur de cadre des cadres normaux.

Les tableaux suivants décrivent les champs qui composent les cadres. Les octets sont ajoutés dans l'ordre indiqué.

Structure de corps encadré, cadre régulier
Field Longueur, en octets
Numéro de séquence 4
IV Variable Est égal à la valeur spécifiée dans l'octet Longueur du vecteur d'initialisation de l'en-tête.
Contenu chiffré Variable Est égal à la valeur spécifiée dans le Longueur du cadre de l'en-tête.
Balise d'authentification Variable Déterminé par l'algorithme utilisé, comme spécifié dans le ID de l'algorithme de l'en-tête.
Numéro de séquence

Numéro de séquence du cadre. Il s'agit d'un numéro du compteur incrémentiel pour le cadre. Il s'agit d'une valeur de 4 octets interprétée comme un entier 32 bits non signé.

Les données encadrées doivent démarrer au numéro de séquence 1. Les cadres suivants doivent être dans l'ordre et doivent être incrémentés de 1 par rapport au cadre précédent. Dans le cas contraire, le processus de déchiffrement s'arrête et indique une erreur.

IV

Vecteur d'initialisation du cadre. Le kit SDK utilise une méthode déterministe pour construire un vecteur d'initialisation différent pour chaque image du message. Sa longueur est spécifiée par la suite d'algorithmes utilisée.

Contenu chiffré

Contenu chiffré (texte chiffré) du cadre, tel que renvoyé par l'algorithme de chiffrement.

Balise d'authentification

Valeur d'authentification pour le cadre. Elle est utilisée pour authentifier l'ensemble du cadre.

Structure de corps encadré, cadre final
Field Longueur, en octets
Fin du numéro de séquence 4
Numéro de séquence 4
IV Variable Est égal à la valeur spécifiée dans l'octet Longueur du vecteur d'initialisation de l'en-tête.
Longueur du contenu chiffré 4
Contenu chiffré Variable Est égal à la valeur spécifiée dans les 4 octets précédents (Longueur du contenu chiffré).
Balise d'authentification Variable Déterminé par l'algorithme utilisé, comme spécifié dans le ID de l'algorithme de l'en-tête.
Fin du numéro de séquence

Indicateur pour le dernier cadre. La valeur est codée en tant que 4 octets FF FF FF FF au format hexadécimal.

Numéro de séquence

Numéro de séquence du cadre. Il s'agit d'un numéro du compteur incrémentiel pour le cadre. Il s'agit d'une valeur de 4 octets interprétée comme un entier 32 bits non signé.

Les données encadrées doivent démarrer au numéro de séquence 1. Les cadres suivants doivent être dans l'ordre et doivent être incrémentés de 1 par rapport au cadre précédent. Dans le cas contraire, le processus de déchiffrement s'arrête et indique une erreur.

IV

Vecteur d'initialisation du cadre. Le kit SDK utilise une méthode déterministe pour construire un vecteur d'initialisation différent pour chaque image du message. La longueur du vecteur d'initialisation est spécifiée par la suite d'algorithmes.

Longueur du contenu chiffré

Longueur du contenu chiffré. Il s'agit d'une valeur de 4 octets interprétée comme un entier 32 bits non signé qui spécifie le nombre d'octets qui contiennent le contenu chiffré pour le cadre.

Contenu chiffré

Contenu chiffré (texte chiffré) du cadre, tel que renvoyé par l'algorithme de chiffrement.

Balise d'authentification

Valeur d'authentification pour le cadre. Elle est utilisée pour authentifier l'ensemble du cadre.

Lorsque les algorithmes de signature sont utilisés, le format de message contient un pied de page. Le pied de page du message contient une signature calculée en fonction de l'en-tête et du corps du message. Le tableau suivant décrit les champs qui composent le pied de page. Les octets sont ajoutés dans l'ordre indiqué.

Structure du pied de page
Field Longueur, en octets
Longueur de signature 2.
Signature. Variable Est égal à la valeur spécifiée dans les 2 octets précédents (Longueur de signature).
Longueur de signature

Longueur de la signature. Il s'agit d'une valeur de 2 octets interprétée comme un entier 16 bits non signé qui spécifie le nombre d'octets qui contiennent la signature.

Signature.

Signature. Elle est utilisée pour authentifier l'en-tête et le corps du message.