Topik ini menjelaskan cara menghasilkan dan memverifikasi tanda tangan digital menggunakan CMK asimetris. Contoh berikut menggunakan Alibaba Cloud CLI dan SDK KMS.
- Pihak penandatangan mendistribusikan kunci publik untuk verifikasi tanda tangan kepada Penerima paket.
- Penanda tangan menggunakan kunci privat untuk menandatangani pesan.
- Pihak penandatangan mengirimkan paket beserta tanda tangannya kepada penerima.
- Setelah menerima paket dan tanda tangan tersebut, penerima menggunakan kunci publik untuk memverifikasi tanda tangan.
Sebelum Memulai
Panggil operasi CreateKey di KMS menggunakan Alibaba Cloud CLI. Untuk membuat kunci asimetris, atur parameter KeySpec ke jenis kunci yang diinginkan dan parameter Usage ke SIGN/VERIFY.
Untuk membuat kunci tanda tangan RSA:
aliyun kms CreateKey --KeySpec=RSA_2048 --KeyUsage=SIGN/VERIFY --ProtectionLevel=HSMUntuk membuat kunci tanda tangan NIST P-256:
aliyun kms CreateKey --KeySpec=EC_P256 --KeyUsage=SIGN/VERIFY --ProtectionLevel=HSMUntuk membuat kunci tanda tangan secp256k1:
aliyun kms CreateKey --KeySpec=EC_P256K --KeyUsage=SIGN/VERIFY --ProtectionLevel=HSM
Prapemrosesan Tanda Tangan: Hitung Message Digest
Sebelum menandatangani paket menggunakan kunci RSA atau ECC, Anda harus terlebih dahulu menghitung digest dari paket tersebut, lalu menandatangani digest tersebut.
Contoh berikut menggunakan algoritma digest SHA-256.
1. Simpan pesan "this is message" yang akan ditandatangani ke dalam file message-file.txt:
echo "this is message" > message-file.txt2. Hitung digest SHA-256 dari pesan tersebut dan simpan digest biner ke dalam file message-sha256.bin:
openssl dgst -sha256 -binary -out message-sha256.bin message-file.txtPanggil KMS untuk Menghitung Tanda Tangan
Panggil operasi KMS untuk menandatangani message digest menggunakan kunci privat.
1. Sebelum mentransmisikan message digest melalui jaringan, encode Base64 terhadapnya:
openssl base64 -in message-sha256.binDigest yang telah diencode Base64 adalah sebagai berikut:
uCx5YpLfBrqoYMP8Hf9H7j9/1zT+PPxq1qJRW6uQbos=2. Teruskan digest yang telah diencode Base64 ke KMS untuk menghasilkan tanda tangan.
- RSASSA-PSS
Untuk menandatangani data dengan kunci RSA menggunakan algoritma RSASSA-PSS dan digest SHA-256, jalankan perintah berikut:
aliyun kms AsymmetricSign --KeyId=**** --KeyVersionId=**** \ --Algorithm=RSA_PSS_SHA_256 --Digest=hRP2cu... { "KeyId": "****", "KeyVersionId": "****", "Value": "J7xmdnZ...", "RequestId": "70f78da9-c1b6-4119-9635-0ce4427cd424" }Decode Base64 tanda tangan dari parameter Value pada hasil tersebut dan simpan tanda tangan biner ke file rsa_pss_signature.bin:
echo J7xmdnZ... | openssl base64 -d -out rsa_pss_signature.bin - RSASSA_PKCS1_V1_5
Untuk menandatangani data dengan kunci RSA menggunakan algoritma RSASSA_PKCS1_V1_5 dan digest SHA-256, jalankan perintah berikut:
aliyun kms AsymmetricSign --KeyId=**** --KeyVersionId=**** \ --Algorithm=RSA_PKCS1_SHA_256 --Digest=hRP2cu... { "KeyId": "****", "KeyVersionId": "****", "Value": "qreBkH/u...", "RequestId": "4be57288-f477-4ecd-b7be-ad8688390fbc" }Decode Base64 tanda tangan dari parameter Value pada hasil tersebut dan simpan tanda tangan biner ke file rsa_pkcs1_signature.bin:
echo qreBkH/u... | openssl base64 -d -out rsa_pkcs1_signature.bin - NIST P-256
Untuk menandatangani data dengan kunci NIST P-256 menggunakan algoritma ECDSA dan digest SHA-256, jalankan perintah berikut:
aliyun kms AsymmetricSign --KeyId=**** --KeyVersionId=**** \ --Algorithm=ECDSA_SHA_256 --Digest=hRP2cu... { "KeyId": "****", "KeyVersionId": "****", "Value": "MEYCIQD33Y98...", "RequestId": "472d789c-d4be-4271-96bb-367f7f0f8ec3" }Decode Base64 tanda tangan dari parameter Value pada hasil tersebut dan simpan tanda tangan biner ke file ec_p256_signature.bin:
echo MEYCIQD33Y98... | openssl base64 -d -out ec_p256_signature.bin - secp256k1
Jalankan perintah Alibaba Cloud CLI berikut:
aliyun kms AsymmetricSign --KeyId=**** --KeyVersionId=**** \ --Algorithm=ECDSA_SHA_256 --Digest=hRP2cu... { "KeyId": "****", "KeyVersionId": "****", "Value": "MEYCIQDWuuI...", "RequestId": "fe41abed-91e7-4069-9f6b-0048f5bf4de5" }Decode Base64 tanda tangan dari parameter Value pada hasil tersebut dan simpan tanda tangan biner ke file ec_p256k_signature.bin:
echo MEYCIQDWuuI... | openssl base64 -d -out ec_p256k_signature.bin
Dapatkan Kunci Publik
Ambil kunci publik dari kunci asimetris yang sesuai dari KMS. Untuk informasi lebih lanjut, lihat enkripsi dan dekripsi asimetris. Untuk contoh-contoh sebelumnya, diasumsikan bahwa kunci publik disimpan ke file-file berikut:
- Kunci publik untuk kunci RSA disimpan dalam file rsa_publickey.pub.
- Kunci publik untuk kunci NIST P-256 disimpan dalam file ec_p256_publickey.pub.
- Kunci publik untuk kunci secp256k1 disimpan dalam file ec_p256k_publickey.pub.
Verifikasi Tanda Tangan Menggunakan Kunci Publik
Jalankan perintah berikut untuk memverifikasi tanda tangan berdasarkan jenis kunci dan algoritma:
- RSASSA-PSS
openssl dgst \ -verify rsa_publickey.pub \ -sha256 \ -sigopt rsa_padding_mode:pss \ -sigopt rsa_pss_saltlen:-1 \ -signature rsa_pss_signature.bin \ message-file.txt - RSASSA_PKCS1_V1_5
openssl dgst \ -verify rsa_publickey.pub \ -sha256 \ -signature rsa_pkcs1_signature.bin \ message-file.txt - NIST P-256
openssl dgst \ -verify ec_p256_publickey.pub \ -sha256 \ -signature ec_p256_signature.bin \ message-file.txt - secp256k1
openssl dgst \ -verify ec_p256k_publickey.pub \ -sha256 \ -signature ec_p256k_signature.bin \ message-file.txt
Jika verifikasi berhasil, output berikut akan dikembalikan:
Verified OK