Dokumen 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 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
Dokumen ini memberikan contoh yang berjalan di command line. Untuk menyederhanakan penggunaan contoh, gunakan Cloud Shell. Contoh enkripsi menggunakan OpenSSL, yang telah 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 memiliki tujuanASYMMETRIC_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.
Mengontrol akses ke kunci
Untuk pengguna atau layanan yang akan mengambil kunci publik, berikan izin
cloudkms.cryptoKeyVersions.viewPublicKeypada 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.useToDecryptpada kunci asimetris.
Untuk mengetahui informasi selengkapnya tentang izin dan peran di Cloud KMS, lihat 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 mengharuskan OpenSSL diinstal di sistem lokal Anda.
Download kunci publik
Download kunci publik:
gcloud kms keys versions get-public-key KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--output-file PUBLIC_KEY_PATH
Ganti kode berikut:
KEY_VERSION: versi kunci dari pasangan kunci asimetris yang ingin Anda download kunci publiknya.KEY_NAME: nama kunci.KEY_RING: key ring yang berisi kunci.LOCATION: lokasi key ring.PUBLIC_KEY_PATH: jalur tempat Anda ingin menyimpan kunci publik.
Mengenkripsi data
Enkripsi data menggunakan kunci publik yang baru saja Anda download dan simpan outputnya ke file:
openssl pkeyutl -in INPUT_PATH \
-encrypt \
-pubin \
-inkey PUBLIC_KEY_PATH \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:HASH_SIZE \
-pkeyopt rsa_mgf1_md:HASH_SIZE \
> OUTPUT_PATH
Ganti kode berikut:
INPUT_PATH: jalur ke data teks biasa yang ingin Anda enkripsi.PUBLIC_KEY_PATH: jalur ke kunci publik.HASH_SIZE: ukuran hash—misalnya,256untuk SHA256.OUTPUT_PATH: jalur tempat Anda ingin menyimpan data terenkripsi.
C#
Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan C# 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, pertama-tama siapkan lingkungan pengembangan Java dan instal Cloud KMS Java SDK.
Node.js
Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Node.js dan instal Cloud KMS Node.js SDK.
PHP
Untuk menjalankan kode ini, pelajari terlebih dahulu cara menggunakan PHP di Google Cloud dan instal 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, pertama-tama siapkan lingkungan pengembangan Ruby dan 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_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file INPUT_PATH \
--plaintext-file OUTPUT_PATH
Ganti kode berikut:
KEY_VERSION: versi kunci dari pasangan kunci asimetris yang digunakan untuk mengenkripsi data. Anda dapat menghilangkan flag--versionuntuk mendeteksi versi secara otomatis.KEY_NAME: nama kunci yang digunakan untuk mengenkripsi data.KEY_RING: nama key ring yang berisi kunci.LOCATION: lokasi key ring.INPUT_PATH: jalur ke file yang berisi ciphertext.OUTPUT_PATH: jalur ke file yang akan berisi teks biasa.
Untuk mengetahui informasi tentang semua flag dan nilai yang mungkin, jalankan perintah dengan flag --help.
Untuk menampilkan konten file yang didekripsi, buka file tersebut di editor teks atau gunakan
perintah cat untuk melihatnya di terminal.
C#
Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan C# dan instal Cloud KMS C# SDK.
Go
Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Go dan instal Cloud KMS Go SDK.
Java
Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Java dan instal Cloud KMS Java SDK.
Node.js
Untuk menjalankan kode ini, pertama-tama siapkan lingkungan pengembangan Node.js dan instal Cloud KMS Node.js SDK.
PHP
Untuk menjalankan kode ini, pelajari terlebih dahulu cara menggunakan PHP di Google Cloud dan instal 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, pertama-tama siapkan lingkungan pengembangan Ruby dan instal Cloud KMS Ruby SDK.
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.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 singkat, algoritma berikut mendukung ukuran payload maksimum berikut.
| Algoritma | Parameter | Panjang pesan maksimum (byte) |
|---|---|---|
| RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | 190 |
| RSA_DECRYPT_OAEP_3072_SHA256 | k = 384; hLen = 32; | 318 |
| RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | 446 |
| RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | 382 |
Enkripsi asimetris tidak direkomendasikan untuk pesan dengan panjang bervariasi yang mungkin lebih besar dari batas ini. Sebaiknya gunakan enkripsi hybrid. Tink adalah library kriptografi yang menggunakan pendekatan ini.