AWS KMS の非対称キーで生成された署名を検証するにはどうすればよいですか?

所要時間1分
0

キー管理サービス (AWS KMS) を使用してファイルに署名したいと考えています。さらに、署名が有効であることを確認するために、ファイル、署名、およびパブリックキーを共有したいと考えています。ただし、AWS KMS キーにアクセスするための API アクセスをユーザーに提供するつもりはありません。

解決方法

次の例では、ECC_NIST_P256 (secp256r1) の非対称キーペアがある AWS KMS を使用しています。AWS KMS がこのキーペアを使用して署名ファイルを生成すると、NIST FIPS 168-4 に従って署名が作成されます。ANS X9.62 で規定されているように、(rs) 値を含む ECDSA デジタル署名が生成されます。オープンスタンダードであるため、OpenSSL を使用してこの署名を検証できます。

RSA キーペアの署名形式を取得するには、手順に従って AWS KMS キーの作成および管理を行います

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

AWS KMS を使用してローカルファイルに署名する

アカウントで AWS KMS キーペアを作成したなら、AWS CLI を使用してキーペアを参照し、ファイルに署名します。AWS KMS API から受け取ったレスポンスは、Base64 でエンコードされています。次の例では、--query パラメーターを使用してレスポンスから署名の値を取得し、sign.b64 ファイルに配置します。

[ec2-user@ip-172-31-23-22 ~]$ aws kms sign --key-id arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --message fileb://message.txt --signing-algorithm ECDSA_SHA_256 --query 'Signature' --output text > sign.b64

注: メッセージは最大 4096 バイトまで送信できます。より大きなメッセージに署名するには、メッセージのハッシュダイジェストを生成します。続いて、メッセージパラメーターにハッシュダイジェストを指定します。メッセージが完全なメッセージとダイジェストのどちらであるかを示すには、MessageType パラメーターを使用します。署名アルゴリズムは、後で署名を検証する際に必要になるため、必ずメモしておいてください。

署名は Base64 形式であるため、次のような Linux base64 encoding コマンドを使用してバイナリ形式に変換できます。

[ec2-user@ip-172-31-23-22 ~]$ base64 -d sign.b64 > sign.bin

Windows OS 用の Base64 ファイルをデコードするには、次のコマンドを実行します。

certutil -decode C:\Temp\sign.b64 C:\Temp\sign.bin

OpenSSL を使用して AWS KMS の署名を検証する

これにより sign.b64 署名ファイルを共有できます。署名ファイルを検証するには、パブリックキーが必要です。パブリックキーを取得するには、次のような AWS CLI コマンド get-public-key を実行します。

[ec2-user@ip-172-31-23-22 ~]$ aws kms get-public-key --key-id arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --output text --query 'PublicKey' > KMSPublic.b64

KMSPublic.key という名前の別のファイルを使用して base64 ファイルを DER エンコーディングに変換するには、次のコマンドを実行します。

[ec2-user@ip-172-31-23-22 ~]$ base64 -d KMSPublic.b64 > KMSPublic.key

これで、message.txt ファイルにバイナリ形式のパブリックキーと署名ができました。署名を検証するには、次のような OpenSSL コマンド dgst を実行します。

[ec2-user@ip-172-31-23-22 ~]$ openssl dgst -sha256 -verify KMSPublic.key -keyform DER -signature sign.bin message.txt
Verified OK

この例では、「Verified OK」の出力で検証が成功したことが示されています。

懸賞のレスポンスが届かない場合は、次の点を確認してください。

  • OpenSSL 署名アルゴリズムが、ファイルの署名に使用されたものと同じであること。
  • ファイルが Base64 でエンコードされていないこと。

関連情報

暗号プリミティブ

AWS KMS の概念

AWS公式
AWS公式更新しました 2年前