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
atauDecryptResponse.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.
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
- Pelajari lebih lanjut enkripsi simetris dan asimetris
- Pelajari lebih lanjut cara mengenkripsi data aplikasi
- Menggunakan Cloud Audit Logs