Memverifikasi integritas data menyeluruh

Halaman ini membahas penggunaan kolom di Cloud Key Management Service API untuk mendeteksi dan mencegah perubahan yang tidak diinginkan pada data saat data tersebut berpindah antara sistem klien dan Cloud KMS. Panduan ini melengkapi cara Google Cloud melindungi data Anda secara otomatis saat dalam penyimpanan dan saat transit.

Perlindungan data otomatis

Semua data di Google Cloud otomatis dienkripsi saat dalam pengiriman dan dalam penyimpanan di dalam Google Cloud.

Cloud KMS mengambil langkah tambahan untuk melindungi kunci enkripsi dalam penyimpanan dengan mengenkripsi setiap kunci enkripsi menggunakan kunci kriptografis lain yang disebut kunci enkripsi kunci (KEK). Untuk mempelajari teknik ini lebih lanjut, lihat enkripsi amplop.

Setiap operasi kriptografi Cloud KMS menyertakan pemeriksaan otomatis untuk kerusakan data. Jika kerusakan terdeteksi, operasi akan dibatalkan dan error mendetail akan dicatat.

Perlindungan otomatis ini penting, tetapi tidak mencegah kerusakan data sisi klien. Misalnya, kerusakan data selama enkripsi dapat menyebabkan data yang tidak dapat didekripsi.

Topik ini membahas cara mendeteksi dan mencegah kerusakan data sisi klien untuk meminimalkan risiko kehilangan data.

Menghitung dan memverifikasi {i>checksum<i}

Setiap permintaan dan respons operasi kriptografi menyertakan kolom checksum CRC32C, seperti plaintext_crc32c. Anda dapat menghitung {i>checksum<i} dan membandingkan nilai yang dihitung dan dikembalikan.

Di server, Cloud Key Management Service API menetapkan kolom boolean, seperti verified_plaintext_crc32c, ke true untuk menunjukkan bahwa kolom telah menerima checksum yang relevan, dan menampilkan error INVALID_ARGUMENT jika checksum tidak cocok dengan nilai yang dihitung oleh server.

Ingatlah panduan berikut saat menghitung dan membandingkan checksum:

  • Menghitung checksum, menggunakan encoding biner, segera setelah data dikirim atau diterima.
  • Jangan menyimpan checksum teks biasa yang tidak dienkripsi ke atau dari Cloud Key Management Service API. Misalnya, jangan simpan konten kolom EncryptRequest.plaintext_crc32c atau DecryptResponse.plaintext_crc32c yang tidak dienkripsi. Untuk menyimpan catatan checksum, lakukan serialisasi bersama dengan data yang relevan dan teruskan objek gabungan ke Cloud KMS untuk dienkripsi. Saat mendekripsi data, Anda dapat memverifikasi checksum terhadap nilai perkiraan yang telah dihitung.
  • Jika operasi dekripsi menghasilkan checksum yang tidak cocok, desain aplikasi Anda untuk mencoba kembali operasi tersebut beberapa kali, jika terjadi masalah sementara.
  • Jika operasi enkripsi menghasilkan checksum yang tidak cocok untuk data terenkripsi (ciphertext), hapus hasil yang dienkripsi dan coba lagi.

Untuk permintaan enkripsi:

  • Jika Anda menyertakan kolom checksum dalam permintaan, server akan menetapkan kolom verifikasi terkait dalam respons terhadap true untuk menunjukkan bahwa checksum telah diterima dan mencoba memverifikasi nilainya.

  • Jika Anda menyertakan kolom checksum, tetapi respons menetapkan kolom verifikasi ke false, server tidak menerima kolom checksum, dan informasi lainnya mungkin tidak ada dalam respons. Coba lagi permintaan tersebut beberapa kali jika error bersifat sementara.

  • Jika checksum diterima tetapi tidak cocok, error INVALID_ARGUMENT akan ditampilkan. Error ini mencakup nama kolom dan checksum yang tidak cocok. Contoh:

    The checksum in field plaintext_crc32c did not match the data in field plaintext.
    

    Coba lagi permintaan tersebut beberapa kali jika error bersifat sementara.

