すべてのプロダクト
Search
ドキュメントセンター

Key Management Service:非対称デジタル署名

最終更新日:Mar 20, 2026

このトピックでは、非対称 CMK を使用してデジタル署名を生成および検証する方法について説明します。例では、Alibaba Cloud コマンドラインインターフェイス (CLI) と KMS SDK を使用します。

一般的なデジタル署名シナリオには、次のステップが含まれます。
  1. 署名者は、署名検証用の公開キーをメッセージ受信者に配布します。
  2. 署名者は、秘密キーを使用してメッセージに署名します。
  3. 署名者は、メッセージとその署名を受信者に送信します。
  4. メッセージと署名を受信した後、受信者は公開キーを使用して署名を検証します。

事前準備

Alibaba Cloud CLI を使用して KMS の CreateKey 操作を呼び出します。非対称キーを作成するには、KeySpec パラメーターを目的のキータイプに設定し、Usage パラメーターを SIGN/VERIFY に設定します。

  • RSA 署名キーを作成するには:

    aliyun kms CreateKey --KeySpec=RSA_2048 --KeyUsage=SIGN/VERIFY --ProtectionLevel=HSM
  • NIST P-256 署名キーを作成するには:

    aliyun kms CreateKey --KeySpec=EC_P256 --KeyUsage=SIGN/VERIFY --ProtectionLevel=HSM
  • secp256k1 署名キーを作成するには:

    aliyun kms CreateKey --KeySpec=EC_P256K --KeyUsage=SIGN/VERIFY --ProtectionLevel=HSM

署名の前処理: メッセージダイジェストの計算

RSA または ECC キーを使用してメッセージに署名する前に、まずメッセージのダイジェストを計算する必要があります。その後、ダイジェストに署名します。

説明 ダイジェストアルゴリズムは、KMS を呼び出すために使用する署名アルゴリズムと互換性がある必要があります。たとえば、ECDSA_SHA_256 署名アルゴリズムには SHA-256 ダイジェストアルゴリズムが必要です。SHA-384 を使用してダイジェストを計算することは、ECDSA_SHA_256 署名アルゴリズムと互換性がありません。

次の例では、SHA-256 ダイジェストアルゴリズムを使用します。

1. 署名するメッセージ「this is message」を message-file.txt ファイルに保存します。

echo "this is message" > message-file.txt

2. メッセージの SHA-256 ダイジェストを計算します。バイナリダイジェストを message-sha256.bin ファイルに保存します。

openssl dgst -sha256 -binary -out message-sha256.bin  message-file.txt

KMS を呼び出して署名を計算する

KMS 操作を呼び出して、秘密キーを使用してメッセージダイジェストに署名します。

1. ネットワーク経由でメッセージダイジェストを送信する前に、Base64エンコードする必要があります。

openssl base64 -in message-sha256.bin

Base64エンコードされたダイジェストは次のとおりです。

uCx5YpLfBrqoYMP8Hf9H7j9/1zT+PPxq1qJRW6uQbos=

2. Base64エンコードされたダイジェストを KMS に渡して署名を生成します。

説明 必須パラメーターと生成された結果は、キーと署名アルゴリズムに基づいて異なります。次の例では、各署名結果は個別のファイルに保存されます。
  • RSASSA-PSS

    RSASSA-PSS アルゴリズムと SHA-256 ダイジェストを使用して RSA キーでデータに署名するには、次のコマンドを実行します。

    aliyun kms AsymmetricSign --KeyId=**** --KeyVersionId=**** \
        --Algorithm=RSA_PSS_SHA_256 --Digest=hRP2cu...
    {
            "KeyId": "****",
            "KeyVersionId": "****",
            "Value": "J7xmdnZ...",
            "RequestId": "70f78da9-c1b6-4119-9635-0ce4427cd424"
    }

    結果の Value パラメーターから署名を Base64デコードし、バイナリ署名を rsa_pss_signature.bin ファイルに保存します。

    echo J7xmdnZ... | openssl base64 -d -out rsa_pss_signature.bin
  • RSASSA_PKCS1_V1_5

    RSASSA_PKCS1_V1_5 アルゴリズムと SHA-256 ダイジェストを使用して RSA キーでデータに署名するには、次のコマンドを実行します。

    aliyun kms AsymmetricSign --KeyId=**** --KeyVersionId=**** \
        --Algorithm=RSA_PKCS1_SHA_256 --Digest=hRP2cu...
    {
            "KeyId": "****",
            "KeyVersionId": "****",
            "Value": "qreBkH/u...",
            "RequestId": "4be57288-f477-4ecd-b7be-ad8688390fbc"
    }

    結果の Value パラメーターから署名を Base64デコードし、バイナリ署名を rsa_pkcs1_signature.bin ファイルに保存します。

    echo qreBkH/u... | openssl base64 -d -out rsa_pkcs1_signature.bin
  • NIST P-256

    ECDSA アルゴリズムと SHA-256 ダイジェストを使用して NIST P-256 キーでデータに署名するには、次のコマンドを実行します。

    aliyun kms AsymmetricSign --KeyId=**** --KeyVersionId=**** \
        --Algorithm=ECDSA_SHA_256 --Digest=hRP2cu...
    {
            "KeyId": "****",
            "KeyVersionId": "****",
            "Value": "MEYCIQD33Y98...",
            "RequestId": "472d789c-d4be-4271-96bb-367f7f0f8ec3"
    }

    結果の Value パラメーターから署名を Base64デコードし、バイナリ署名を ec_p256_signature.bin ファイルに保存します。

    echo MEYCIQD33Y98... | openssl base64 -d -out ec_p256_signature.bin
  • secp256k1

    次の Alibaba Cloud CLI コマンドを実行します。

    aliyun kms AsymmetricSign --KeyId=**** --KeyVersionId=**** \
        --Algorithm=ECDSA_SHA_256 --Digest=hRP2cu...
    {
            "KeyId": "****",
            "KeyVersionId": "****",
            "Value": "MEYCIQDWuuI...",
            "RequestId": "fe41abed-91e7-4069-9f6b-0048f5bf4de5"
    }

    結果の Value パラメーターから署名を Base64デコードし、バイナリ署名を ec_p256k_signature.bin ファイルに保存します。

    echo MEYCIQDWuuI... | openssl base64 -d -out ec_p256k_signature.bin

公開キーの取得

KMS から対応する非対称キーの公開キーを取得します。詳細については、「非対称暗号化と復号」をご参照ください。前述の例では、公開キーは次のファイルに保存されていると仮定します。

  • RSA キーの公開キーは rsa_publickey.pub ファイルに保存されます。
  • NIST P-256 キーの公開キーは ec_p256_publickey.pub ファイルに保存されます。
  • secp256k1 キーの公開キーは ec_p256k_publickey.pub ファイルに保存されます。

公開キーを使用した署名検証

キータイプとアルゴリズムに基づいて署名を検証するには、次のコマンドを実行します。

  • 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

検証が成功すると、次の出力が返されます。

Verified OK