Référence Format des messages du kit AWS Encryption SDK - 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.

Référence Format des messages du kit AWS Encryption SDK

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

Pour la spécification qui définit les éléments d'unAWS Encryption SDKmise en œuvre, voir leAWS Encryption SDKSpécificationdans GitHub.

Les opérations de chiffrement dans leAWS Encryption SDKrenvoie une structure de données unique oumessage chiffréqui comprend 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).

LeSuites d'algorithmessoutenu par leAWS Encryption SDKutilisez l'une des deux versions de format de message. Suites d'algorithmes sansEngagement cléutiliser 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 composent l'en-tête au format de message versions 1 et 2. Les octets sont ajoutés dans l'ordre indiqué.

LeAbsentvaleur indique que le champ n'existe pas dans cette version du format de message. Text en grasindique 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 des messages version 1

Longueur (octets)

Format des messages 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 lacontexte de chiffrementest vide, la valeur du champ AAD Length sur 2 octets est 0.

2

Lorsque lacontexte de chiffrementest vide, la valeur du champ AAD Length sur 2 octets est 0.

DONNÉES AAD

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

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 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 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
Suite d'algorithmes du kit 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 à 1 ou 2 en octet01ou02en 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 Référence relative aux algorithmes du kit AWS Encryption SDK.

ID de message

Une valeur 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 AWS Encryption SDK.

Cette valeur est de 128 bits au 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 lacontexte de chiffrementest vide, la valeur du champ 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 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 maximal 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.

QuandAWS KMSest le fournisseur de clés principales ou vous utilisez unAWS KMSPorte-clés, cette valeur contient l'Amazon Resource Name (ARN) duAWS 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, encadré ou non encadré.

Note

Dans la mesure du possible, utilisez des données encadrées. LeAWS Encryption SDKprend en charge les données non encadrées uniquement pour une utilisation héritée. Certaines implémentations linguistiques duAWS Encryption SDKpeut 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 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 encadrées ne sont pas divisées ; il s'agit d'un objet 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).

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 le format de message version 2, qui prend uniquement en charge les suites d'algorithmes qui utilisent des valeurs IV déterministes dans l'en-tête du message.

Longueur du cadre

Longueur de chaque cadre 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 cadre. Lorsque les données ne sont pas encadrées, c'est-à-dire lorsque la valeur de la zoneContent Typechamp est 1, cette valeur doit être 0.

Note

Dans la mesure du possible, utilisez des données encadrées. LeAWS Encryption SDKprend en charge les données non encadrées uniquement pour une utilisation héritée. Certaines implémentations linguistiques duAWS Encryption SDKpeut 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 encadré.

Suite d'algorithmes du kit

Données supplémentaires requises par lealgorithmequi 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. Le format de message version 2 prend uniquement en charge 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. LeAWS Encryption SDKprend en charge les données non encadrées uniquement pour une utilisation héritée. Certaines implémentations linguistiques duAWS Encryption SDKpeut 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 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é
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. Le AWS Encryption SDK 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. LeAWS Encryption SDKprend en charge les données non encadrées uniquement pour une utilisation héritée. Certaines implémentations linguistiques duAWS Encryption SDKpeut 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 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 normaux, 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.

  • Plusieurs de la longueur du cadre— Lorsque la longueur du contenu chiffré 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 du cadre— Lorsque la longueur du 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.

  • Moins que la longueur du 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
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 unsignature numériquecalculé 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 la même 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 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.