Membuat dan memvalidasi tanda tangan digital

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, gunakan ASYMMETRIC_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 menghilangkan encoding ke DigestInfo. Dalam varian:

  • Ringkasan dihitung berdasarkan 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 digest Keccak, berikan nilai hash Keccak dan gunakan algoritma digest 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.


using Google.Cloud.Kms.V1;
using Google.Protobuf;
using System.Security.Cryptography;
using System.Text;

public class SignAsymmetricSample
{
    public