Topik ini memberikan informasi tentang cara membuat dan menggunakan kunci untuk enkripsi asimetris menggunakan kunci RSA. Jika Anda ingin menggunakan kunci asimetris untuk membuat dan memvalidasi tanda tangan, lihat Membuat dan memvalidasi tanda tangan digital. Jika Anda ingin menggunakan kunci simetris untuk enkripsi dan dekripsi, lihat Mengenkripsi dan mendekripsi data.
Enkripsi asimetris menggunakan bagian kunci publik dari kunci asimetris, sedangkan dekripsi menggunakan bagian kunci pribadi dari kunci tersebut. Cloud Key Management Service menyediakan fungsi untuk mengambil kunci publik dan fungsi untuk mendekripsi ciphertext yang dienkripsi dengan kunci publik. Cloud KMS tidak mengizinkan akses langsung ke kunci pribadi.
Sebelum memulai
Topik ini memberikan contoh yang dijalankan di command line. Untuk menyederhanakan menggunakan contoh ini, gunakan Cloud Shell. Contoh enkripsi menggunakan OpenSSL, yang telah terinstal di Cloud Shell.
Buat kunci asimetris dengan tujuan utama
ASYMMETRIC_DECRYPT
. Guna melihat algoritma yang didukung untuk tujuan kunciASYMMETRIC_DECRYPT
, lihat Algoritma enkripsi asimetris. Anda tidak dapat mengikuti prosedur ini dengan kunci dengan tujuanASYMMETRIC_SIGN
.Jika Anda akan menggunakan command line, instal OpenSSL jika Anda belum memilikinya. Jika Anda menggunakan Cloud Shell, berarti OpenSSL sudah terinstal.
- Pengguna macOS: Versi OpenSSL yang diinstal di macOS tidak mendukung tanda yang digunakan untuk mendekripsi data dalam topik ini. Untuk mengikuti langkah-langkah ini di macOS, instal OpenSSL dari Homebrew.
Kontrol akses ke kunci
Untuk pengguna atau layanan yang akan mengambil kunci publik, berikan izin
cloudkms.cryptoKeyVersions.viewPublicKey
pada kunci asimetris. Kunci publik diperlukan untuk mengenkripsi data.Untuk pengguna atau layanan yang akan mendekripsi data yang dienkripsi dengan kunci publik, berikan izin
cloudkms.cryptoKeyVersions.useToDecrypt
pada kunci asimetris.
Pelajari izin dan peran di Cloud KMS di bagian Izin dan Peran.
Mengenkripsi data
Untuk mengenkripsi data menggunakan kunci enkripsi asimetris, ambil kunci publik dan gunakan kunci publik untuk mengenkripsi data.
gcloud
Contoh ini memerlukan OpenSSL untuk diinstal di sistem lokal Anda.
Download kunci publik
Download kunci publik:
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file public-key-path
Ganti key-version dengan versi kunci yang memiliki kunci publik. Ganti key dengan nama kunci. Ganti key-ring dengan nama key ring tempat kunci tersebut berada. Ganti location dengan lokasi Cloud KMS untuk key ring. Ganti public-key-path dengan lokasi untuk menyimpan kunci publik di sistem lokal.
Mengenkripsi data
Enkripsi data menggunakan kunci publik yang baru saja Anda download dan simpan outputnya ke file:
openssl pkeyutl -in cleartext-data-input-file \ -encrypt \ -pubin \ -inkey public-key-path \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256 \ > encrypted-data-output-file
Ganti cleartext-data-input-file dengan jalur dan nama file yang akan dienkripsi.
Ganti public-key-path dengan jalur dan nama file tempat Anda mendownload kunci publik.
Ganti encrypted-data-output-file dengan jalur dan nama file untuk menyimpan data yang dienkripsi.
C#
Untuk menjalankan kode ini, siapkan lingkungan pengembangan C# terlebih dahulu lalu instal Cloud KMS C# SDK.
Go
Untuk menggunakan Cloud KMS di command line, Instal atau upgrade Google Cloud CLI ke versi terbaru terlebih dahulu.
Java
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Java terlebih dahulu dan instal Java SDK Cloud KMS.
Node.js
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Node.js terlebih dahulu, lalu instal Node.js SDK Cloud KMS.
PHP
Untuk menjalankan kode ini, pelajari cara menggunakan PHP di Google Cloud terlebih dahulu dan instal PHP SDK Cloud KMS.
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu lalu instal Cloud KMS Python SDK.
Ruby
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Ruby terlebih dahulu dan instal Ruby SDK Cloud KMS.
Mendekripsi data
Gunakan Cloud KMS untuk melakukan dekripsi.
gcloud
Untuk menggunakan Cloud KMS di command line, Instal atau upgrade Google Cloud CLI ke versi terbaru terlebih dahulu.
gcloud kms asymmetric-decrypt \ --version key-version \ --key key \ --keyring key-ring \ --location location \ --ciphertext-file file-path-with-encrypted-data \ --plaintext-file file-path-to-store-plaintext
Ganti key-version dengan versi kunci, atau hapus flag --version
untuk mendeteksi versi secara otomatis. Ganti key dengan nama
kunci yang akan digunakan untuk dekripsi. Ganti key-ring dengan nama
key ring tempat kunci akan berada. Ganti location dengan lokasi Cloud KMS untuk key ring. Ganti
file-path-with-encrypted-data dan file-path-to-store-plaintext
dengan jalur file lokal untuk membaca data terenkripsi dan menyimpan output
yang didekripsi.
Untuk mengetahui informasi tentang semua tanda dan nilai yang memungkinkan, jalankan perintah dengan
tanda --help
.
Untuk menampilkan konten file yang didekripsi, buka file tersebut di editor atau
terminal Anda. Berikut adalah contoh yang menampilkan konten file menggunakan perintah
cat
:
cat ./my-file.txt
C#
Untuk menjalankan kode ini, siapkan lingkungan pengembangan C# terlebih dahulu lalu instal Cloud KMS C# SDK.
Go
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu lalu instal Cloud KMS Go SDK.
Java
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Java terlebih dahulu dan instal Java SDK Cloud KMS.
Node.js
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Node.js terlebih dahulu, lalu instal Node.js SDK Cloud KMS.
PHP
Untuk menjalankan kode ini, pelajari cara menggunakan PHP di Google Cloud terlebih dahulu dan instal PHP SDK Cloud KMS.
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu lalu instal Cloud KMS Python SDK.
Ruby
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Ruby terlebih dahulu dan instal Ruby SDK Cloud KMS.
API
Contoh ini menggunakan curl sebagai klien HTTP untuk menunjukkan penggunaan API. Untuk informasi selengkapnya tentang kontrol akses, lihat Mengakses Cloud KMS API.
Gunakan
metode
CryptoKeyVersions.asymmetricDecrypt
.
Pemecahan masalah
incorrect key purpose: ASYMMETRIC_SIGN
Anda hanya dapat mendekripsi data dengan kunci dengan tujuan kunci ASYMMETRIC_DECRYPT
.
invalid parameter
saat mendekripsi di macOS
Versi OpenSSL yang diinstal di macOS tidak mendukung tanda yang digunakan untuk mendekripsi data dalam topik ini. Untuk mengikuti langkah-langkah ini di macOS, instal OpenSSL dari Homebrew.
data too large for key size
Ukuran payload maksimum untuk dekripsi RSA bergantung pada ukuran kunci dan algoritma
padding. Semua format enkripsi RSA yang digunakan oleh Cloud KMS menggunakan OAEP, yang distandardisasi dalam RFC 2437. Sebagai referensi cepat, algoritma berikut mendukung ukuran payload maksimum berikut (maxMLen
, dalam byte):
Algoritma | Parameter | Panjang maksimum pesan |
---|---|---|
RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | maxMLen = 190 |
RSA_DECRYPT_OAEP_3072_SHA256 | k = 384; hLen = 32; | maxMLen = 318 |
RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | maxMLen = 446 |
RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | maxMLen = 382 |
Enkripsi asimetris tidak disarankan untuk pesan dengan panjang bervariasi yang mungkin lebih besar dari batas ini. Pertimbangkan untuk menggunakan enkripsi hybrid. Tink adalah library kriptografi yang menggunakan pendekatan ini.