Cette page explique comment utiliser les champs de l'API Cloud Key Management Service pour détecter et empêcher les modifications involontaires des données lors de leur transfert entre les systèmes clients et Cloud KMS. Ces consignes complètent la manière dont Google Cloud protège automatiquement vos données au repos et en transit.
Protection automatique des données
Toutes les données de Google Cloud sont automatiquement chiffrées en transit et au repos dans Google Cloud.
Cloud KMS prend des mesures supplémentaires pour protéger les clés de chiffrement au repos en chiffrant chaque clé de chiffrement à l'aide d'une autre clé cryptographique appelée clé de chiffrement de clé (KEK, key encryption key). Pour en savoir plus sur cette technique, consultez la section Chiffrement encapsulé.
Chaque opération de cryptographie Cloud KMS inclut des vérifications automatiques de corruption des données. Si une corruption est détectée, l'opération est annulée et une erreur détaillée est consignée.
Ces protections automatiques sont importantes, mais elles n'empêchent pas la corruption des données côté client. Par exemple, la corruption des données lors du chiffrement peut entraîner des données ne pouvant pas être déchiffrées.
Cet article explique comment détecter et empêcher la corruption des données côté client afin de minimiser le risque de perte de données.
Calculer et vérifier les sommes de contrôle
Chaque requête et réponse de chaque opération de chiffrement inclut des champs somme de contrôle CRC32C, tels que plaintext_crc32c
. Vous pouvez calculer la somme de contrôle et comparer les valeurs calculées et renvoyées.
Sur le serveur, l'API Cloud Key Management Service définit les champs booléens, tels que verified_plaintext_crc32c
, sur true
pour indiquer qu'elle a reçu la somme de contrôle appropriée et renvoie une erreur INVALID_ARGUMENT
si la somme de contrôle ne correspond pas à la valeur calculée par le serveur.
Tenez compte des consignes suivantes lors du calcul et de la comparaison des sommes de contrôle :
- Calculez les sommes de contrôle à l'aide d'un encodage binaire, dès l'envoi ou la réception des données.
- Ne stockez pas les sommes de contrôle en texte brut non chiffrées vers et depuis l'API Cloud Key Management Service. Par exemple, ne stockez pas le contenu non chiffré des champs
EncryptRequest.plaintext_crc32c
ouDecryptResponse.plaintext_crc32c
. Pour conserver un enregistrement d'une somme de contrôle, sérialisez-le avec les données pertinentes et transmettez l'objet composé à Cloud KMS pour chiffrement. Lorsque vous déchiffrez des données, vous pouvez comparer la somme de contrôle avec la valeur attendue calculée. - Si une opération de déchiffrement génère des sommes de contrôle non concordantes, concevez votre application de manière à réessayer l'opération un nombre limité de fois, en cas de problèmes temporaires.
- Si une opération de chiffrement entraîne des sommes de contrôle non concordantes pour les données chiffrées (le texte chiffré), supprimez le résultat chiffré, puis réessayez.
Pour les requêtes de chiffrement :
Si vous incluez le champ "somme de contrôle" dans la requête, le serveur définit un champ de validation associé dans la réponse à
true
pour indiquer qu'il a reçu la somme de contrôle et a tenté de vérifier sa valeur.Si vous incluez le champ de somme de contrôle mais que la réponse définit le champ de validation sur
false
, le serveur n'a pas reçu le champ de somme de contrôle, et d'autres informations sont peut-être manquantes dans la réponse. Réessayez la requête un nombre limité de fois, au cas où l'erreur ne serait que temporaire.Si la somme de contrôle a été reçue, mais ne correspond pas, une erreur
INVALID_ARGUMENT
est renvoyée. L'erreur inclut le nom du champ et la somme de contrôle ne correspondant pas. Exemple :The checksum in field plaintext_crc32c did not match the data in field plaintext.
Réessayez la requête un nombre limité de fois, au cas où l'erreur ne serait que temporaire.
Pour les requêtes de déchiffrement, vous pouvez calculer une somme de contrôle et la comparer à la valeur de DecryptResponse.plaintext_crc32c
dans la réponse.
Les champs de somme de contrôle suivants sont inclus dans les requêtes et les réponses de l'API Cloud Key Management Service.
Champ dans la requête | Champ dans la réponse |
---|---|
EncryptRequest.plaintext_crc32c |
EncryptResponse.verified_plaintext_crc32c |
EncryptionRequest.additional_authenticated_data_crc32c |
EncryptionResponse.verified_additional_authenticated_data_crc32c |
AsymmetricSignRequest.digest_crc32c |
AsymmetricSignResponse.verified_digest_crc32c |
AsymmetricSignRequest.signature_crc32c |
AsymmetricSignResponse.verified_signature_crc32c |
AsymmetricSignRequest.signature_crc32c |
AsymmetricSignResponse.verified_signature_crc32c |
Non applicable | GetPublicKeyResponse.pem_crc32c |
Non applicable | DecryptResponse.plaintext_crc32c |
MacSignRequest.data_crc32c |
MacSignResponse.verified_data_crc32c |
MacVerifyRequest.data_crc32c |
MacVerifyResponse.verified_data_crc32c |
MacVerifyRequest.mac_crc32c |
MacVerifyResponse.verified_mac_crc32c |
Non applicable | MacVerifyResponse.verified_success_integrity |
Vérifier les noms de ressources
Les réponses pour Encrypt, GetPublicKey, AsymmetricSign, MacSign et MacVerify incluent un champ name
contenant le nom de l'objet API Cloud Key Management Service concerné. Vous pouvez comparer la valeur du champ name
avec la valeur attendue et supprimer les résultats qui ne correspondent pas.
Schéma de vérification des données
Ce schéma indique quand vérifier chaque type de données associé aux opérations de cryptographie et quand vérifier les données de chaque type de source. Vous pouvez également afficher un résumé des champs de vérification des données.
Récapitulatif du champ de vérification des données
Utilisez ces tables lors de la conception de votre application pour déterminer les champs que vous pouvez utiliser pour vérifier vos données avant et après chaque opération de chiffrement.
Encrypt
API | Vérification des entrées côté serveur | Vérification des ressources côté client | Vérification des sorties côté client | Vérification côté client des entrées côté serveur |
---|---|---|---|---|
EncryptRequest |
plaintext_crc32c additional_authenticated_data_crc32c |
|||
EncryptResponse |
name |
ciphertext_crc32c |
verified_plaintext_crc32c verified_additional_authenticated_data_crc32c |
Decrypt
API | Vérification des entrées côté serveur | Vérification des ressources côté client | Vérification des sorties côté client | Vérification côté client des entrées côté serveur |
---|---|---|---|---|
DecryptRequest |
ciphertext_crc32c additional_authenticated_data_crc32c |
|||
DecryptResponse |
plaintext_crc32c |
AsymmetricSign
API | Vérification des entrées côté serveur | Vérification des ressources côté client | Vérification des sorties côté client | Vérification côté client des entrées côté serveur |
---|---|---|---|---|
AsymmetricSignRequest |
digest_crc32c |
|||
AsymmetricSignResponse |
name |
signature_crc32c |
verified_digest_crc32c |
AsymmetricDecrypt
API | Vérification des entrées côté serveur | Vérification des ressources côté client | Vérification des sorties côté client | Vérification côté client des entrées côté serveur |
---|---|---|---|---|
AsymmetricDecryptRequest |
ciphertext_crc32c |
|||
AsymmetricDecryptResponse |
plaintext_crc32c |
verified_ciphertext_crc32c |
PublicKey
API | Vérification des entrées côté serveur | Vérification des ressources côté client | Vérification des sorties côté client | Vérification côté client des entrées côté serveur |
---|---|---|---|---|
PublicKey |
name |
pem_crc32c |
MacSign
API | Vérification des entrées côté serveur | Vérification des ressources côté client | Vérification des sorties côté client | Vérification côté client des entrées côté serveur |
---|---|---|---|---|
MacSignRequest |
data_crc32c |
|||
MacSignResponse |
mac_crc32c |
verified_data_crc32c |
MacVerify
API | Vérification des entrées côté serveur | Vérification des ressources côté client | Vérification des sorties côté client | Vérification côté client des entrées côté serveur | |
---|---|---|---|---|---|
MacVerifyRequest |
data_crc32c |
mac_crc32c |
|||
MacVerifyResponse |
verified_data_crc32c |
verified_mac_crc32c |
verified_success_integrity |
Étape suivante
- Apprenez-en plus sur le chiffrement symétrique et asymétrique
- Apprenez-en plus sur le chiffrement des données d'application
- Utilisez Cloud Audit Logging