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 asimetris 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 asimetris 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 tidak menyertakan encoding ke DigestInfo. Dalam
varian:
- Ringkasan dihitung melalui pesan yang akan ditandatangani.
- Padding PKCS #1 diterapkan langsung ke digest.
- Tanda tangan ringkasan yang di-padding dihitung menggunakan kunci pribadi RSA.
Untuk menggunakan algoritma ini:
- Data mentah harus diberikan (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 paling banyak 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.
Dengan menggunakan algoritma mentah, Anda juga dapat menandatangani jenis ringkasan yang algoritma standarnya tidak tersedia. Misalnya, Anda dapat menggunakan kunci
RSA_SIGN_RAW_2048
untuk menandatangani struktur DigestInfo PKCS #1 SHA-512
yang
telah Anda hitung secara eksternal. Proses ini menghasilkan hasil yang sama dengan
algoritma RSA_SIGN_PKCS1_2048_SHA512
standar.
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, Instal atau upgrade ke versi terbaru Google Cloud CLI terlebih dahulu.
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. Menghilangkan 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 SDK C# Cloud KMS.
Go
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan 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 instal Cloud KMS PHP SDK.
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu dan instal Cloud KMS Python SDK.
Ruby
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Ruby terlebih dahulu 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.asymmetricSign
untuk melakukan penandatanganan. Respons dari metode ini berisi tanda tangan berenkode base64.
Memvalidasi tanda tangan kurva elips
gcloud
Untuk menggunakan Cloud KMS di command line, Instal atau upgrade ke versi terbaru Google Cloud CLI terlebih dahulu.
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 (mis.
"./my-data.sig"
).message-file. Jalur ke file yang berisi pesan (misalnya,
"./my-data.txt"
).
Jika tanda tangan valid, perintah akan menghasilkan string Verified OK
.
Untuk mengetahui 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 SDK C# Cloud KMS.
Go
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan 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 instal Cloud KMS PHP SDK.
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu dan instal Cloud KMS Python SDK.
Ruby
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Ruby terlebih dahulu 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.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, Instal atau upgrade ke versi terbaru Google Cloud CLI terlebih dahulu.
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 (mis.
"./my-data.sig"
).message-file. Jalur ke file yang berisi pesan (misalnya,
"./my-data.txt"
).
Jika tanda tangan valid, perintah akan menghasilkan string Verified OK
.
Untuk mengetahui 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 SDK C# Cloud KMS.
Go
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan 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 instal Cloud KMS PHP SDK.
Python
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Python terlebih dahulu dan instal Cloud KMS Python SDK.
Ruby
Untuk menjalankan kode ini, siapkan lingkungan pengembangan Ruby terlebih dahulu 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.getPublicKey
untuk mengambil kunci publik, lalu gunakan perintah yang ditampilkan untuk contoh
command line guna memvalidasi tanda tangan.