Vérifier l'intégrité des données de bout en bout

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 ou DecryptResponse.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.

Schéma illustrant différents champs de vérification des données et les actions correspondantes

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