Enkripsi simetris mentah

Topik ini menunjukkan cara melakukan operasi kunci simetris mentah berikut:

  • Mengenkripsi konten teks atau biner plaintext secara lokal atau menggunakan Cloud KMS.
  • Mendekripsi ciphertext secara lokal atau menggunakan Cloud KMS.

Jika Anda ingin melakukan operasi kunci simetris reguler (non-mentah), lihat Mengenkripsi dan mendekripsi data dengan kunci simetris.

Enkripsi simetris mentah memungkinkan Anda mengenkripsi dan mendekripsi data secara lokal di tempat atau menggunakan Cloud KMS, serta memindahkan data terenkripsi antar-library dan penyedia layanan yang berbeda tanpa harus mendekripsinya terlebih dahulu. Fungsi ini bergantung pada kemampuan untuk mengakses kunci pada titik operasi. Jika ingin menggunakan ciphertext di luar Google Cloud, Anda harus menggunakan kunci yang diimpor karena kunci yang dibuat di Cloud KMS tidak dapat di ekspor. Algoritma enkripsi ini menghasilkan ciphertext standar yang dapat didekripsi oleh layanan dekripsi standar. 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 terautentikasi tambahan (AAD) dan menghasilkan tag autentikasi, serta merupakan algoritma enkripsi yang direkomendasikan untuk digunakan. Data yang dienkripsi menggunakan algoritma AES-GCM tidak dapat didekripsi tanpa AAD yang disediakan.

  • AES-CBC mengharuskan ukuran plaintext menjadi kelipatan ukuran blok (16 byte). Jika plaintext bukan kelipatan ukuran blok, tambahkan plaintext sebelum mengenkripsinya. Jika tidak, operasi akan gagal dengan error yang menunjukkan masalah tersebut.

  • AES-CBC dan AES-CTR bukan skema enkripsi terautentikasi, yang berarti keduanya dapat menimbulkan risiko penyalahgunaan yang tidak disengaja yang lebih besar. Keduanya 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 untuk AES-CBC.
    • cloudkms.cryptoKeyVersions.manageRawAesCtrKeys untuk AES-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 mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

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: Pengelola Kunci AES-CBC Mentah Pakar Cloud KMS (roles/cloudkms.expertRawAesCbc)
  • Untuk menggunakan kunci AES-CTR: Pengelola Kunci AES-CTR Mentah Pakar Cloud KMS (roles/cloudkms.expertRawAesCtr)

Sebelum memulai

  • Berikan izin enkripsi simetris mentah yang disebutkan kepada principal yang dituju.
  • 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.

Enkripsi

gcloud

Untuk menggunakan Cloud KMS di command line, pertama-tama Instal atau upgrade ke versi terbaru Google Cloud CLI.

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 akan digunakan untuk enkripsi.

  • KEY_VERSION: ID versi kunci yang akan digunakan untuk enkripsi.

  • INPUT_FILE_PATH: jalur file lokal untuk membaca data plaintext.

  • OUTPUT_FILE_PATH: jalur file lokal untuk menyimpan output terenkripsi.

Untuk mengetahui informasi tentang semua flag dan nilai yang mungkin, jalankan perintah dengan flag --help.

API

Contoh ini menggunakan curl sebagai klien HTTP untuk menunjukkan penggunaan API. Untuk mengetahui informasi selengkapnya tentang kontrol akses, lihat Mengakses Cloud KMS API.

Saat menggunakan JSON dan REST API, konten harus dienkode base64 sebelum dapat dienkripsi oleh Cloud KMS.

Gunakan metode rawEncrypt untuk mengenkripsi data plaintext:

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 akan digunakan untuk enkripsi.
  • KEY_VERSION: ID versi kunci yang akan digunakan untuk enkripsi.
  • BASE64_ENCODED_INPUT: data plaintext berenkode base64 yang ingin Anda enkripsi.
  • BASE64_ENCODED_AAD: data terautentikasi tambahan berenkode base64 yang digunakan untuk memberikan jaminan integritas dan autentisitas. Kolom ini hanya berlaku untuk algoritma AES-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, pertama-tama Instal atau upgrade ke versi terbaru Google Cloud CLI.

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 akan digunakan untuk enkripsi.

  • KEY_VERSION: ID versi kunci yang akan 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 plaintext yang didekripsi.

Untuk mengetahui informasi tentang semua flag dan nilai yang mungkin, jalankan perintah dengan flag --help.

API

Contoh ini menggunakan curl sebagai klien HTTP untuk menunjukkan penggunaan API. Untuk mengetahui informasi selengkapnya tentang kontrol akses, lihat Mengakses Cloud KMS API.

Saat menggunakan REST API, konten harus dienkode 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 akan 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 terautentikasi tambahan berenkode base64 yang digunakan saat data dienkripsi. Kolom ini hanya berlaku untuk algoritma AES-GCM.
  • BASE64_ENCODED_IV: vektor inisialisasi berenkode base64 yang digunakan saat data dienkripsi.

Output-nya adalah objek JSON yang berisi plaintext yang didekripsi sebagai string berenkode base64.

Langkah berikutnya