署名されたメッセージの確認
これらの手順では、署名されたデータの署名を確認します。 次の図は、それに続く一覧に示すように、実行する必要がある個々のタスクを示しています。
署名されたメッセージの署名を確認するには
署名されたメッセージへのポインターを取得します。
証明書ストアを開きます。
メッセージに含まれる署名者 ID を使用して、送信者の証明書を取得し、 その公開キーへのハンドルを取得します。
手順 2 と 3 の代わりに、メッセージに含まれている証明書を使用して署名者の公開キーを取得できます。
署名者の公開キーを使用してデジタル署名を復号化し、メッセージ内のデータの元のダイジェストを生成します。
メッセージに含まれるハッシュ アルゴリズムを使用して、メッセージに含まれるデータを ハッシュ し、新しいダイジェストを生成します。
メッセージから取得したダイジェストを、先ほど作成した新しいダイジェストと比較します。
2 つのダイジェストが一致する場合は、署名が検証されます。 つまり、データの署名に使用された 秘密キー は、署名の暗号化解除に使用した公開キーと一致し、データが署名されてからデータは変更されていないことを意味します。
2 つのダイジェストが一致しない場合、署名は検証されず、秘密キーと公開キーが一致しないか、データが署名されてから変更されたか、またはその両方が変更されています。
次の手順に示すように、 CryptVerifyMessageSignature という 1 つの関数を使用して署名を検証できます。
署名されたメッセージを確認するには
- 署名されたメッセージへのポインターを取得します。
- 署名されたメッセージのサイズを取得します。
- 暗号化プロバイダーのハンドルを取得します。
- CRYPT_VERIFY_MESSAGE_PARA構造体を初期化します。
- 署名を確認するには、 CryptVerifyMessageSignature を呼び出します。
この手順を実装するコードは、「 サンプル C プログラム: メッセージの署名」および「メッセージ署名の検証」に含まれています。