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 berpindah antara sistem klien dan Cloud KMS. Panduan ini melengkapi cara Google Cloud otomatis melindungi data Anda dalam penyimpanan dan saat transit.

Perlindungan data otomatis

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

Cloud KMS melakukan langkah tambahan untuk melindungi kunci enkripsi saat nonaktif 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 kriptografis Cloud KMS menyertakan pemeriksaan otomatis untuk kerusakan data. Jika kerusakan terdeteksi, operasi akan dibatalkan dan error mendetail akan dicatat ke dalam log.

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 checksum

Setiap permintaan dan respons operasi kriptografis menyertakan 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:

  • 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 yang tidak dienkripsi dari kolom EncryptRequest.plaintext_crc32c atau DecryptResponse.plaintext_crc32c. Untuk menyimpan catatan checksum, serialisasi bersama dengan data yang relevan dan teruskan objek gabungan ke Cloud KMS untuk dienkripsi. Saat mendekode data, Anda dapat memverifikasi checksum terhadap nilai yang diharapkan yang 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 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 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 lainnya mungkin tidak ada dalam respons. Coba ulang permintaan 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 ulang permintaan 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
Tidak berlaku GetPublicKeyResponse.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 Anda harapkan, dan menghapus hasil yang tidak cocok.

Diagram verifikasi data

Diagram ini menunjukkan kapan harus memverifikasi setiap jenis data yang terkait dengan operasi kriptografis 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, untuk menentukan kolom mana yang dapat Anda gunakan untuk memverifikasi data 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