Chiffrement encapsulé

Introduction

Pour stocker et chiffrer des données à l'échelle de Google, vous devez recourir à un service central de gestion des clés de chiffrement possédant plusieurs couches de clés pour les données chiffrées. Le chiffrement encapsulé, par exemple, consiste à chiffrer une clé avec une autre clé.

Vous pouvez chiffrer des données au niveau de la couche d'application, qui est chargée d'afficher les données pour les utilisateurs, et de la couche de stockage, qui assure le stockage physique des données.

Par défaut, au niveau de la couche de stockage, Google Cloud chiffre les contenus client stockés au repos à l'aide du chiffrement encapsulé, en employant le service interne de gestion des clés de Google comme keystore central. Si vous stockez et chiffrez vous-même des données, vous pouvez utiliser Cloud Key Management Service comme keystore central au niveau de la couche d'application, processus qui est le sujet de cet article.

Cloud KMS stocke les clés dans une hiérarchie de clés conçue dans un souci de facilité d'emploi, et dont l'accès aux ressources est régi par Identity and Access Management. Les principaux niveaux d'une hiérarchie de clés Cloud KMS sont les suivants :

Ressources

Pour en savoir plus sur la hiérarchie des clés, consultez la page Hiérarchie des objets.

Clés de chiffrement de données

La clé servant au chiffrement des données elles-mêmes est appelée clé de chiffrement de données (DEK, Data Encryption Key).

Voici des bonnes pratiques en matière de gestion des DEK :

  • Générez les DEK en local.
  • Une fois les DEK stockées, assurez-vous toujours qu'elles sont chiffrées au repos.
  • Pour pouvoir y accéder facilement, stockez la DEK à proximité des données qu'elle chiffre.
  • Générez une nouvelle DEK à chaque fois que vous écrivez les données. Cela signifie qu'aucune rotation des DEK n'est nécessaire.
  • N'utilisez pas la même DEK pour chiffrer les données de deux utilisateurs différents.
  • Utilisez un algorithme puissant comme AES (Advanced Encryption Standard) 256 bits en mode GCM (Galois Counter Mode).

Clés de chiffrement de clés

La DEK est chiffrée (ou encapsulée) par une clé de chiffrement de clés (KEK, Key Encryption Key). Le processus de chiffrement d'une clé avec une autre clé est appelé chiffrement encapsulé.

Voici des bonnes pratiques en matière de gestion des KEK :

  • Stockez les KEK de manière centralisée.

  • Définissez la précision des DEK qu'elles chiffrent en fonction de leur cas d'utilisation. Prenons l'exemple d'une charge de travail dont le chiffrement des fragments de données nécessite plusieurs DEK. Vous pouvez encapsuler toutes les DEK chargées du chiffrement de cette charge de travail à l'aide d'une seule KEK.

  • Procédez à la rotation des clés de manière régulière, ainsi qu'après toute suspicion d'incident. Pour en savoir plus, consultez la page Rotation des clés.

Équilibrer les DEK et les KEK

Le fait d'avoir un nombre de KEK inférieur à celui des DEK et d'utiliser un service central de gestion des clés permet de gérer plus facilement le stockage et le chiffrement des données à grande échelle. Ce type de service constitue également un point unique pour auditer et limiter plus facilement l'accès aux données.

Selon votre situation et le volume de données que vous chiffrez, vous pouvez choisir d'employer un modèle similaire. Une seule KEK peut servir à protéger plusieurs DEK. Avec ce modèle, les objets de données individuels ont tous leur propre DEK, sans que le volume de clés stockées dans un service central de gestion des clés n'augmente massivement.

Cloud Key Management Service a été conçu pour gérer les KEK. La taille maximale des entrées de données pour les fonctions Encrypt et Decrypt est donc de 64 Kio. Toutefois, si vous savez que les données n'atteindront pas cette limite, vous pouvez les chiffrer et les déchiffrer directement à l'aide de Cloud KMS.

Chiffrer des données à l'aide du chiffrement encapsulé

Le processus de chiffrement des données est le suivant : vous générez localement une DEK, avec laquelle vous chiffrez les données. Ensuite, vous l'encapsulez au moyen d'une KEK, puis stockez les données chiffrées et la DEK encapsulée. La KEK ne quitte jamais Cloud KMS.

