Mengenkapsulasi dan mendekapsulasi menggunakan KEM

Dokumen ini menjelaskan penggunaan mekanisme enkapsulasi kunci (KEM) dengan kunci Cloud KMS untuk membuat secret bersama.

Enkapsulasi menggunakan kunci publik pasangan kunci KEM, dan dekapsulasi menggunakan kunci pribadi pasangan kunci. Cloud KMS memungkinkan Anda mengambil kunci publik, yang kemudian dapat Anda gunakan dengan library standar untuk mengenkapsulasi rahasia bersama Anda. Untuk mendekapsulasi rahasia bersama, gunakan metode dekapsulasi Cloud KMS. Anda tidak dapat menggunakan materi kunci pribadi di luar Cloud KMS.

Sebelum memulai

  • Dokumen ini memberikan contoh yang berjalan di command line. Untuk menyederhanakan penggunaan contoh, gunakan Cloud Shell. Contoh enkripsi menggunakan OpenSSL, yang sudah diinstal sebelumnya di Cloud Shell. Jika tidak, instal OpenSSL di komputer Anda.
  • Buat kunci KEM dengan tujuan kunci KEY_ENCAPSULATION. Untuk melihat algoritma yang didukung untuk tujuan kunci KEY_ENCAPSULATION, lihat algoritma enkapsulasi kunci.

Memberikan izin pada kunci

  • Berikan peran roles/cloudkms.publicKeyViewer pada kunci kepada setiap pengguna atau akun utama yang harus mengambil kunci publik untuk mengenkapsulasi rahasia.
  • Berikan peran 'roles/cloudkms.decapsulator' pada kunci kepada setiap pengguna atau akun utama yang harus mendekapsulasi rahasia dengan kunci ini.

Untuk mengetahui informasi selengkapnya tentang izin dan peran di Cloud KMS, lihat Izin dan Peran.

Enkapsulasi

Untuk melakukan enkapsulasi menggunakan kunci KEM, ambil kunci publik dan gunakan kunci publik untuk melakukan enkapsulasi.

gcloud

Contoh ini mengharuskan OpenSSL diinstal di sistem lokal Anda.

Download kunci publik

gcloud kms keys versions get-public-key KEY_VERSION \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION  \
    --output-file PUBLIC_KEY_FILE \
    --public-key-format PUBLIC_KEY_FORMAT

Ganti kode berikut:

  • KEY_VERSION: Nomor versi kunci yang ingin Anda gunakan untuk enkapsulasi—misalnya, 2.
  • KEY_NAME: Nama kunci yang ingin Anda gunakan untuk enkapsulasi.
  • KEY_RING: nama key ring yang berisi kunci.
  • LOCATION: lokasi Cloud KMS key ring.
  • PUBLIC_KEY_FILE: Jalur file lokal tempat kunci publik akan disimpan.
  • PUBLIC_KEY_FORMAT: Format target untuk kunci publik—misalnya, nist-pqc. Format default-nya adalah pem.

Enkapsulasi

Untuk membuat secret dan ciphertext bersama, Anda dapat menggunakan perintah berikut:

openssl pkeyutl \
    -encap \
    -pubin \
    -inkey PEM_PUBLIC_KEY_FILE \
    -out CIPHERTEXT_FILE \
    -secret SHARED_SECRET_FILE

Ganti kode berikut:

  • PEM_PUBLIC_KEY_FILE: Jalur ke file kunci publik yang didownload dalam format PEM.
  • CIPHERTEXT_FILE: Jalur tempat Anda ingin menyimpan ciphertext yang dihasilkan.
  • SHARED_SECRET_FILE: Jalur tempat Anda ingin menyimpan secret bersama yang dihasilkan.
{ echo -n "MIIEsjALBglghkgBZQMEBAIDggShAA==" | base64 -d ; cat PUBLIC_KEY_FILE; } | \
openssl pkey -inform DER -pubin -pubout -out PEM_PUBLIC_KEY_FILE

Ganti kode berikut:

  • PUBLIC_KEY_FILE: Jalur ke file kunci publik yang didownload dalam format mentah.
  • PEM_PUBLIC_KEY_FILE: Jalur dan nama file untuk menyimpan kunci publik dalam format PEM.

Pelepasan kapsul

Gunakan Cloud KMS untuk mendekapsulasi ciphertext.

gcloud

Untuk menggunakan Cloud KMS di command line, Instal atau upgrade ke versi terbaru Google Cloud CLI terlebih dahulu.

gcloud kms decapsulate \
    --version KEY_VERSION \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION  \
    --ciphertext-file CIPHERTEXT_FILE \
    --shared-secret-file SHARED_SECRET_FILE

Ganti kode berikut:

  • KEY_VERSION: versi kunci yang akan digunakan untuk dekapsulasi—misalnya, 3.
  • KEY_NAME: nama kunci yang akan digunakan untuk dekapsulasi.
  • KEY_RING: nama key ring tempat kunci berada.
  • LOCATION: lokasi Cloud KMS untuk key ring.
  • CIPHERTEXT_FILE: jalur file lokal untuk ciphertext input.
  • SHARED_SECRET_FILE: jalur file lokal untuk menyimpan secret bersama output.

API

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

Gunakan metode CryptoKeyVersions.decapsulate.

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:decapsulate" \
  --request "POST" \
  --header "authorization: Bearer TOKEN" \
  --header "content-type: application/json" \
  --data '{"ciphertext": "CIPHERTEXT"}'

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
  • CIPHERTEXT: ciphertext berenkode base64 yang ingin Anda dekapsulasi.