署名されたメッセージの確認

これらの手順では、署名されたデータの署名を確認します。 次の図は、それに続く一覧に示すように、実行する必要がある個々のタスクを示しています。

署名されたメッセージの確認

署名されたメッセージの署名を確認するには

  1. 署名されたメッセージへのポインターを取得します。

  2. 証明書ストアを開きます。

  3. メッセージに含まれる署名者 ID を使用して、送信者の証明書を取得し、 その公開キーへのハンドルを取得します。

    手順 2 と 3 の代わりに、メッセージに含まれている証明書を使用して署名者の公開キーを取得できます。

  4. 署名者の公開キーを使用してデジタル署名を復号化し、メッセージ内のデータの元のダイジェストを生成します。

  5. メッセージに含まれるハッシュ アルゴリズムを使用して、メッセージに含まれるデータを ハッシュ し、新しいダイジェストを生成します。

  6. メッセージから取得したダイジェストを、先ほど作成した新しいダイジェストと比較します。

  7. 2 つのダイジェストが一致する場合は、署名が検証されます。 つまり、データの署名に使用された 秘密キー は、署名の暗号化解除に使用した公開キーと一致し、データが署名されてからデータは変更されていないことを意味します。

    2 つのダイジェストが一致しない場合、署名は検証されず、秘密キーと公開キーが一致しないか、データが署名されてから変更されたか、またはその両方が変更されています。

次の手順に示すように、 CryptVerifyMessageSignature という 1 つの関数を使用して署名を検証できます。

署名されたメッセージを確認するには

  1. 署名されたメッセージへのポインターを取得します。
  2. 署名されたメッセージのサイズを取得します。
  3. 暗号化プロバイダーのハンドルを取得します。
  4. CRYPT_VERIFY_MESSAGE_PARA構造体を初期化します。
  5. 署名を確認するには、 CryptVerifyMessageSignature を呼び出します。

この手順を実装するコードは、「 サンプル C プログラム: メッセージの署名」および「メッセージ署名の検証」に含まれています。