AWS Concepts du SDK de chiffrement de base de données - AWS SDK de chiffrement de base de données

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 Concepts du SDK de chiffrement de base de données

Notre bibliothèque de chiffrement côté client a été renommée SDK de chiffrement de AWS base de données. Ce guide du développeur fournit toujours des informations sur le client de chiffrement DynamoDB.

Cette rubrique explique les concepts et la terminologie utilisés dans le SDK AWS Database Encryption.

Pour savoir comment les composants du SDK de chiffrement AWS de base de données interagissent, consultezFonctionnement du SDK AWS de chiffrement de base de données.

Pour en savoir plus sur le SDK AWS de chiffrement des bases de données, consultez les rubriques suivantes.

  • Découvrez comment le SDK AWS de chiffrement des bases de données utilise le chiffrement d'enveloppe pour protéger vos données.

  • Découvrez les éléments du chiffrement des enveloppes : les clés de données qui protègent vos enregistrements et les clés d'encapsulation qui protègent vos clés de données.

  • Découvrez les porte-clés qui déterminent les clés d'emballage que vous utilisez.

  • Découvrez le contexte de chiffrement qui renforce l'intégrité de votre processus de chiffrement.

  • Découvrez la description matérielle que les méthodes de chiffrement ajoutent à votre dossier.

  • Découvrez les actions cryptographiques qui indiquent au SDK AWS Database Encryption les champs à chiffrer et à signer.

Chiffrement d'enveloppe

La sécurité de vos données chiffrées dépend partiellement de la protection de la clé de données capable de les déchiffrer. Le chiffrement de la clés de données en vue de sa protection est un bonne pratique reconnue. Pour ce faire, vous avez besoin d'une autre clé de chiffrement, connue sous le nom de clé de chiffrement ou clé d'encapsulation. La pratique consistant à utiliser une clé d'encapsulation pour chiffrer des clés de données est connue sous le nom de chiffrement d'enveloppe.

Protection des clés de données

Le SDK AWS Database Encryption chiffre chaque champ à l'aide d'une clé de données unique. Il chiffre ensuite chaque clé de données sous la clé d'encapsulation que vous spécifiez. Il stocke les clés de données cryptées dans la description du matériau.

Pour spécifier votre clé d'emballage, vous utilisez un porte-clés.


              Chiffrement des enveloppes avec le SDK AWS de chiffrement de base de données
Chiffrer les mêmes données sous plusieurs clés d'encapsulation

Vous pouvez chiffrer la clé de données à l'aide de plusieurs clés d'encapsulation. Vous souhaiterez peut-être fournir des clés d'encapsulation différentes pour différents utilisateurs, ou des clés d'encapsulation de différents types ou à différents emplacements. Chacune des clés d'encapsulation chiffre la même clé de données. Le SDK AWS de chiffrement de base de données stocke toutes les clés de données cryptées à côté des champs cryptés de la description du matériel.

Pour déchiffrer les données, vous devez fournir au moins une clé d'encapsulation capable de déchiffrer les clés de données chiffrées.

Combinaison des points forts de plusieurs algorithmes

Pour chiffrer vos données, le SDK de chiffrement de AWS base de données utilise par défaut une suite d'algorithmes avec chiffrement symétrique AES-GCM, fonction de dérivation de clés basée sur HMAC (HKDF) et signature ECDSA. Pour chiffrer la clé de données, vous pouvez spécifier un algorithme de chiffrement symétrique ou asymétrique adapté à votre clé d'encapsulation.

En règle générale, les algorithmes de chiffrement à clé symétrique sont plus rapides et produisent des textes chiffrés plus petits que le chiffrement asymétrique et le chiffrement de clé publique. Mais les algorithmes à clé publique assurent une séparation intrinsèque des rôles. Pour combiner les points forts de chacun, vous pouvez chiffrer la clé de données avec le chiffrement par clé publique.

Nous vous recommandons d'utiliser l'un des AWS KMS porte-clés dans la mesure du possible. Lorsque vous utilisez le AWS KMS trousseau de clés, vous pouvez choisir de combiner les points forts de plusieurs algorithmes en spécifiant un RSA asymétrique AWS KMS key comme clé d'encapsulation. Vous pouvez également utiliser une clé KMS de chiffrement symétrique.

Clé de données

