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 kunciKEY_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 adalahpem
.
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 enkripsiCIPHERTEXT
: ciphertext berenkode base64 yang ingin Anda dekapsulasi.