All Products
Search
Document Center

Key Management Service:Tanda Tangan Digital Asimetris

Last Updated:Mar 20, 2026

Topik ini menjelaskan cara menghasilkan dan memverifikasi tanda tangan digital menggunakan CMK asimetris. Contoh berikut menggunakan Alibaba Cloud CLI dan SDK KMS.

Skenario tanda tangan digital umum melibatkan langkah-langkah berikut:
  1. Pihak penandatangan mendistribusikan kunci publik untuk verifikasi tanda tangan kepada Penerima paket.
  2. Penanda tangan menggunakan kunci privat untuk menandatangani pesan.
  3. Pihak penandatangan mengirimkan paket beserta tanda tangannya kepada penerima.
  4. 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=HSM
  • Untuk membuat kunci tanda tangan NIST P-256:

    aliyun kms CreateKey --KeySpec=EC_P256 --KeyUsage=SIGN/VERIFY --ProtectionLevel=HSM
  • Untuk 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.

Catatan Algoritma digest harus kompatibel dengan algoritma tanda tangan yang digunakan saat memanggil KMS. Sebagai contoh, algoritma tanda tangan ECDSA_SHA_256 memerlukan algoritma digest SHA-256. Penggunaan SHA-384 untuk menghitung digest tidak kompatibel dengan algoritma tanda tangan ECDSA_SHA_256.

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.txt

2. 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.txt

Panggil 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.bin

Digest yang telah diencode Base64 adalah sebagai berikut:

uCx5YpLfBrqoYMP8Hf9H7j9/1zT+PPxq1qJRW6uQbos=

2. Teruskan digest yang telah diencode Base64 ke KMS untuk menghasilkan tanda tangan.

Catatan Parameter yang diperlukan dan hasil yang dihasilkan berbeda tergantung pada jenis kunci dan algoritma tanda tangan. Pada contoh berikut, setiap hasil tanda tangan disimpan dalam file terpisah.
  • 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