AWS Encryption SDK référence de format de message - AWS Encryption SDK

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

AWS Encryption SDK référence de format de message

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 AWS Encryption SDK. 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 AWS Encryption SDK dans l'un des langages de programmation pris en charge, voirLangages de programmation.

Pour la spécification qui définit les éléments d'une AWS Encryption SDK implémentation appropriée, voir la AWS Encryption SDK spécification dans GitHub.

Les opérations de chiffrement AWS Encryption SDK renvoient une structure de données unique ou un message chiffré contenant 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).

Les suites d'algorithmes prises en charge AWS Encryption SDK utilisent l'une des deux versions de format de message. Les suites d'algorithmes sans engagement clé utilisent le format de message version 1. Les suites d'algorithmes avec engagement clé utilisent le format de message version 2.

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 constituent l'en-tête dans les versions 1 et 2 du format de message. Les octets sont ajoutés dans l'ordre indiqué.

La valeur Non présent indique que le champ n'existe pas dans cette version du format de message. Le texte en gras indique des valeurs différentes dans chaque version.

Note

Il peut être nécessaire de faire défiler horizontalement ou verticalement pour afficher toutes les données de ce tableau.

Structure de l'en-tête
Champ Format de message version 1

Longueur (octets)

Format de message version 2

Longueur (octets)

Version 1 1
Type 1 Absent
ID de l'algorithme 2 2
ID de message 16 32
Longueur AAD

2

Lorsque le contexte de chiffrement est vide, la valeur du champ AAD Length de 2 octets est 0.

2

Lorsque le contexte de chiffrement est vide, la valeur du champ AAD Length de 2 octets est 0.

DONNÉES AAD

Variable. La longueur de ce champ apparaît dans les 2 octets précédents (champ AAD Length).

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

Variable. La longueur de ce champ apparaît dans les 2 octets précédents (champ AAD Length).

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 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. Variable. Déterminé par le nombre de clés de données chiffrées et la longueur de chacune.
Type de contenu 1 1
Instances réservées 4 Absent
Longueur du vecteur d'initialisation 1 Absent
Longueur du cadre 4 4
Données de la suite d'algorithmes Absent Variable. Déterminé par l'algorithme ayant généré le message.
Authentification de l'en-tête Variable. Déterminé par l'algorithme ayant généré le message. Variable. Déterminé par l'algorithme ayant généré le message.
Version

Version de ce format de message. La version est codée en 1 ou 2 sous forme d'octet 01 ou 02 en notation hexadécimale

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.

Ce champ n'est pas présent dans le format de message version 2.

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 AWS Encryption SDK référence aux algorithmes.

ID de message

Une valeur générée de manière 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 AWS Encryption SDK.

Cette valeur est de 128 bits dans le format de message version 1 et de 256 bits dans la version 2.

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 valeur du champ AAD Length 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 les algorithmes de signature sont utilisés, le contexte de chiffrement doit contenir la paire clé-valeur {'aws-crypto-public-key', Qtxt}. Qtxt représente le point Q de la courbe elliptique compressé conformément à SEC 1 version 2.0, puis codé 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
Champ 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
Valeur 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.

Valeur

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. Le nombre maximum de clés de données chiffrées dans chaque message est de 65 535 (2^16 - 1).

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
Champ Longueur (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.

Lorsqu'il AWS KMS s'agit du fournisseur de la clé principale ou que vous utilisez un AWS KMS trousseau de clés, cette valeur contient le Amazon Resource Name (ARN) du AWS KMS key.

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. Il AWS Encryption SDK prend en charge les données non encadrées uniquement pour une utilisation traditionnelle. Certaines implémentations linguistiques du AWS Encryption SDK peuvent toujours générer du texte chiffré non encadré. Toutes les implémentations linguistiques prises en charge peuvent déchiffrer le texte chiffré encadré et non cadré.

Les données encadrées sont divisées en parties de même longueur ; chaque partie est crypté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 encadrées ne sont pas divisées ; il s'agit d'un seul blob chiffré. 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).

Ce champ n'est pas présent dans le format de message version 2.

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.

Ce champ n'est pas présent dans la version 2 du format de message, qui prend uniquement en charge les suites d'algorithmes utilisant des valeurs IV déterministes dans l'en-tête du message.

Longueur du cadre

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

Note

Dans la mesure du possible, utilisez des données encadrées. Il AWS Encryption SDK prend en charge les données non encadrées uniquement pour une utilisation traditionnelle. Certaines implémentations linguistiques du AWS Encryption SDK peuvent toujours générer du texte chiffré non encadré. Toutes les implémentations linguistiques prises en charge peuvent déchiffrer le texte chiffré encadré et non cadré.

Données de la suite d'algorithmes

Données supplémentaires nécessaires à l'algorithme qui a généré le message. La longueur et le contenu sont déterminés par l'algorithme. Sa longueur peut être égale à 0.

Ce champ n'est pas présent dans le format de message version 1.

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
Champ Longueur dans la version 1.0 (octets) Longueur dans la version 2.0 (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. N/A
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. 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.

Ce champ n'est pas présent dans l'en-tête du format de message version 2. La version 2 du format de message ne prend en charge que les suites d'algorithmes qui utilisent des valeurs IV déterministes dans l'en-tête du message.

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. La structure du corps du message est la même dans les versions 1 et 2 du format de message.

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. Il AWS Encryption SDK prend en charge les données non encadrées uniquement pour une utilisation traditionnelle. Certaines implémentations linguistiques du AWS Encryption SDK peuvent toujours générer du texte chiffré non encadré. Toutes les implémentations linguistiques prises en charge peuvent déchiffrer le texte chiffré encadré et non cadré.

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é
Champ 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. Il AWS Encryption SDK chiffre chaque image séparément avec un IV et un corps AAD uniques.

Note

Dans la mesure du possible, utilisez des données encadrées. Il AWS Encryption SDK prend en charge les données non encadrées uniquement pour une utilisation traditionnelle. Certaines implémentations linguistiques du AWS Encryption SDK peuvent toujours générer du texte chiffré non encadré. Toutes les implémentations linguistiques prises en charge peuvent déchiffrer le texte chiffré encadré et non cadré.

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é.

  • Égal à la longueur de trame — Lorsque la longueur du contenu chiffré est identique à celle des trames normales, le message peut consister en une trame normale contenant les données, suivie d'une trame finale de longueur nulle (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 trame — Lorsque la longueur du contenu chiffré est un multiple exact de la longueur d'image des trames normales, le message peut se terminer par une trame normale contenant les données, suivie d'une trame finale de longueur nulle (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 d'image — Lorsque la longueur du contenu chiffré n'est pas un multiple exact de la longueur d'image des images normales, la dernière image contient les données restantes. La longueur du cadre final est inférieure à la longueur de cadre des cadres normaux.

  • Moins que la longueur de trame — Lorsque la longueur du contenu chiffré est inférieure à la longueur de trame des trames normales, le message consiste en une trame finale 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
Champ 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
Champ 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 numérique calculée sur l'en-tête et le 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é. La structure du pied de page du message est identique dans les versions 1 et 2 du format de message.

Structure du pied de page
Champ 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 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.