Processus de chiffrement

Pour chiffrer des données à l'aide du chiffrement encapsulé :

  1. Générez une DEK en local. Pour ce faire, vous pouvez employer une bibliothèque Open Source comme OpenSSL, en spécifiant un type d'algorithme de chiffrement et un mot de passe à partir desquels générer la clé. Si vous le souhaitez, vous pouvez également spécifier un salage et un condensé à utiliser.

  2. Utilisez cette DEK localement pour chiffrer les données.

    Par exemple, vous pouvez employer OpenSSL comme indiqué dans l'exemple de la section Chiffrer le message. Nous vous recommandons d'utiliser l'algorithme de chiffrement AES-256 (Advanced Encryption Standard, 256 bits) en mode GCM (Galois Counter Mode).

  3. Générez une nouvelle clé dans Cloud KMS ou employez une clé existante, qui servira de KEK. Utilisez cette clé pour chiffrer (encapsuler) la DEK.

  4. Stockez les données chiffrées et la DEK encapsulée.

Déchiffrer des données à l'aide du chiffrement encapsulé

Le processus de déchiffrement des données est le suivant : vous récupérez les données chiffrées et la DEK encapsulée, puis la KEK qui a encapsulé la DEK. Ensuite, vous désencapsulez la DEK à l'aide de la KEK, puis déchiffrez les données au moyen de la DEK désencapsulée. La KEK ne quitte jamais Cloud KMS.

Processus de déchiffrement

Pour déchiffrer des données à l'aide du chiffrement encapsulé :

  1. Récupérez les données chiffrées et la DEK encapsulée.

  2. Désencapsulez la DEK à l'aide de la clé stockée dans Cloud KMS.

  3. Avec la DEK en texte brut, déchiffrez les données. Si vous utilisez OpenSSL comme indiqué précédemment, consultez l'exemple de la section Déchiffrer le message.

Pour obtenir un exemple de code illustrant comment chiffrer et déchiffrer avec le chiffrement par enveloppe, consultez la section Chiffrement côté client avec Tink et Cloud KMS.

Intégration aux services Google Cloud

Plusieurs produits Google Cloud sont intégrés à Cloud KMS pour assurer la fonctionnalité de clé de chiffrement gérée par le client (CMEK, Customer-Managed Encryption Key). La fonctionnalité CMEK avec Cloud KMS ajoute une couche supplémentaire de protection pour vos données, vous permet de contrôler vos clés de chiffrement et tire parti des avantages présentés par Cloud KMS en matière de gestion des clés. Pour obtenir la liste complète des produits compatibles avec les CMEK, consultez la page Utiliser Cloud KMS avec d'autres services.

Autres options pour les services Google Cloud

Pour les données stockées dans des produits Google Cloud non compatibles avec la fonctionnalité CMEK, vous pouvez mettre en œuvre votre propre chiffrement au niveau de la couche d'application. Pour cela, vous devez mettre en œuvre votre propre chiffrement encapsulé, comme décrit ci-dessus, afin de stocker les données chiffrées localement dans Google Cloud. C'est également ainsi que vous pouvez utiliser Cloud KMS pour chiffrer les données que vous stockez chez d'autres fournisseurs de services cloud ou sur site.

En plus d'être compatibles avec la fonctionnalité CMEK, les produits suivants acceptent la fonctionnalité de clé de chiffrement fournie par le client (CSEK, Customer-Supplied Encryption Key).

Produit Article sur la fonctionnalité CSEK
Cloud Storage Clés de chiffrement fournies par le client
Compute Engine Chiffrer des disques avec des clés fournies par le client

Avec la fonctionnalité CSEK, vous fournissez votre propre clé AES-256 qui servira de KEK, et votre clé protège les DEK qui protègent vos données. Votre clé CSEK est protégée par une couche de protection supplémentaire, à l'aide d'une clé Cloud KMS.

Maintenant que vous pouvez importer des clés dans Cloud KMS, vous pouvez importer vos clés et les utiliser avec des services compatibles CMEK au lieu de compter sur une CSEK.