Détails de la mise en cache des clés de données - 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.

Détails de la mise en cache des clés de données

La plupart des applications peuvent utiliser l'implémentation par défaut de la mise en cache des clés de données sans écrire de code personnalisé. Cette section décrit l'implémentation par défaut, ainsi que certaines informations sur les options.

Fonctionnement de la mise en cache des clés de données

Lorsque vous utilisez la mise en cache des clés de données dans une demande afin de chiffrer ou déchiffrer des données, le kit AWS Encryption SDK cherche d'abord dans le cache une clé de données correspondant à la demande. Si le kit trouve une correspondance valide, il utilise la clé de données mise en cache pour chiffrer les données. Sinon, il génère une nouvelle clé de données, comme il le ferait en l'absence de cache.

La mise en cache des clés de données n'est pas utilisée pour les données de taille inconnue, par exemple les données diffusées. Cela permet au CMM de mise en cache d'appliquer correctement leseuil maximal d'octets. Pour éviter ce comportement, ajoutez la taille du message à la demande de chiffrement.

En plus d'un cache, la mise en cache des clés de données utilise unGestionnaire de matériaux de chiffrement de mise en cache(mise en cache CMM). Le CMM de mise en cache est un outil spécialiséGestionnaire de matériaux de chiffrement (CMM)qui interagit avec uncacheet un sous-jacentCMM. (Lorsque vous spécifiez unFournisseur de clés principalesou porte-clés, leAWS Encryption SDKcrée une MMT par défaut pour vous.) Le CMM de mise en cache les clés de données renvoyées par sa CMM sous-jacente. Le CMM de mise en cache applique également les seuils de sécurité du cache que vous définissez.

Pour éviter qu'une clé de données incorrecte soit sélectionnée à partir du cache, chaque CMM de mise en cache compatible nécessite que les propriétés suivantes des matériaux cryptographiques de mise en cache correspondent à la demande de matériaux.

Note

Le kit AWS Encryption SDK met en cache les clés de données uniquement lorsque la suite d'algorithmes utilise une fonction de dérivation de clés.

Les flux de travail suivants illustrent le traitement d'une demande de chiffrement de données avec et sans mise en cache des clés de données. Ils expliquent l'utilisation des composants de mise en cache que vous créez, y compris le cache et le CMM de mise en cache, pendant le processus.

Chiffrement de données sans mise en cache

Pour obtenir les matériaux de chiffrement sans mise en cache :

  1. Une application demande au kit AWS Encryption SDK de chiffrer des données.

    La requête spécifie un fournisseur de clés principales ou un porte-clés. LeAWS Encryption SDKcrée un CMM par défaut qui interagit avec votre fournisseur de clés principales ou votre porte-clés.

  2. LeAWS Encryption SDKLe demande au CMM les matériaux de chiffrement (obtenir les matériaux de chiffrement).

  3. Le CMM demande sonPorte-clés(C) etJavaScript) ouFournisseur de clés principales(Java et Python) pour les matériaux de chiffrement. Pour cela, il peut être nécessaire d'appeler un service de chiffrement, comme AWS Key Management Service (AWS KMS). Le CMM retourne les matériaux de chiffrement au kitAWS Encryption SDK.

  4. Le kit AWS Encryption SDK utilise la clé de données en texte brut pour chiffrer les données. Il stocke les données chiffrées et des clés de données chiffrées dans un message chiffré, qu'il renvoie à l'utilisateur.

Chiffrement de données sans mise en cache

Chiffrement de données avec mise en cache

Pour obtenir les matériaux de chiffrement sans mise en cache de clé de données :

  1. Une application demande au kit AWS Encryption SDK de chiffrer des données.

    La requête spécifie unMise en cache du gestionnaire de matériaux de chiffrement de mise en cache (mise en cache CMM)qui est associé à un gestionnaire de matériaux de chiffrement (CMM) sous-jacent. Lorsque vous spécifiez un fournisseur de clés principales ou un porte-clés, le kitAWS Encryption SDKcrée une MMT par défaut pour vous.

  2. Le kit SDK demande les matériaux de chiffrement au CMM de mise en cache spécifié.

  3. Le CMM de mise en cache demande les matériaux de chiffrement au cache.

    1. Si le cache trouve une correspondance, il met à jour l'âge et utilise les valeurs de l'entrée de cache correspondante, et renvoie les matériaux de chiffrement mis en cache au CMM de mise en cache.

      Si l'entrée de cache est conforme à sonseuils de sécurité, le CMM de mise en cache le renvoie au kit SDK. Dans le cas contraire, il indique au cache d'expulser l'entrée et poursuit comme s'il n'y avait pas de correspondance.

    2. Si le cache ne trouve pas de correspondance valide, le CMM de mise en cache demande au CMM sous-jacent de générer une nouvelle clé de données.

      Le CMM sous-jacent obtient les matériaux de chiffrement à partir de son porte-clés (C etJavaScript) ou du fournisseur de clé principale (Java et Python). Pour cela, il peut être nécessaire d'appeler un service, comme AWS Key Management Service. Le CMM sous-jacent renvoie les copies en texte brut et chiffrées de la clé de données au CMM de mise en cache.

      Le CMM de mise en cache enregistre les nouveaux matériaux de chiffrement dans le cache.

  4. Le CMM de mise en cache renvoie les matériaux de chiffrement au kitAWS Encryption SDK.

  5. Le kit AWS Encryption SDK utilise la clé de données en texte brut pour chiffrer les données. Il stocke les données chiffrées et des clés de données chiffrées dans un message chiffré, qu'il renvoie à l'utilisateur.

