Topik ini menunjukkan cara menggabungkan kunci secara manual sebelum mengimpor kunci ke Cloud KMS. Anda hanya perlu mengikuti petunjuk dalam topik ini jika tidak ingin menggunakan Google Cloud CLI untuk otomatis mengenkapsulasi kunci sebelum mengimpornya. Untuk ringkasan perbedaannya, lihat Cara kerja impor kunci.
Anda dapat menyelesaikan langkah-langkah dalam topik ini dalam waktu 5 hingga 10 menit, tidak termasuk langkah-langkah Sebelum Anda memulai.
Sebelum memulai
Sebelum Anda dapat mengenkapsulasi kunci, Anda harus menyelesaikan prasyarat berikut.
- Buat key ring dan kunci target, lalu buat tugas impor.
- Verifikasi bahwa kunci Anda tersedia secara lokal dan diformat dengan benar untuk diimpor ke Cloud KMS.
- Patch dan kompilasi ulang OpenSSL
Mengambil kunci penggabungan
Bagian ini menunjukkan cara mengambil kunci wrapping dari tugas impor yang Anda buat di Sebelum memulai. Sebaiknya gunakan konsol Google Cloud .
Konsol
Di konsol Google Cloud , buka halaman Key Management.
Klik nama key ring yang berisi tugas impor Anda.
Klik tab Pekerjaan Impor di bagian atas halaman.
Klik Lainnya more_vert, lalu Download kunci enkripsi di menu pop-up.
gcloud
Untuk memverifikasi bahwa tugas impor aktif, jalankan perintah
gcloud kms import-jobs describe:
gcloud kms import-jobs describe IMPORT_JOB \ --location LOCATION \ --keyring KEY_RING \ --format="value(state)"
state: ACTIVE
Jalankan perintah berikut untuk menyimpan kunci publik dari tugas impor ke
${HOME}/wrapping-key.pem
gcloud kms import-jobs describe \
--location=LOCATION \
--keyring=KEY_RING \
--format="value(publicKey.pem)" \
IMPORT_JOB > ${HOME}/wrapping-key.pem
REST
Panggil metode
ImportJob.get.Ambil kunci publik melalui kolom
publicKeyresponsImportJob.get. Nilai ini berjenisWrappingPublicKey. Kolompemdari jenisWrappingPublicKeyadalah kunci publik yang dienkode dalam format Privacy Enhanced Mail (PEM).
Untuk mengetahui informasi selengkapnya tentang format yang dienkode dengan PEM, lihat RFC 7468, terutama bagian General Considerations dan Textual Encoding of Subject Public Key Info.
Menyiapkan variabel lingkungan
Perintah OpenSSL memerlukan beberapa jalur file sebagai nilai input. Tentukan variabel lingkungan untuk jalur file agar lebih mudah menjalankan perintah. Pastikan Anda memiliki akses untuk menulis ke direktori yang Anda tentukan di bawah.
Tetapkan variabel
PUB_WRAPPING_KEYke jalur lengkap kunci pembungkus yang Anda download dari tugas impor. Kunci penggabungan berakhir di.pem.PUB_WRAPPING_KEY="WRAPPING_KEY_PATH"
Tetapkan variabel
TARGET_KEYke jalur lengkap ke kunci yang tidak di-wrap (target).TARGET_KEY="TARGET_KEY_PATH"
Ganti
TARGET_KEY_PATHdengan jalur ke file.binuntuk kunci simetris atau jalur ke file.deruntuk kunci asimetris.Jika menggabungkan dengan RSA-AES, tetapkan variabel
TEMP_AES_KEYke jalur lengkap ke kunci AES sementara.TEMP_AES_KEY=TEMP_AES_KEY_PATH
Tetapkan variabel
WRAPPED_KEYke jalur lengkap tempat Anda ingin menyimpan kunci target yang di-wrap yang siap diimpor.WRAPPED_KEY=WRAPPED_KEY_PATH
Pastikan semua variabel lingkungan ditetapkan dengan benar menggunakan perintah berikut:
echo "PUB_WRAPPING_KEY: " ${PUB_WRAPPING_KEY}; \ echo "TARGET_KEY: " ${TARGET_KEY}; \ echo "TEMP_AES_KEY: " ${TEMP_AES_KEY}; \ echo "WRAPPED_KEY: " ${WRAPPED_KEY}
Jika variabel sudah disetel dengan benar, Anda siap mengenkapsulasi kunci. Ada dua pendekatan seperti yang dijelaskan di bawah: dengan RSA saja atau dengan RSA-AES.
Gabungkan kunci
Menggabungkan kunci dengan RSA
Dalam pendekatan ini, kunci target digabungkan dalam blok RSA. Oleh karena itu, ukuran kunci target dibatasi. Misalnya, Anda tidak dapat menggunakan metode ini untuk mengenkapsulasi kunci RSA lain. Metode impor yang didukung adalah rsa-oaep-3072-sha256 dan
rsa-oaep-4096-sha256.
Gabungkan kunci target dengan kunci publik pelapis menggunakan algoritma
CKM_RSA_PKCS_OAEP:openssl pkeyutl \ -encrypt \ -pubin \ -inkey ${PUB_WRAPPING_KEY} \ -in ${TARGET_KEY} \ -out ${WRAPPED_KEY} \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256
Gabungkan kunci dengan RSA-AES
Dalam pendekatan ini, kunci target dienkripsi dengan kunci AES sementara. Kunci AES sementara kemudian digabungkan dengan kunci RSA. Kedua kunci yang di-wrap ini digabungkan dan diimpor. Karena kunci target digabungkan menggunakan AES, bukan RSA, pendekatan ini dapat digunakan untuk menggabungkan kunci berukuran besar. Metode impor yang didukung adalah rsa-oaep-3072-sha1-aes-256, rsa-oaep-4096-sha1-aes-256, rsa-oaep-3072-sha256-aes-256, dan rsa-oaep-4096-sha256-aes-256.
Buat kunci AES acak sementara yang panjangnya 32 byte, lalu simpan ke lokasi yang diidentifikasi oleh
${TEMP_AES_KEY}:openssl rand -out "${TEMP_AES_KEY}" 32Gabungkan kunci AES sementara dengan kunci publik pelapis menggunakan algoritma
CKM_RSA_PKCS_OAEP. Jika metode impor adalahrsa-oaep-3072-sha1-aes-256ataursa-oaep-4096-sha1-aes-256, gunakansha1untukrsa_oaep_mddanrsa_mgf1_md. Gunakansha256untukrsa-oaep-3072-sha256-aes-256danrsa-oaep-4096-sha256-aes-256.openssl pkeyutl \ -encrypt \ -pubin \ -inkey ${PUB_WRAPPING_KEY} \ -in ${TEMP_AES_KEY} \ -out ${WRAPPED_KEY} \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:{sha1|sha256} \ -pkeyopt rsa_mgf1_md:{sha1|sha256}Tetapkan variabel
OpenSSL_V110ke jalur skripopenssl.shAnda. Jika Anda mengikuti petunjuk untuk membuat patch dan mengompilasi ulang OpenSSL dengan tepat, Anda dapat menggunakan perintah ini tanpa mengubah nilai variabel.OPENSSL_V110="${HOME}/local/bin/openssl.sh"Gabungkan kunci target dengan kunci AES sementara menggunakan algoritma
CKM_AES_KEY_WRAP_PAD, lalu tambahkan keWRAPPED_KEY."${OPENSSL_V110}" enc \ -id-aes256-wrap-pad \ -iv A65959A6 \ -K $( hexdump -v -e '/1 "%02x"' < "${TEMP_AES_KEY}" ) \ -in "${TARGET_KEY}" >> "${WRAPPED_KEY}"Flag
-iv A65959A6menetapkan A65959A6 sebagai Nilai Awal Alternatif. Header ini diperlukan oleh spesifikasi RFC 5649.
Langkah berikutnya
- Kunci gabungan yang disimpan di
WRAPPED_KEYkini siap diimpor. Untuk mengimpor kunci, ikuti petunjuk di Mengimpor kunci yang digabungkan secara manual.