Untuk permintaan dekripsi, Anda dapat menghitung checksum dan membandingkannya dengan nilai DecryptResponse.plaintext_crc32c dalam respons.

Kolom checksum berikut disertakan dalam permintaan ke dan respons dari Cloud Key Management Service API.

Kolom dalam permintaan Kolom dalam respons
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
GetPublicKeyRequest.pem_crc32c GetPublicKeyResponse.verified_pem_crc32c
Tidak berlaku DecryptResponse.plaintext_crc32c
MacSignRequest.data_crc32c MacSignResponse.verified_data_crc32c
MacVerifyRequest.data_crc32c MacVerifyResponse.verified_data_crc32c
MacVerifyRequest.mac_crc32c MacVerifyResponse.verified_mac_crc32c
Tidak berlaku MacVerifyResponse.verified_success_integrity

Memverifikasi nama resource

Respons untuk Encrypt, GetPublicKey, AsymmetricSign, MacSign, dan MacVerify, menyertakan kolom name yang berisi nama objek Cloud Key Management Service API yang relevan. Anda dapat membandingkan nilai kolom name dengan nilai yang diharapkan, dan menghapus hasil yang tidak cocok.

Diagram verifikasi data

Diagram ini menunjukkan kapan harus memverifikasi setiap jenis data yang terkait dengan operasi kriptografi, dan kapan harus memverifikasi data dari setiap jenis sumber. Anda juga dapat melihat ringkasan kolom verifikasi data.

Diagram yang menunjukkan kolom verifikasi data yang berbeda dan tindakan yang terkait

Ringkasan kolom verifikasi data

Gunakan tabel ini saat mendesain aplikasi Anda, untuk menentukan kolom mana yang dapat digunakan untuk memverifikasi data Anda sebelum dan sesudah setiap operasi kriptografi.

Enkripsikan

API Verifikasi input sisi server Verifikasi resource sisi klien Verifikasi output sisi klien Verifikasi sisi klien untuk input sisi server
EncryptRequest plaintext_crc32c, additional_authenticated_data_crc32c
EncryptResponse name ciphertext_crc32c verified_plaintext_crc32c, verified_additional_authenticated_data_crc32c

Dekripsi

API Verifikasi input sisi server Verifikasi resource sisi klien Verifikasi output sisi klien Verifikasi sisi klien untuk input sisi server
DecryptRequest ciphertext_crc32c, additional_authenticated_data_crc32c
DecryptResponse plaintext_crc32c

AsymmetricSign

API Verifikasi input sisi server Verifikasi resource sisi klien Verifikasi output sisi klien Verifikasi sisi klien untuk input sisi server
AsymmetricSignRequest digest_crc32c
AsymmetricSignResponse name signature_crc32c verified_digest_crc32c

AsymmetricDecrypt

API Verifikasi input sisi server Verifikasi resource sisi klien Verifikasi output sisi klien Verifikasi sisi klien untuk input sisi server
AsymmetricDecryptRequest ciphertext_crc32c
AsymmetricDecryptResponse plaintext_crc32c verified_ciphertext_crc32c

PublicKey

API Verifikasi input sisi server Verifikasi resource sisi klien Verifikasi output sisi klien Verifikasi sisi klien untuk input sisi server
PublicKey name pem_crc32c

MacSign

API Verifikasi input sisi server Verifikasi resource sisi klien Verifikasi output sisi klien Verifikasi sisi klien untuk input sisi server
MacSignRequest data_crc32c
MacSignResponse mac_crc32c verified_data_crc32c

MacVerify

API Verifikasi input sisi server Verifikasi resource sisi klien Verifikasi output sisi klien Verifikasi sisi klien untuk input sisi server
MacVerifyRequest data_crc32c mac_crc32c
MacVerifyResponse verified_data_crc32c verified_mac_crc32c verified_success_integrity

Langkah selanjutnya