Une clé de données est une clé de chiffrement que le SDK de chiffrement de AWS base de données utilise pour chiffrer les champs d'un enregistrement marqués ENCRYPT_AND_SIGN dans les actions cryptographiques. Chaque clé de données est un tableau d'octets qui respecte les exigences concernant les clés cryptographiques. Le SDK AWS de chiffrement de base de données utilise une clé de données unique pour chiffrer chaque attribut.

Il n'est pas nécessaire de spécifier, de générer, d'implémenter, d'étendre, de protéger ou d'utiliser des clés de données. Le SDK AWS de chiffrement de base de données fait cela pour vous lorsque vous appelez les opérations de chiffrement et de déchiffrement.

Pour protéger vos clés de données, le SDK AWS de chiffrement de base de données les chiffre à l'aide d'une ou de plusieurs clés de chiffrement appelées clés d'encapsulation. Une fois que le SDK AWS de chiffrement de base de données utilise vos clés de données en texte brut pour chiffrer vos données, il les supprime de la mémoire dès que possible. Stocke ensuite la clé de données cryptée dans la description du matériau. Pour plus de détails, consultez Fonctionnement du SDK AWS de chiffrement de base de données.

Astuce

Dans le SDK AWS Database Encryption, nous distinguons les clés de données des clés de chiffrement de données. Il est recommandé que toutes les suites d'algorithmes prises en charge utilisent une fonction de dérivation de clés. La fonction de dérivation de clés prend une clé de données en entrée et renvoie les clés de chiffrement des données qui sont réellement utilisées pour chiffrer vos enregistrements. C'est pour cette raison que nous indiquons souvent que les données sont chiffrées « sous » une clé de données plutôt que « par » la clé de données.

Chaque clé de données chiffrée inclut des métadonnées, notamment l'identifiant de la clé d'encapsulation qui l'a chiffrée. Ces métadonnées permettent au SDK de chiffrement de AWS base de données d'identifier les clés d'encapsulation valides lors du déchiffrement.

Clé d'emballage

Une clé d'encapsulation est une clé de chiffrement utilisée par le SDK AWS de chiffrement de base de données pour chiffrer la clé de données qui chiffre vos enregistrements. Chaque clé de données peut être chiffrée sous une ou plusieurs clés d'encapsulation. Vous déterminez quelles clés d'encapsulation sont utilisées pour protéger vos données lorsque vous configurez un trousseau de clés.


        Chiffrer une clé de données avec plusieurs clés d'encapsulation

Le SDK AWS Database Encryption prend en charge plusieurs clés d'encapsulation couramment utilisées, telles que AWS Key Management Service(AWS KMS) les clés KMS de chiffrement symétriques (y compris les clés multirégionales) et AWS KMS les clés RSA KMS asymétriques, les clés AES-GCM (Advanced Encryption Standard/Galois Counter Mode) brutes et les clés RSA brutes. Nous vous recommandons d'utiliser des clés KMS dans la mesure du possible. Pour choisir la clé d'encapsulation à utiliser, consultez la section Sélection des clés d'encapsulation.

Lorsque vous utilisez le chiffrement des enveloppes, vous devez protéger vos clés d'emballage contre tout accès non autorisé. Vous pouvez le faire de l'une des manières suivantes :

Si vous n'avez pas de système de gestion des clés, nous vous le recommandons AWS KMS. Le SDK AWS de chiffrement de base de données s'intègre AWS KMS pour vous aider à protéger et à utiliser vos clés d'encapsulation.

Porte-clés

Pour spécifier les clés d'encapsulation que vous utilisez pour le chiffrement et le déchiffrement, vous utilisez un trousseau de clés. Vous pouvez utiliser les trousseaux de clés fournis par le SDK AWS Database Encryption ou concevoir vos propres implémentations.

Un porte-clés génère, chiffre et déchiffre des clés de données. Il génère également les clés MAC utilisées pour calculer les codes d'authentification des messages basés sur le hachage (HMAC) contenus dans la signature. Lorsque vous définissez un trousseau de clés, vous pouvez spécifier les clés d'encapsulation qui chiffrent vos clés de données. La plupart des porte-clés contiennent au moins une clé d'emballage ou un service fournissant et protégeant les clés d'emballage. Lors du chiffrement, le SDK AWS de chiffrement de base de données utilise toutes les clés d'encapsulation spécifiées dans le jeu de clés pour chiffrer la clé de données. Pour obtenir de l'aide sur le choix et l'utilisation des trousseaux de clés définis par le SDK AWS de chiffrement de base de données, consultez la section Utilisation des trousseaux de clés.