Chiffrement de données avec la mise en cache des clés de données

Création d'un cache de matériaux de chiffrement

Le kit AWS Encryption SDK définit les exigences concernant un cache de matériaux de chiffrement utilisé pour la mise en cache de clés de données. Il fournit également un cache local, qui est un configurable, en mémoire,Cache LRU (LRU) le moins récemment utilisé. Pour créer une instance du cache local, utilisez leLocalCryptoMaterialsCacheConstructeur Java et Python, legetLocalCryptographicMaterialsCachefonction dansJavaScript, ou leaws_cryptosdk_materials_cache_local_newConstructor en C.

Le cache local inclut une logique pour la gestion de cache de base, y compris l'ajout, l'expulsion et la correspondance des entrées mises en cache, ainsi que la gestion du cache. Vous n'avez pas besoin d'écrire une logique de gestion de cache personnalisée. Vous pouvez utiliser le cache local tel quel, le personnaliser ou le remplacer par un cache compatible.

Lorsque vous créez un cache local, vous définissez soncapacité, c'est-à-dire le nombre maximal d'entrées que le cache peut contenir. Ce paramètre vous permet de concevoir un cache efficace avec une réutilisation des clés de données limitée.

LeKit SDK de chiffrement AWS pour Javaet l'Kit SDK de chiffrement AWS pour Pythonfournir également unCache de matériaux de chiffrement null(NullCryptoMaterialsCache). Le NullCryptoMaterialsCache renvoie un message d'échec pour toutes les opérations GET et ne répond pas aux opérations PUT. Vous pouvez utiliser NullCryptoMaterialsCache pour les tests ou pour désactiver temporairement la mise en cache dans une application qui inclut un code de mise en cache.

DansAWS Encryption SDK, chaque cache de matériaux de chiffrement est associé à unGestionnaire de matériaux de chiffrement de mise en cache(mise en cache CMM). Le CMM de mise en cache récupère des clés de données du cache, stocke les données des clés dans le cache, et applique les applicationsseuils de sécuritéque vous avez fixé. Lorsque vous créez un CMM de mise en cache, vous spécifiez le cache qu'il utilise et le CMM ou le fournisseur de clés principales sous-jacent qui génère les clés de données qu'il met en cache.

Création d'un gestionnaire des matériaux de chiffrement de mise en cache

Pour activer la mise en cache des clés de données, vous créez uncacheet unGestionnaire de matériaux de chiffrement de mise en cache(mise en cache CMM). Ensuite, dans vos demandes de chiffrement ou de déchiffrement des données, vous spécifiez un CMM de mise en cache au lieu d'un standard.Gestionnaire de matériaux de chiffrement (CMM), ouFournisseur de clés principalesouPorte-clés.

Il existe deux types de GMT. Les deux récupèrent des clés de données (et les matériaux de chiffrement associés), mais de différentes façons, comme indiqué ci-dessous :

  • Un CMM est associé à un porte-clés (C ouJavaScript) ou un fournisseur de clé principale (Java et Python). Lorsque le kit SDK demande au CMM les matériaux de chiffrement ou de déchiffrement, le CMM obtient les matériaux à partir de son porte-clés ou du fournisseur de clé principale. Dans Java et Python, le CMM utilise ensuite les clés principales pour générer, chiffrer ou déchiffrer les clés de données. En C et JavaScript, le porte-clés génère, chiffre et renvoie les matériaux de chiffrement.

  • Un CMM de mise en cache est associé à un cache, tel qu'unCache local, et un CMM sous-jacent. Lorsque le kit SDK demande des matériaux de chiffrement au CMM de mise en cache, le CMM de mise en cache tente de les récupérer à partir du cache. S'il ne trouve aucune correspondance, le CMM de mise en cache demande les matériaux à son CMM sous-jacent. Il met ensuite en cache les nouveaux matériaux cryptographiques avant de les renvoyer au mandataire.

Le CMM de mise en cache applique égalementseuils de sécuritéque vous définissez pour chaque entrée de cache. Etant donné que les seuils de sécurité sont définis et appliqués par le CMM de mise en cache, vous pouvez utiliser n'importe quel cache compatible, même si le cache n'est pas conçu pour les matériaux sensibles.

Qu'est-ce qu'une entrée de cache de clé de données ?

