Topik ini memberikan informasi tentang cara membuat dan memvalidasi tanda tangan digital berdasarkan kunci asimetris.
Tanda tangan digital dibuat menggunakan bagian kunci pribadi dari kunci asimetris. Tanda tangan divalidasi menggunakan bagian kunci publik dari kunci assimetris yang sama.
Sebelum memulai
Saat membuat tanda tangan digital, Anda harus menggunakan kunci yang memiliki tujuan kunci
ASYMMETRIC_SIGN
. Saat Anda membuat kunci, gunakanASYMMETRIC_SIGN
.Untuk memvalidasi tanda tangan, Anda perlu mengetahui algoritma lengkap yang digunakan saat membuat kunci. Untuk petunjuk command line di bawah yang menggunakan perintah
openssl
, Anda harus meneruskan informasi ini ke perintah tersebut.Berikan izin
cloudkms.cryptoKeyVersions.useToSign
pada kunci assimetris kepada pengguna atau layanan yang akan melakukan penandatanganan. Anda dapat mempelajari izin di Cloud Key Management Service di Izin dan peran.Jika Anda akan memvalidasi tanda tangan, berikan izin
cloudkms.cryptoKeyVersions.viewPublicKey
pada kunci asimetris kepada pengguna atau layanan yang akan mendownload kunci publik untuk digunakan dalam validasi.Jika Anda akan menggunakan command line, instal OpenSSL jika Anda belum memilikinya. Jika Anda menggunakan Cloud Shell, OpenSSL sudah diinstal.
Data versus ringkasan
Input yang diberikan untuk permintaan AsymmetricSign dapat diteruskan melalui
kolom data
atau kolom digest
. Kedua kolom ini tidak dapat ditentukan secara
bersamaan. Ada beberapa algoritma yang memerlukan kolom data, seperti
algoritma mentah dan penandatanganan
dengan kunci Cloud External Key Manager.
Algoritma mentah
Algoritma "Mentah", yang diidentifikasi dengan awalan RSA_SIGN_RAW_
, adalah
varian penandatanganan PKCS #1 yang menghilangkan encoding ke dalam DigestInfo. Dalam
varian:
- Ringkasan dihitung berdasarkan pesan yang akan ditandatangani.
- Padding PKCS #1 diterapkan langsung ke ringkasan.
- Tanda tangan ringkasan yang ditambahkan padding dihitung, menggunakan kunci pribadi RSA.
Untuk menggunakan algoritma ini:
- Data mentah harus disediakan (bukan ringkasan) sebagai bagian dari kolom
data
. - Data memiliki batas panjang 11 byte lebih sedikit dari ukuran kunci RSA. Misalnya, PKCS #1 dengan kunci RSA 2048-bit dapat menandatangani maksimal 245 byte.
- Berikan peran
cloudkms.expertRawPKCS1
kepada pengguna atau layanan yang sesuai. Anda dapat mempelajari izin di Cloud Key Management Service di Izin dan peran.
Dukungan ECDSA untuk algoritma hash lainnya
Algoritma penandatanganan ECDSA kami memiliki format umum:
EC_SIGN_ELLIPTIC_CURVE_[DIGEST_ALGORITHM]
DIGEST_ALGORITHM memiliki nilai SHA256
, SHA384
, atau SHA512
.
Karena hash dilakukan sebelum Anda membuat tanda tangan, algoritma penandatanganan
ini juga dapat digunakan dengan ringkasan selain SHA, seperti Keccak. Untuk menggunakan
ringkasan Keccak, berikan nilai hash Keccak dan gunakan algoritma ringkasan SHA
dengan panjang yang sama. Misalnya, Anda dapat menggunakan ringkasan KECCAK256
dalam permintaan
dengan algoritma EC_SIGN_P256_SHA256
.
Membuat tanda tangan
gcloud
Untuk menggunakan Cloud KMS di command line, pertama-tama Instal atau upgrade ke Google Cloud CLI versi terbaru.
gcloud kms asymmetric-sign \ --version key-version \ --key key \ --keyring key-ring \ --location location \ --digest-algorithm digest-algorithm \ --input-file input-file \ --signature-file signature-file
Ganti key-version dengan versi kunci yang akan digunakan untuk penandatanganan. Ganti key dengan nama kunci. Ganti key-ring dengan nama key ring tempat kunci berada. Ganti location dengan lokasi Cloud KMS key ring. Ganti digest-algorithm dengan algoritma yang akan digunakan. Hapus digest-algorithm untuk mengirim input-file ke Cloud KMS untuk ditandatangani. Ganti input-file dan signature-file dengan jalur lokal untuk file yang akan ditandatangani dan file tanda tangan.
Untuk mengetahui informasi tentang semua flag dan kemungkinan nilai, jalankan perintah dengan
flag --help
.
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, pertama-tama pelajari 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.asymmetricSign
untuk melakukan penandatanganan. Respons dari metode ini berisi
tanda tangan berenkode base64.
Memvalidasi tanda tangan kurva eliptik
gcloud
Untuk menggunakan Cloud KMS di command line, pertama-tama Instal atau upgrade ke Google Cloud CLI versi terbaru.
Mendapatkan kunci publik
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Ganti key-version dengan versi kunci. 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 output-file dengan jalur file untuk menyimpan kunci publik di sistem lokal.
Untuk mengetahui informasi tentang semua flag dan kemungkinan nilai, jalankan perintah dengan
flag --help
.
Memverifikasi tanda tangan
Perintah OpenSSL untuk memvalidasi tanda tangan bergantung pada jenis tanda tangan
yang dibuat. Misalnya, untuk memvalidasi tanda tangan kurva elips SHA-256
menggunakan OpenSSL, Anda harus menentukan -sha256
. Untuk memvalidasi tanda tangan kurva elips SHA-384, Anda harus menentukan -sha384
.
openssl dgst \ -sha256 \ -verify public-key-file \ -signature signature-file \ message-file
Ganti variabel dengan nilai Anda sendiri:
public-key-file. Jalur ke file yang berisi kunci publik (misalnya,
"./my-key.pub"
).signature-file. Jalur ke file yang berisi tanda tangan yang akan diverifikasi (misalnya,
"./my-data.sig"
).message-file. Jalur ke file yang berisi pesan (misalnya,
"./my-data.txt"
).
Jika tanda tangan valid, perintah akan menampilkan string Verified OK
.
Untuk informasi tentang semua flag dan kemungkinan nilai, jalankan perintah dengan
subperintah help
.
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, pertama-tama pelajari 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.getPublicKey untuk mengambil kunci publik, lalu gunakan perintah yang ditampilkan untuk contoh command line guna memvalidasi tanda tangan.
Memvalidasi tanda tangan RSA
gcloud
Untuk menggunakan Cloud KMS di command line, pertama-tama Instal atau upgrade ke Google Cloud CLI versi terbaru.
Mendapatkan kunci publik
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Ganti key-version dengan versi kunci. 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 output-file dengan jalur untuk menyimpan kunci publik di sistem lokal.
Untuk mengetahui informasi tentang semua flag dan kemungkinan nilai, jalankan perintah dengan
flag --help
.
Memverifikasi tanda tangan
Perintah OpenSSL untuk memvalidasi tanda tangan bergantung pada jenis tanda tangan yang
dibuat. Misalnya, untuk memvalidasi tanda tangan RSA SHA-256 dengan padding PSS, Anda
harus menentukan -sha256
dan -sigopt rsa_padding_mode:pss
. Untuk memvalidasi tanda tangan RSA SHA-512
dengan padding PSS, Anda harus menentukan -sha512
dan -sigopt
rsa_padding_mode:pss
.
openssl dgst \ -sha256 \ -sigopt rsa_padding_mode:pss \ -sigopt rsa_pss_saltlen:-1 \ -verify public-key-file \ -signature signature-file \ message-file
Ganti variabel dengan nilai Anda sendiri:
public-key-file. Jalur ke file yang berisi kunci publik (misalnya,
"./my-key.pub"
).signature-file. Jalur ke file yang berisi tanda tangan yang akan diverifikasi (misalnya,
"./my-data.sig"
).message-file. Jalur ke file yang berisi pesan (misalnya,
"./my-data.txt"
).
Jika tanda tangan valid, perintah akan menampilkan string Verified OK
.
Untuk informasi tentang semua flag dan kemungkinan nilai, jalankan perintah dengan
subperintah help
.
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, pertama-tama pelajari 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.getPublicKey
untuk mengambil kunci publik, lalu gunakan perintah yang ditampilkan untuk
contoh command line guna memvalidasi tanda tangan.