Actions cryptographiques

Les actions cryptographiques indiquent au crypteur les actions à effectuer sur chaque champ d'un enregistrement.

Les valeurs de l'action cryptographique peuvent être l'une des suivantes :

  • Chiffrer et signer — Chiffrez le champ. Incluez le champ crypté dans la signature.

  • Signer uniquement — Incluez le champ dans la signature.

  • Ne rien faire : ne chiffrez pas et n'incluez pas le champ dans la signature.

Pour tous les champs susceptibles de stocker des données sensibles, utilisez Chiffrer et signer. Pour les valeurs de clé primaire (par exemple, une clé de partition et une clé de tri dans une table DynamoDB), utilisez Sign uniquement. Il n'est pas nécessaire de spécifier des actions cryptographiques pour la description du matériau. Le SDK AWS Database Encryption signe automatiquement le champ dans lequel la description du matériau est stockée.

Choisissez vos actions cryptographiques avec soin. En cas de doute, utilisez Chiffrer et signer. Une fois que vous avez utilisé le SDK AWS de chiffrement de base de données pour protéger vos enregistrements, vous ne pouvez pas remplacer un SIGN_ONLY champ existant ENCRYPT_AND_SIGN par un champ existantDO_NOTHING, ni modifier l'action cryptographique affectée à un champ existantDO_NOTHING. Toutefois, vous pouvez toujours apporter d'autres modifications à votre modèle de données. Par exemple, vous pouvez ajouter ou supprimer des champs chiffrés dans le cadre d'un seul déploiement.

Description du matériau

La description du matériau sert d'en-tête à un enregistrement crypté. Lorsque vous chiffrez et signez des champs avec le SDK de chiffrement de AWS base de données, le crypteur enregistre la description du matériel au fur et à mesure qu'il assemble le matériel cryptographique et stocke la description du matériel dans un nouveau champ (aws_dbe_head) qu'il ajoute à votre enregistrement.

La description matérielle est une structure de données formatée portable qui contient des copies cryptées des clés de données et d'autres informations, telles que les algorithmes de chiffrement, le contexte de chiffrement et les instructions de chiffrement et de signature. Le crypteur enregistre la description du matériel lorsqu'il assemble le matériel cryptographique pour le chiffrement et la signature. Plus tard, lorsqu'il doit assembler du matériel cryptographique pour vérifier et déchiffrer un champ, il utilise la description du matériel comme guide.

Le stockage des clés de données chiffrées à côté du champ crypté rationalise l'opération de déchiffrement et vous évite d'avoir à stocker et à gérer les clés de données cryptées indépendamment des données qu'elles chiffrent.

Pour des informations techniques sur la description du matériau, voirFormat de description du matériau.

Contexte de chiffrement

Pour améliorer la sécurité de vos opérations cryptographiques, le SDK de chiffrement AWS de base de données inclut un contexte de chiffrement dans toutes les demandes de chiffrement et de signature d'un enregistrement.

Un contexte de chiffrement est un ensemble de paires nom-valeur qui contient des données non secrètes arbitraires authentifiées supplémentaires. Le SDK AWS Database Encryption inclut le nom logique de votre base de données et les valeurs des clés primaires (par exemple, une clé de partition et une clé de tri dans une table DynamoDB) dans le contexte du chiffrement. Lorsque vous chiffrez et signez un champ, le contexte de chiffrement est lié cryptographiquement à l'enregistrement chiffré, de sorte que le même contexte de chiffrement est requis pour déchiffrer le champ.

Si vous utilisez un AWS KMS trousseau de clés, le SDK AWS de chiffrement de base de données utilise également le contexte de chiffrement pour fournir des données authentifiées supplémentaires (AAD) dans les appels auxquels le trousseau de clés est envoyé. AWS KMS

Chaque fois que vous utilisez la suite d'algorithmes par défaut, le gestionnaire de matériel cryptographique (CMM) ajoute une paire nom-valeur au contexte de chiffrement composée d'un nom réservé et d'une valeur représentant la clé de vérification publique. aws-crypto-public-key La clé de vérification publique est enregistrée dans la description du matériau.

