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 dan dekripsi menggunakan bagian kunci pribadi dari kunci. 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 berjalan di command line. Untuk menyederhanakan penggunaan contoh, gunakan Cloud Shell. Contoh enkripsi menggunakan OpenSSL, yang sudah diinstal sebelumnya di Cloud Shell.
Buat kunci asimetris dengan tujuan kunci
ASYMMETRIC_DECRYPT
. Untuk melihat algoritma yang didukung untuk tujuan kunciASYMMETRIC_DECRYPT
, lihat Algoritma enkripsi asimetris. Anda tidak dapat mengikuti prosedur ini dengan kunci yang tujuannya adalahASYMMETRIC_SIGN
.Jika Anda akan menggunakan command line, instal OpenSSL jika Anda belum memilikinya. Jika Anda menggunakan Cloud Shell, OpenSSL sudah diinstal.
- Pengguna macOS: Versi OpenSSL yang diinstal di macOS tidak mendukung flag 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 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.
Mendownload 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 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 output 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 terenkripsi.
C#
Untuk menjalankan kode ini, siapkan lingkungan pengembangan C# terlebih dahulu dan instal Cloud KMS C# SDK.
Go
Untuk menggunakan Cloud KMS di command line, pertama-tama Instal atau upgrade ke Google Cloud CLI versi terbaru.
Java
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Java terlebih dahulu dan instal Cloud KMS Java SDK.
Node.js
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Node.js terlebih dahulu dan instal Cloud KMS Node.js SDK.
PHP
Untuk menjalankan kode ini, pelajari terlebih dahulu cara menggunakan PHP di Google Cloud dan menginstal Cloud KMS PHP SDK.
Python
Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Python dan instal Cloud KMS Python SDK.
Ruby
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Ruby terlebih dahulu, lalu instal Cloud KMS Ruby SDK.
Mendekripsi data
Gunakan Cloud KMS untuk melakukan dekripsi.
gcloud
Untuk menggunakan Cloud KMS di command line, pertama-tama Instal atau upgrade ke Google Cloud CLI versi terbaru.
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 tanda --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 flag dan kemungkinan nilai, jalankan perintah dengan
flag --help
.
Untuk menampilkan konten file yang didekripsi, buka file tersebut di editor atau
terminal. 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 dan 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 Cloud KMS Java SDK.
Node.js
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Node.js terlebih dahulu dan instal Cloud KMS Node.js SDK.
PHP
Untuk menjalankan kode ini, pelajari terlebih dahulu cara menggunakan PHP di Google Cloud dan menginstal Cloud KMS PHP SDK.
Python
Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Python dan instal Cloud KMS Python SDK.
Ruby
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Ruby terlebih dahulu, lalu instal Cloud KMS Ruby SDK.
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 yang memiliki tujuan kunci ASYMMETRIC_DECRYPT
.
invalid parameter
saat mendekripsi di macOS
Versi OpenSSL yang diinstal di macOS tidak mendukung flag 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 distandarisasi dalam
RFC 2437. Sebagai
referensi cepat, algoritma berikut mendukung ukuran payload maksimum
berikut (maxMLen
, dalam byte):
Algoritma | Parameter | Panjang pesan maksimum |
---|---|---|
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 direkomendasikan untuk pesan dengan panjang bervariasi yang mungkin lebih besar dari batas ini. Sebaiknya gunakan enkripsi campuran. Tink adalah library kriptografis yang menggunakan pendekatan ini.