Win32 API 日本語リファレンス
ホーム › Security.Cryptography › BCryptVerifySignatureFn

BCryptVerifySignatureFn

コールバック

シグネチャ

NTSTATUS BCryptVerifySignatureFn(
    BCRYPT_KEY_HANDLE hKey,
    void* pPaddingInfo,
    BYTE* pbHash,
    DWORD cbHash,
    BYTE* pbSignature,
    DWORD cbSignature,
    DWORD dwFlags
);

パラメーター

フィールド型説明
hKeyBCRYPT_KEY_HANDLE署名の検証に使用するキーのハンドルです。これには、BCryptSignHash 関数でデータに署名する際に使用したキーペアの公開キー部分が含まれている必要があります。
pPaddingInfovoid*パディング情報を格納する構造体へのポインターです。このパラメーターが指す構造体の実際の型は、dwFlags パラメーターの値によって異なります。dwFlags が 0 の場合、このパラメーターは NULL である必要があります。
pbHashBYTE*

検証する入力を格納するバッファーのアドレスです。cbHash パラメーターには、このバッファーのサイズを指定します。

注: パラメーター名 pbHash は、この API の歴史的な経緯による不適切な名称です。

多くの署名アルゴリズム (DSA、RSA、ECDSA、HashML-DSA など) では、検証ルーチンはハッシュ関数の結果を入力として受け取るように定義されています。これらのアルゴリズムでは、検証対象の元のメッセージをまずハッシュし、その結果得られたハッシュ値 (プリハッシュ) を pbHash バッファーで渡します。

ただし、一部の署名アルゴリズム (純粋な ML-DSA、純粋な SLH-DSA など) では、任意のサイズのデータに直接署名できます。これらのアルゴリズムでは、pbHash バッファーは検証する入力そのものを表します。署名者と検証者はこの入力の構成方法について合意する必要がありますが、プリハッシュを介する必要はありません。

いずれの場合も、pbHash バッファーは検証する入力を表します。

cbHashDWORDpbHash バッファーのサイズ (バイト単位) です。
pbSignatureBYTE*データの署名を格納するバッファーのアドレスです。署名の作成には BCryptSignHash 関数を使用します。cbSignature パラメーターには、このバッファーのサイズを指定します。
cbSignatureDWORDpbSignature バッファーのサイズ (バイト単位) です。署名の作成には BCryptSignHash 関数を使用します。
dwFlagsDWORD

この関数の動作を変更するフラグのセットです。使用できるフラグのセットは、hKey パラメーターで指定したキーの種類によって異なります。

0、または次の値のいずれかを指定できます。

値 意味
BCRYPT_PAD_PKCS1 署名の作成時に RSA PKCS1 署名パディング方式が使用されました。pPaddingInfo パラメーターは BCRYPT_PKCS1_PADDING_INFO 構造体へのポインターです。
BCRYPT_PAD_PSS 署名の作成時に RSA 確率的署名方式 (PSS) のパディング方式が使用されました。pPaddingInfo パラメーターは BCRYPT_PSS_PADDING_INFO 構造体へのポインターです。
BCRYPT_PAD_PQDSA 耐量子デジタル署名アルゴリズム (PQDSA) の署名がどのように計算されたかを指定するために、追加の情報が必要です。pPaddingInfo パラメーターは BCRYPT_PQDSA_PADDING_INFO 構造体へのポインターです。

注: プリハッシュ版の PQDSA を使用する場合は、これを設定する必要があります。

Windows Insiders (ビルド 27843): PQDSA のサポートが開始されます。

公式ドキュメント

BCryptVerifySignature 関数は、指定された署名が指定されたデータと一致することを検証します。

戻り値

関数の成功または失敗を示すステータスコードを返します。

返される可能性のあるコードには、次のものが含まれます (ただし、これらに限定されません)。

戻り値 説明
STATUS_SUCCESS 関数は成功しました。
STATUS_INVALID_SIGNATURE 署名は検証されませんでした。
STATUS_INVALID_PARAMETER 指定されたパラメーターのいずれかが無効です。
STATUS_INVALID_HANDLE hKey パラメーターで指定されたキーハンドルが無効です。
STATUS_NO_MEMORY メモリの割り当てに失敗しました。
STATUS_NOT_SUPPORTED hKey パラメーターで指定されたキーハンドルの作成に使用されたアルゴリズムプロバイダーは、署名アルゴリズムではありません。

解説(Remarks)

この関数は、指定されたキーの公開部分を使用して、指定されたデータと、dwFlags および pPaddingInfo で指定された追加のパラメーターが、署名アルゴリズムの仕様に従って指定された署名と一致するかどうかを計算します。

署名アルゴリズムがプリハッシュされた値を入力として受け取る場合は、署名されたハッシュ値の作成に使用されたものと同じハッシュアルゴリズムを使用して、元のデータをハッシュする必要があります。 該当する場合は、署名の作成時に指定されたものと同じパディング方式も指定する必要があります。

サポートされているアルゴリズムプロバイダーを使用する場合、BCryptVerifySignature はユーザーモードとカーネルモードのどちらからでも呼び出すことができます。カーネルモードの呼び出し元は、PASSIVE_LEVEL IRQL または DISPATCH_LEVEL IRQL のいずれかで実行できます。現在の IRQL レベルが DISPATCH_LEVEL の場合、hKey パラメーターに渡すハンドルは、BCRYPT_PROV_DISPATCH フラグを使用して開かれたプロバイダーが返したアルゴリズムハンドルから派生したものである必要があり、BCryptVerifySignature 関数に渡すポインターはすべて非ページ (またはロックされた) メモリを参照している必要があります。

この関数をカーネルモードで呼び出すには、Driver Development Kit (DDK) に含まれる Cng.lib を使用します。Windows Server 2008 および Windows Vista: この関数をカーネルモードで呼び出すには、Ksecdd.lib を使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)