このトピックでは、MAC 鍵に基づくデジタル署名の作成と検証について説明します。
プロデューサーと検証者の両方が共有する 1 つの鍵が、入力データから MAC タグを計算するために使用されます。MAC タグはデジタル署名として機能します。検証者は、メッセージとその関連する MAC タグを受け取ると、メッセージの内容から独自のタグを生成します。検証者は、受信したタグを生成したタグと比較して、一致するかどうかを確認できます。2 つのタグが一致する場合、確認ツールは、受信したメッセージがプロデューサーによって署名されたメッセージと同じであることを認識します。
始める前に
MAC デジタル署名を作成するときは、
MAC
を鍵の目的とする鍵を使用する必要があります。鍵の作成には、MAC
を使用します。署名するファイルがファイルサイズの上限内であることを確認します。Cloud HSM 鍵を使用して MAC 署名を作成または確認する場合、ファイルの最大サイズは 16 KiB です。それ以外の鍵の場合、最大ファイルサイズは 64 KiB です。
必要なロール
署名を作成して確認するために必要な権限を取得するには、鍵に対する次の IAM ロールの付与を管理者に依頼してください。
- 署名を作成するには: Cloud KMS CryptoKey 署名者 (
roles/cloudkms.signer
) - 署名を確認するには: Cloud KMS CryptoKey 検証者 (
roles/cloudkms.verifier
) - 署名を作成して検証するには: Cloud KMS CryptoKey 署名者/検証者(
roles/cloudkms.signerVerifier
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
MAC 署名の作成
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms mac-sign \ --version KEY_VERSION \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --input-file INPUT_FILE_PATH \ --signature-file SIGNED_FILE_PATH
以下を置き換えます。
KEY_VERSION
: 鍵のバージョン番号KEY_NAME
: 鍵の名前KEY_RING
: 鍵を含むキーリングの名前。LOCATION
: キーリングの Cloud KMS のロケーションINPUT_FILE_PATH
: 署名するファイルへのローカルパス。SIGNED_FILE_PATH
: 生成された署名を保存するローカルパス。
すべてのフラグと有効な値については、--help
フラグを指定してコマンドを実行してください。
C#
このコードを実行するには、まず C# 開発環境を設定し、Cloud KMS C# SDK をインストールします。
Go
このコードを実行するには、まず Go 開発環境を設定し、Cloud KMS Go SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Cloud KMS Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Cloud KMS Node.js SDK をインストールします。
Python
このコードを実行するには、まず Python 開発環境を設定し、Cloud KMS Python SDK をインストールします。
Ruby
このコードを実行するには、まず Ruby 開発環境を設定し、Cloud KMS Ruby SDK をインストールします。
API
これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。
CryptoKeyVersions.macSign
メソッドを使用して署名を行います。このメソッドからのレスポンスに、base64 エンコードの署名が含まれています。
MAC 署名を検証する
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms mac-verify \ --version KEY_VERSION \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --input-file INPUT_FILE_PATH \ --signature-file SIGNED_FILE_PATH
KEY_VERSION
: 鍵のバージョン番号KEY_NAME
: 鍵の名前KEY_RING
: 鍵を含むキーリングの名前。LOCATION
: キーリングの Cloud KMS のロケーションINPUT_FILE_PATH
: 署名されたファイルへのローカルパス。SIGNED_FILE_PATH
: 検証する署名ファイルのローカルパス。
すべてのフラグと有効な値については、--help
フラグを指定してコマンドを実行してください。
C#
このコードを実行するには、まず C# 開発環境を設定し、Cloud KMS C# SDK をインストールします。
Go
このコードを実行するには、まず Go 開発環境を設定し、Cloud KMS Go SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Cloud KMS Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Cloud KMS Node.js SDK をインストールします。
Python
このコードを実行するには、まず Python 開発環境を設定し、Cloud KMS Python SDK をインストールします。
Ruby
このコードを実行するには、まず Ruby 開発環境を設定し、Cloud KMS Ruby SDK をインストールします。
API
これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。
CryptoKeyVersions.macVerify
メソッドを使用して検証を行います。検証対象の署名は base64 でエンコードされている必要があります。このメソッドからのレスポンスに、署名が正常に検証されたかどうかを示すブール値が含まれています。