Memverifikasi integritas data menyeluruh

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

Perlindungan data otomatis

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

Cloud KMS mengambil langkah-langkah tambahan untuk melindungi kunci enkripsi saat tidak aktif dengan mengenkripsi setiap kunci enkripsi menggunakan kunci kriptografi lain yang disebut kunci enkripsi kunci (KEK). Untuk mempelajari teknik ini lebih lanjut, lihat enkripsi amplop.

Setiap operasi kriptografi Cloud KMS mencakup pemeriksaan otomatis untuk mendeteksi 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 tidak dapat didekripsi.

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

Menghitung dan memverifikasi checksum

Permintaan dan respons setiap operasi kriptografi mencakup kolom checksum CRC32C, seperti plaintext_crc32c. Anda dapat menghitung checksum dan membandingkan nilai yang dihitung dan ditampilkan.

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

Perhatikan panduan berikut saat menghitung dan membandingkan checksum:

  • Hitung 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 menyimpan konten kolom EncryptRequest.plaintext_crc32c atau DecryptResponse.plaintext_crc32c yang tidak dienkripsi. Untuk menyimpan catatan checksum, serialisasikan bersama data yang relevan dan teruskan objek gabungan ke Cloud KMS untuk dienkripsi. Saat mendekripsi data, Anda dapat memverifikasi checksum terhadap nilai yang diharapkan yang dihitung.
  • Jika operasi dekripsi menghasilkan checksum yang tidak cocok, rancang aplikasi Anda untuk mencoba ulang operasi beberapa kali, jika terjadi masalah sementara.
  • Jika operasi enkripsi menghasilkan checksum yang tidak cocok untuk data terenkripsi (ciphertext), hapus hasil terenkripsi dan coba lagi.

Untuk permintaan enkripsi:

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

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

  • Jika checksum diterima tetapi tidak cocok, error INVALID_ARGUMENT akan ditampilkan. Error 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 beberapa kali jika terjadi error 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
Tidak berlaku GetPublicKeyResponse.pem_crc32c
Tidak berlaku GetPublicKeyResponse.public_key.crc32c_checksum
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
DecapsulateRequest.ciphertext_crc32c DecapsulateResponse.verified_ciphertext_crc32c
Tidak berlaku DecapsulateResponse.shared_secret_crc32c

Memverifikasi nama resource

Respons untuk Encrypt, GetPublicKey, AsymmetricSign, AsymmetricDecrypt, Decapsulate, MacSign, dan MacVerify, mencakup kolom name yang berisi nama objek Cloud Key Management Service API yang relevan. Anda dapat membandingkan nilai kolom name dengan nilai yang Anda harapkan, 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 berbagai kolom verifikasi data dan tindakan yang sesuai

Ringkasan kolom verifikasi data

Gunakan tabel ini saat mendesain aplikasi Anda, untuk menentukan kolom mana yang dapat Anda gunakan untuk memverifikasi data Anda sebelum dan setelah 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

Mendekripsi

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

Mengekstrak

API Verifikasi input sisi server Verifikasi resource sisi klien Verifikasi output sisi klien Verifikasi sisi klien untuk input sisi server
DecapsulateRequest ciphertext_crc32c
DecapsulateResponse shared_secret_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, public_key.crc32c_checksum

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 berikutnya