Gestionnaire de matériaux de chiffrement

Le gestionnaire de matériel cryptographique (CMM) assemble le matériel cryptographique utilisé pour chiffrer, déchiffrer et signer vos données. Chaque fois que vous utilisez la suite d'algorithmes par défaut, le matériel cryptographique inclut des clés de données chiffrées et en texte brut, des clés de signature symétriques et une clé de signature asymétrique. Vous n'interagissez jamais directement avec le CMM. Les méthodes de chiffrement et de déchiffrement s'en occupent pour vous.

Comme le CMM fait office de liaison entre le SDK de chiffrement de AWS base de données et un trousseau de clés, il constitue un point idéal pour la personnalisation et l'extension, notamment pour le soutien à l'application des politiques. Vous pouvez spécifier un CMM de manière explicite, mais ce n'est pas obligatoire. Lorsque vous spécifiez un jeu de clés, le SDK de chiffrement AWS de base de données crée un CMM par défaut pour vous. Le CMM par défaut obtient le matériel de chiffrement ou de déchiffrement à partir du trousseau de clés que vous spécifiez. Pour cela, il peut être nécessaire d'appeler un service de chiffrement, comme AWS Key Management Service (AWS KMS).

Chiffrement symétrique et asymétrique

Le chiffrement symétrique utilise la même clé pour chiffrer et déchiffrer les données.

Le chiffrement asymétrique utilise une paire de clés de données liées mathématiquement. L'une des clés de la paire chiffre les données ; seule l'autre clé de la paire peut les déchiffrer. Pour plus de détails, voir Algorithmes cryptographiques dans le AWS Guide des services et outils cryptographiques.

Le SDK AWS de chiffrement de base de données utilise le chiffrement d'enveloppe. Il chiffre vos données à l'aide d'une clé de données symétrique. Il chiffre la clé de données symétrique avec une ou plusieurs clés d'encapsulation symétriques ou asymétriques. Il ajoute une description matérielle à l'enregistrement qui inclut au moins une copie cryptée de la clé de données.

Chiffrement de vos données (chiffrement symétrique)

Pour chiffrer vos données, le SDK de chiffrement AWS de base de données utilise une clé de données symétrique et une suite d'algorithmes incluant un algorithme de chiffrement symétrique. Pour déchiffrer les données, le SDK AWS de chiffrement de base de données utilise la même clé de données et la même suite d'algorithmes.

Chiffrement de votre clé de données (chiffrement symétrique ou asymétrique)

Le trousseau de clés que vous fournissez à une opération de chiffrement et de déchiffrement détermine la manière dont la clé de données symétrique est chiffrée et déchiffrée. Vous pouvez choisir un trousseau de clés utilisant un chiffrement symétrique, tel qu'un trousseau de AWS KMS clés doté d'une clé KMS de chiffrement symétrique, ou un jeu de clés utilisant un chiffrement asymétrique, tel qu'un trousseau de clés doté d'une AWS KMS clé RSA KMS asymétrique.

Engagement clé

Le SDK AWS de chiffrement des bases de données prend en charge l'engagement par clé (parfois appelé robustesse), une propriété de sécurité qui garantit que chaque texte chiffré ne peut être déchiffré qu'en un seul texte clair. Pour ce faire, l'engagement clé garantit que seule la clé de données qui a chiffré votre enregistrement sera utilisée pour le déchiffrer. Le SDK AWS Database Encryption inclut un engagement clé pour toutes les opérations de chiffrement et de déchiffrement.

La plupart des chiffrements symétriques modernes (y compris AES) chiffrent le texte en clair avec une clé secrète unique, comme la clé de données unique que le SDK de chiffrement de AWS base de données utilise pour chiffrer chaque champ de texte en clair marqué dans un enregistrement. ENCRYPT_AND_SIGN Le déchiffrement de cet enregistrement avec la même clé de données renvoie un texte en clair identique à l'original. Le déchiffrement avec une autre clé échouera généralement. Bien que cela soit difficile, il est techniquement possible de déchiffrer un texte chiffré sous deux clés différentes. Dans de rares cas, il est possible de trouver une clé capable de déchiffrer partiellement le texte chiffré en un texte clair différent, mais toujours intelligible.

