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 utama
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 bagian 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 untuk validasi.Jika Anda akan menggunakan command line, instal OpenSSL jika Anda belum memilikinya. Jika Anda menggunakan Cloud Shell, berarti OpenSSL sudah terinstal.
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 "Raw", yang diidentifikasi oleh awalan RSA_SIGN_RAW_
, adalah varian dari penandatanganan PKCS #1 yang menghilangkan encoding ke DigestInfo. Dalam varian:
- Ringkasan dihitung melalui pesan yang akan ditandatangani.
- Padding PKCS #1 diterapkan ke ringkasan secara langsung.
- Tanda tangan ringkasan dengan padding dikomputasi menggunakan kunci pribadi RSA.
Untuk menggunakan algoritma ini:
- Data mentah harus diberikan (bukan ringkasan) sebagai bagian dari kolom
data
. - Data tersebut 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
ke pengguna atau layanan yang sesuai. Anda dapat mempelajari izin di Cloud Key Management Service di bagian 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 dijalankan 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 digest KECCAK256
dalam permintaan dengan algoritma EC_SIGN_P256_SHA256
.
Membuat tanda tangan
gcloud
Untuk menggunakan Cloud KMS di command line, Instal atau upgrade Google Cloud CLI ke versi terbaru 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 tersebut berada. Ganti location dengan lokasi Cloud KMS yang merupakan 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 tanda dan nilai yang memungkinkan, jalankan perintah dengan
tanda --help
.
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.asymmetricSign
untuk melakukan penandatanganan. Respons dari metode ini berisi
tanda tangan berenkode base64.
Memvalidasi tanda tangan kurva eliptis
gcloud
Untuk menggunakan Cloud KMS di command line, Instal atau upgrade Google Cloud CLI ke versi terbaru 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 tersebut 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 tanda dan nilai yang memungkinkan, jalankan perintah dengan
tanda --help
.
Memverifikasi tanda tangan
Perintah OpenSSL untuk memvalidasi tanda tangan
bergantung pada jenis tanda tangan yang dibuat. Misalnya, untuk memvalidasi tanda tangan kurva eliptik 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 untuk diverifikasi (misalnya,
"./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 tanda dan nilai yang memungkinkan, jalankan perintah dengan
subperintah help
.
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.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 Google Cloud CLI ke versi terbaru 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 tersebut 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 tanda dan nilai yang memungkinkan, jalankan perintah dengan
tanda --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 untuk diverifikasi (misalnya,
"./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 tanda dan nilai yang memungkinkan, jalankan perintah dengan
subperintah help
.
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.getPublicKey
untuk mengambil kunci publik, lalu gunakan perintah yang ditampilkan untuk
contoh command line guna memvalidasi tanda tangan.