La mise en cache des clés de données stocke les clés de données et les matériaux de chiffrement connexes dans un cache. Chaque entrée comprend les éléments répertoriés ci-dessous. Ces informations peuvent vous être utiles lorsque vous décidez si vous souhaitez utiliser la fonction de mise en cache des clés de données, et lorsque vous définissez les seuils de sécurité pour un gestionnaire de matériaux cryptographiques de mise en cache (CMM de mise en cache).

Entrées mises en cache pour les demandes de chiffrement

Les entrées qui sont ajoutées à un cache de clé de données suite à une opération de chiffrement incluent les éléments suivants :

  • Clé de données en texte brut

  • Clés de données chiffrées (une ou plusieurs)

  • Contexte de chiffrement

  • Clé de signature de message (le cas échéant)

  • Suite d'algorithmes

  • Métadonnées, y compris les compteurs d'utilisation pour appliquer les seuils de sécurité

Entrées mises en cache pour les demandes de déchiffrement

Les entrées qui sont ajoutées à un cache de clé de données suite à une opération de déchiffrement incluent les éléments suivants :

  • Clé de données en texte brut

  • Clé de vérification de signature (le cas échéant)

  • Métadonnées, y compris les compteurs d'utilisation pour appliquer les seuils de sécurité

Contexte de chiffrement : Sélection des entrées de cache

Vous pouvez spécifier un contexte de chiffrement dans toute demande afin de chiffrer des données. Toutefois, le contexte de chiffrement joue un rôle particulier dans la mise en cache des clés de données. Il vous permet de créer des sous-groupes de clés de données dans votre cache, même lorsque les clés de données proviennent du même CMM de mise en cache.

Un contexte de chiffrement est un ensemble de paires clé-valeur contenant les données non secrètes arbitraires. Pendant le chiffrement, le contexte de chiffrement est lié de façon chiffrée aux données chiffrées. Le même contexte de chiffrement est donc requis pour déchiffrer les données. Dans le kit AWS Encryption SDK, le contexte de chiffrement est stocké dans le message chiffré, ainsi que les données chiffrées et les clés de données.

Lorsque vous utilisez un cache de clé de données, vous pouvez également utiliser le contexte de chiffrement pour sélectionner des clés de données mises en cache particulières pour vos opérations de chiffrement. Le contexte de chiffrement est enregistré dans l'entrée de cache avec la clé de données (il fait partie de l'ID de l'entrée de cache). Les clés de données mises en cache sont réutilisées uniquement en cas de correspondance de leurs contextes de chiffrement. Si vous souhaitez réutiliser certaines clés de données pour une demande de chiffrement, spécifiez le même contexte de chiffrement. Si vous souhaitez éviter ces clés de données, spécifiez un autre contexte de chiffrement.

Le contexte de chiffrement est toujours facultatif, mais il est recommandé. Si vous ne spécifiez pas de contexte de chiffrement dans votre demande, un contexte de chiffrement vide est inclus dans l'ID de l'entrée de cache et associé à chaque demande.

Mon application utilise-t-elle des clés de données mises en cache ?

La mise en cache des clés de données est une stratégie d'optimisation très efficace pour certaines applications et charges de travail. Cependant, comme cela comporte un certain risque, il est important de déterminer dans quelle mesure il est susceptible d'être efficace pour votre situation, puis de décider si les avantages l'emportent sur les risques.

Étant donné que la mise en cache des clés de données réutilise les clés de données, l'effet le plus évident est de réduire le nombre d'appels pour générer de nouvelles clés de données. Lorsque la mise en cache de clé de données est implémentée, le kit AWS Encryption SDK appelle l'opération AWS KMS GenerateDataKey uniquement pour créer la clé de données initiale et lorsque le cache manque. Mais la mise en cache améliore les performances de manière perceptible uniquement dans les applications qui génèrent de nombreuses clés de données avec les mêmes caractéristiques, y compris le même contexte de chiffrement et la même suite d'algorithmes.

Pour déterminer si votre implémentation du kit AWS Encryption SDK utilise réellement des clés de données du cache, essayez les techniques suivantes.

  • Dans les journaux de votre infrastructure de clé principale, vérifiez la fréquence des appels pour créer de nouvelles clés de données. Lorsque la mise en cache des clés de données est efficace, le nombre d'appels pour créer de nouvelles clés doit diminuer sensiblement. Par exemple, si vous utilisez unAWS KMSfournisseur de clés principal ou porte-clés, recherchez dans leCloudTrailJournaux pourGenerateDataCléappels.

  • Comparez les messages chiffrés renvoyés par AWS Encryption SDK en réponse à différentes demandes de chiffrement. Par exemple, si vous utilisez le kitKit SDK de chiffrement AWS pour Java, comparez lesParsedCiphertextobjet provenant de différents appels de chiffrement. DansKit SDK de chiffrement AWS pour JavaScript, comparez le contenu du kitencryptedDataKeyspropriété duMessageHeader. Lorsque les clés de données sont réutilisées, les clés de données chiffrées dans le message chiffré sont identiques.