Le SDK AWS de chiffrement de base de données chiffre toujours chaque attribut sous une clé de données unique. Il peut chiffrer cette clé de données sous plusieurs clés d'encapsulation, mais les clés d'encapsulation chiffrent toujours la même clé de données. Néanmoins, un enregistrement chiffré sophistiqué créé manuellement peut en fait contenir différentes clés de données, chacune chiffrée par une clé d'encapsulation différente. Par exemple, si un utilisateur déchiffre l'enregistrement chiffré, il renvoie 0x0 (faux) tandis qu'un autre utilisateur déchiffre le même enregistrement crypté obtient 0x1 (vrai).

Pour éviter ce scénario, le SDK de chiffrement AWS de base de données inclut un engagement clé lors du chiffrement et du déchiffrement. La méthode de cryptage lie cryptographiquement la clé de données unique qui a produit le texte chiffré à l'engagement de clé, un code d'authentification de message basé sur le hachage (HMAC) calculé sur la description du matériel à l'aide d'une dérivation de la clé de données. Ensuite, il enregistre l'engagement clé dans la description du matériel. Lorsqu'il déchiffre un enregistrement avec une clé d'engagement, le SDK de chiffrement de AWS base de données vérifie que la clé de données est la seule clé pour cet enregistrement chiffré. Si la vérification de la clé de données échoue, l'opération de déchiffrement échoue.

Signatures numériques

Pour garantir l'authenticité des données lorsqu'elles passent d'un système à l'autre, vous pouvez appliquer une signature numérique à l'enregistrement. Les signatures numériques sont toujours asymétriques. Vous utilisez votre clé privée pour créer la signature et l'ajouter à l'enregistrement d'origine. Votre destinataire utilise une clé publique pour vérifier que l'enregistrement n'a pas été modifié depuis que vous l'avez signé. Vous devez utiliser des signatures numériques si les utilisateurs qui chiffrent les données ne sont pas aussi fiables que ceux qui les déchiffrent.

Le SDK AWS de chiffrement de base de données chiffre vos données à l'aide d'un algorithme de chiffrement authentifié, AES-GCM, mais comme AES-GCM utilise des clés symétriques, toute personne capable de déchiffrer la clé de données utilisée pour déchiffrer le texte chiffré pourrait également créer manuellement un nouveau texte chiffré, ce qui pourrait poser un problème de sécurité.

Pour éviter ce problème, la suite d'algorithmes par défaut ajoute une signature ECDSA (Elliptic Curve Digital Signature Algorithm) aux enregistrements chiffrés. La suite d'algorithmes par défaut chiffre les champs de votre enregistrement marqués à l'ENCRYPT_AND_SIGNaide d'un algorithme de chiffrement authentifié, AES-GCM. Ensuite, il calcule à la fois les codes d'authentification des messages basés sur le hachage (HMAC) et les signatures ECDSA asymétriques sur les champs de votre enregistrement marqués et. ENCRYPT_AND_SIGN SIGN_ONLY Le processus de déchiffrement utilise les signatures pour vérifier qu'un utilisateur autorisé a chiffré l'enregistrement.

Lorsque la suite d'algorithmes par défaut est utilisée, le SDK AWS de chiffrement de base de données génère une clé privée temporaire et une paire de clés publiques pour chaque enregistrement chiffré. Le SDK AWS Database Encryption stocke la clé publique dans la description matérielle et supprime la clé privée, et personne ne peut créer une autre signature vérifiant avec la clé publique. Étant donné que l'algorithme lie la clé publique à la clé de données cryptée en tant que données authentifiées supplémentaires dans la description matérielle, un utilisateur qui ne peut déchiffrer que des enregistrements ne peut pas modifier la clé publique.

Le SDK AWS de chiffrement de base de données inclut toujours la vérification HMAC. Les signatures numériques ECDSA sont activées par défaut, mais elles ne sont pas obligatoires. Si les utilisateurs qui chiffrent les données et ceux qui les déchiffrent jouissent de la même confiance, vous pouvez envisager d'utiliser une suite d'algorithmes qui n'inclut pas de signatures numériques pour améliorer vos performances. Pour plus d'informations sur la sélection d'autres suites d'algorithmes, voir Choisir une suite d'algorithmes.