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