Topik ini menunjukkan cara melakukan operasi kunci simetris mentah berikut:
- Enkripsi konten teks atau teks biasa biner secara lokal atau menggunakan Cloud KMS.
- Mendekripsi ciphertext secara lokal atau menggunakan Cloud KMS.
Jika Anda ingin melakukan operasi kunci simetris reguler (non-raw), lihat Mengenkripsi dan mendekripsi data dengan kunci simetris.
Dengan enkripsi simetris mentah, Anda dapat mengenkripsi dan mendekripsi data secara lokal di infrastruktur lokal atau menggunakan Cloud KMS, serta memindahkan data terenkripsi antara library dan penyedia layanan yang berbeda tanpa harus mendekripsinya terlebih dahulu. Fungsionalitas ini bergantung pada kemampuan untuk mengakses kunci pada saat operasi. Jika ingin menggunakan ciphertext di luar Google Cloud, Anda harus menggunakan kunci yang diimpor karena kunci yang dihasilkan dalam Cloud KMS tidak dapat diekspor. Algoritma enkripsi ini menghasilkan teks tersandi standar yang dapat didekripsi oleh layanan dekripsi standar apa pun. Kami mendukung algoritma enkripsi simetris mentah berikut:
AES-128-GCM
AES-256-GCM
AES-128-CBC
AES-256-CBC
AES-128-CTR
AES-256-CTR
Perhatikan poin-poin berikut tentang algoritma enkripsi mentah ini:
AES-GCM
menyediakan autentikasi berdasarkan data tambahan yang diautentikasi (AAD) dan menghasilkan tag autentikasi, serta merupakan algoritma enkripsi yang direkomendasikan untuk digunakan. Data yang dienkripsi menggunakan algoritmaAES-GCM
tidak dapat didekripsi tanpa AAD yang disediakan.AES-CBC
memerlukan ukuran teks biasa dalam kelipatan ukuran blok (16 byte). Jika teks biasa bukan kelipatan dari ukuran blok, sisipkan teks biasa sebelum mengenkripsinya; jika tidak, operasi akan gagal dengan error yang menunjukkan masalahnya.AES-CBC
danAES-CTR
bukan skema enkripsi terautentikasi, yang berarti keduanya berisiko lebih besar mengalami penyalahgunaan yang tidak disengaja. API ini ditawarkan untuk mendukung kebutuhan lama dan interoperabilitas, serta harus digunakan dengan hati-hati. Untuk mencegah penyalahgunaan biasa, penggunaan algoritma enkripsi ini memerlukan izin IAM berikut:cloudkms.cryptoKeyVersions.manageRawAesCbcKeys
untukAES-CBC
.cloudkms.cryptoKeyVersions.manageRawAesCtrKeys
untukAES-CTR
.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk menggunakan enkripsi mentah, minta administrator untuk memberi Anda peran IAM berikut pada kunci Anda:
-
Untuk mengenkripsi saja:
Pengenkripsi Cloud KMS Bigtable (
roles/cloudkms.cryptoKeyEncrypter
) -
Hanya untuk mendekripsi:
Pendekripsi Cloud KMS Bigtable (
roles/cloudkms.cryptoKeyDecrypter
) -
Untuk mengenkripsi dan mendekripsi: Encrypter/Decrypter Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter
)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Peran tambahan untuk algoritma enkripsi mentah yang tidak diautentikasi
- Untuk menggunakan kunci
AES-CBC
: Cloud KMS Expert AES-CBC Key Manager (roles/cloudkms.expertRawAesCbc
) - Untuk menggunakan kunci
AES-CTR
: Cloud KMS Expert Raw AES-CTR Key Manager (roles/cloudkms.expertRawAesCtr
)
Sebelum memulai
- Memberikan izin enkripsi simetris mentah yang disebutkan kepada akun utama yang dimaksud.
- Buat key ring seperti yang dijelaskan dalam membuat key ring.
- Buat dan impor kunci enkripsi simetris mentah seperti yang dijelaskan dalam membuat kunci dan mengimpor kunci.
Enkripsikan
gcloud
Untuk menggunakan Cloud KMS di command line, Instal atau upgrade Google Cloud CLI ke versi terbaru terlebih dahulu.
gcloud kms raw-encrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --version KEY_VERSION \ --plaintext-file INPUT_FILE_PATH \ --ciphertext-file OUTPUT_FILE_PATH
Ganti kode berikut:
LOCATION
: lokasi Cloud KMS key ring.KEY_RING
: nama key ring yang berisi kunci.KEY_NAME
: nama kunci yang digunakan untuk enkripsi.KEY_VERSION
: ID versi kunci yang digunakan untuk enkripsi.INPUT_FILE_PATH
: jalur file lokal untuk membaca data teks biasa.OUTPUT_FILE_PATH
: jalur file lokal untuk menyimpan output terenkripsi.
Untuk mengetahui informasi tentang semua flag dan nilai yang memungkinkan, jalankan perintah dengan
flag --help
.
API
Contoh ini menggunakan curl sebagai klien HTTP untuk menunjukkan penggunaan API. Untuk informasi selengkapnya tentang kontrol akses, lihat Mengakses Cloud KMS API.
Saat menggunakan JSON dan REST API, konten harus dienkode dengan base64 sebelum dapat dienkripsi oleh Cloud KMS.
Gunakan metode rawEncrypt
untuk mengenkripsi data teks biasa:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawEncrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"plaintext": "BASE64_ENCODED_INPUT", "additionalAuthenticatedData": "BASE64_ENCODED_AAD"}'
Ganti kode berikut:
PROJECT_ID
: ID project yang berisi key ring.LOCATION
: lokasi Cloud KMS key ring.KEY_RING
: nama key ring yang berisi kunci.KEY_NAME
: nama kunci yang digunakan untuk enkripsi.KEY_VERSION
: ID versi kunci yang digunakan untuk enkripsi.BASE64_ENCODED_INPUT
: data teks biasa berenkode base64 yang ingin Anda enkripsi.BASE64_ENCODED_AAD
: data tambahan yang diautentikasi dan dienkode base64 yang digunakan untuk memberikan jaminan integritas dan keaslian. Kolom ini hanya berlaku untuk algoritmaAES-GCM
.
Output-nya adalah objek JSON yang berisi ciphertext terenkripsi dan vektor inisialisasi terkait sebagai string berenkode base64.
Dekripsi
gcloud
Untuk menggunakan Cloud KMS di command line, Instal atau upgrade Google Cloud CLI ke versi terbaru terlebih dahulu.
gcloud kms raw-decrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --version KEY_VERSION \ --ciphertext-file INPUT_FILE_PATH \ --plaintext-file OUTPUT_FILE_PATH
Ganti kode berikut:
LOCATION
: lokasi Cloud KMS key ring.KEY_RING
: nama key ring yang berisi kunci.KEY_NAME
: nama kunci yang digunakan untuk enkripsi.KEY_VERSION
: ID versi kunci yang digunakan untuk enkripsi.INPUT_FILE_PATH
: jalur file lokal ke ciphertext yang ingin Anda dekripsi.OUTPUT_FILE_PATH
: jalur file lokal tempat Anda ingin menyimpan teks biasa yang didekripsi.
Untuk mengetahui informasi tentang semua flag dan nilai yang memungkinkan, jalankan perintah dengan
flag --help
.
API
Contoh ini menggunakan curl sebagai klien HTTP untuk menunjukkan penggunaan API. Untuk informasi selengkapnya tentang kontrol akses, lihat Mengakses Cloud KMS API.
Saat menggunakan REST API, konten harus dienkode dengan base64 sebelum dapat didekripsi oleh Cloud KMS.
Untuk mendekripsi data terenkripsi, gunakan metode rawDecrypt
:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawDecrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"ciphertext": "BASE64_ENCODED_DATA", "additionalAuthenticatedData": "BASE64_ENCODED_AAD", "initializationVector": "BASE64_ENCODED_IV"}'
Ganti kode berikut:
PROJECT_ID
: ID project yang berisi key ring.LOCATION
: lokasi Cloud KMS key ring.KEY_RING
: nama key ring yang berisi kunci.KEY_NAME
: nama kunci yang digunakan untuk dekripsi.KEY_VERSION
: ID versi kunci yang akan digunakan untuk dekripsi.BASE64_ENCODED_DATA
: ciphertext berenkode base64 yang ingin Anda dekripsi.BASE64_ENCODED_AAD
: data autentikasi tambahan berenkode base64 yang digunakan saat data dienkripsi. Kolom ini hanya berlaku untuk algoritmaAES-GCM
.BASE64_ENCODED_IV
: vektor inisialisasi berenkode base64 yang digunakan saat data dienkripsi.
Output-nya adalah objek JSON yang berisi teks biasa yang didekripsi sebagai string berenkode base64.
Langkah selanjutnya
- Baca selengkapnya tentang cara mengimpor versi kunci
- Baca selengkapnya tentang enkripsi amplop.
- Coba Enkripsi dan dekripsi data dengan Cloud KMS Codelab.