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

BCryptExportKeyFn

コールバック

シグネチャ

NTSTATUS BCryptExportKeyFn(
    BCRYPT_KEY_HANDLE hKey,
    BCRYPT_KEY_HANDLE hExportKey,
    LPWSTR pszBlobType,
    BYTE* pbOutput,
    DWORD cbOutput,
    DWORD* pcbResult,
    DWORD dwFlags
);

パラメーター

フィールド型説明
hKeyBCRYPT_KEY_HANDLEエクスポートするキーのハンドルです。
hExportKeyBCRYPT_KEY_HANDLE

エクスポートされるキーをラップするために使用するキーのハンドルです。BCRYPT_AES_WRAP_KEY_BLOB 型の BLOB をエクスポートするときにこのパラメーターを使用します。それ以外の場合は NULL を設定します。

メモ

hExportKey ハンドルは、hKey ハンドルを提供したものと同じプロバイダーから提供される必要があります。また、hExportKey は Advanced Encryption Standard (AES) キーラップアルゴリズムで使用できる対称キーのハンドルである必要があります。hKey ハンドルが Microsoft プロバイダーのものである場合、hExportKey は AES キーのハンドルである必要があります。

Windows Server 2008 および Windows Vista: このパラメーターは使用されないため、NULL を設定してください。

pszBlobTypeLPWSTR

エクスポートする BLOB の種類を指定する識別子を格納した、null で終わる Unicode 文字列です。次のいずれかの値を指定できます。

値 意味
BCRYPT_AES_WRAP_KEY_BLOB AES キーでラップされたキーをエクスポートします。hExportKey パラメーターは、キー暗号化キーを指す有効な BCRYPT_KEY_HANDLE ポインターを参照している必要があり、hKey パラメーターが表すキーの長さは 8 バイトの倍数である必要があります。

Windows Server 2008 および Windows Vista: この BLOB 型はサポートされていません。
BCRYPT_DH_PRIVATE_BLOB Diffie-Hellman の 公開キー/秘密キーのペア をエクスポートします。pbOutput バッファーは、BCRYPT_DH_KEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。
BCRYPT_DH_PUBLIC_BLOB Diffie-Hellman の 公開キー をエクスポートします。pbOutput バッファーは、BCRYPT_DH_KEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。
BCRYPT_DSA_PRIVATE_BLOB DSA の公開キー/秘密キーのペアをエクスポートします。pbOutput バッファーは、BCRYPT_DSA_KEY_BLOB 構造体または BCRYPT_DSA_KEY_BLOB_V2 構造体と、その直後に続くキーデータを受け取ります。BCRYPT_DSA_KEY_BLOB は 512 ビットから 1024 ビットまでのキー長に使用されます。BCRYPT_DSA_KEY_BLOB_V2 は 1024 ビットを超え 3072 ビット以下のキー長に使用されます。

Windows 8: BCRYPT_DSA_KEY_BLOB_V2 のサポートが開始されました。
BCRYPT_DSA_PUBLIC_BLOB DSA の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_DSA_KEY_BLOB 構造体または BCRYPT_DSA_KEY_BLOB_V2 構造体と、その直後に続くキーデータを受け取ります。BCRYPT_DSA_KEY_BLOB は 512 ビットから 1024 ビットまでのキー長に使用されます。BCRYPT_DSA_KEY_BLOB_V2 は 1024 ビットを超え 3072 ビット以下のキー長に使用されます。

Windows 8: BCRYPT_DSA_KEY_BLOB_V2 のサポートが開始されました。
BCRYPT_ECCPRIVATE_BLOB 楕円曲線暗号 (ECC) の 秘密キー をエクスポートします。pbOutput バッファーは、BCRYPT_ECCKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。
BCRYPT_ECCPUBLIC_BLOB ECC の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_ECCKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。
BCRYPT_KEY_DATA_BLOB 対称キーをデータ BLOB にエクスポートします。pbOutput バッファーは、BCRYPT_KEY_DATA_BLOB_HEADER 構造体と、その直後に続くキー BLOB を受け取ります。
BCRYPT_MLKEM_PRIVATE_SEED_BLOB ML-KEM の秘密シードキーをエクスポートします。pbOutput バッファーは、BCRYPT_MLKEM_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。

注: BCRYPT_MLKEM_PRIVATE_BLOB を使用してインポートされた秘密キーを含む ML-KEM キーハンドルには、秘密シードキーをエクスポートするための情報が不足しています。

Windows Insiders (ビルド 27843): ML-KEM のサポートが開始されました。
BCRYPT_MLKEM_PRIVATE_BLOB ML-KEM の秘密 (デカプセル化) キーをエクスポートします。pbOutput バッファーは、BCRYPT_MLKEM_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。

Windows Insiders (ビルド 27843): ML-KEM のサポートが開始されました。
BCRYPT_MLKEM_PUBLIC_BLOB ML-KEM の公開 (カプセル化) キーをエクスポートします。pbOutput バッファーは、BCRYPT_MLKEM_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。

Windows Insiders (ビルド 27843): ML-KEM のサポートが開始されました。
BCRYPT_OPAQUE_KEY_BLOB 対称キーを、単一の 暗号化サービスプロバイダー (CSP) に固有の形式でエクスポートします。不透明な BLOB は転送できず、その BLOB を生成したものと同じ CSP を使用してインポートする必要があります。不透明な BLOB はプロセス間でのキーの転送のみを目的としており、永続化してプロバイダーのバージョンをまたいで読み取る用途には適していません。
BCRYPT_PQDSA_PRIVATE_SEED_BLOB ポスト量子デジタル署名アルゴリズム (PQDSA) の秘密シードキーをエクスポートします。pbOutput バッファーは、BCRYPT_PQDSA_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。

注: BCRYPT_PQDSA_PRIVATE_BLOB を使用してインポートされた秘密キーを含む PQDSA キーハンドルには、秘密シードキーをエクスポートするための情報が不足しています。

Windows Insiders (ビルド 27843): ML-DSA のサポートが開始されました。
BCRYPT_PQDSA_PRIVATE_BLOB PQDSA の秘密キーをエクスポートします。pbOutput バッファーは、BCRYPT_PQDSA_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。

Windows Insiders (ビルド 27843): ML-DSA のサポートが開始されました。
BCRYPT_PQDSA_PUBLIC_BLOB PQDSA の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_PQDSA_KEY_BLOB 構造体と、その直後に続くパラメーターセットおよびキーデータを受け取ります。

Windows Insiders (ビルド 27843): ML-DSA のサポートが開始されました。
BCRYPT_PRIVATE_KEY_BLOB 任意の種類の汎用的な秘密キーをエクスポートします。秘密キーに公開キーが含まれているとは限りません。この BLOB 内のキーの種類は、BCRYPT_KEY_BLOB 構造体の Magic メンバーによって決まります。
BCRYPT_PUBLIC_KEY_BLOB 任意の種類の汎用的な公開キーをエクスポートします。この BLOB 内のキーの種類は、BCRYPT_KEY_BLOB 構造体の Magic メンバーによって決まります。
BCRYPT_RSAFULLPRIVATE_BLOB 完全な RSA の公開キー/秘密キーのペアをエクスポートします。pbOutput バッファーは、BCRYPT_RSAKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。この BLOB には、BCRYPT_RSAPRIVATE_BLOB 型と比べて追加のキーマテリアルが含まれます。
BCRYPT_RSAPRIVATE_BLOB RSA の公開キー/秘密キーのペアをエクスポートします。pbOutput バッファーは、BCRYPT_RSAKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。
BCRYPT_RSAPUBLIC_BLOB RSA の公開キーをエクスポートします。pbOutput バッファーは、BCRYPT_RSAKEY_BLOB 構造体と、その直後に続くキーデータを受け取ります。
LEGACY_DH_PRIVATE_BLOB CryptoAPI を使用してインポートできる Diffie-Hellman の公開キー/秘密キーのペアを格納した、レガシーの Diffie-Hellman バージョン 3 秘密キー BLOB をエクスポートします。
LEGACY_DH_PUBLIC_BLOB CryptoAPI を使用してインポートできる Diffie-Hellman の公開キーを格納した、レガシーの Diffie-Hellman バージョン 3 公開キー BLOB をエクスポートします。
LEGACY_DSA_PRIVATE_BLOB CryptoAPI を使用してインポートできる形式で、DSA の公開キー/秘密キーのペアをエクスポートします。
LEGACY_DSA_PUBLIC_BLOB CryptoAPI を使用してインポートできる形式で、DSA の公開キーをエクスポートします。
LEGACY_DSA_V2_PRIVATE_BLOB CryptoAPI を使用してインポートできる形式で、DSA バージョン 2 の秘密キーをエクスポートします。
LEGACY_RSAPRIVATE_BLOB CryptoAPI を使用してインポートできる形式で、RSA の公開キー/秘密キーのペアをエクスポートします。
LEGACY_RSAPUBLIC_BLOB CryptoAPI を使用してインポートできる形式で、RSA の公開キーをエクスポートします。
pbOutputBYTE*キー BLOB を受け取るバッファーのアドレスです。cbOutput パラメーターには、このバッファーのサイズを指定します。このパラメーターが NULL の場合、この関数は必要なサイズをバイト単位で、pcbResult パラメーターが指す ULONG に格納します。
cbOutputDWORDpbOutput バッファーのサイズをバイト単位で指定します。
pcbResultDWORD*pbOutput バッファーにコピーされたバイト数を受け取る ULONG へのポインターです。pbOutput パラメーターが NULL の場合、この関数は必要なサイズをバイト単位で、このパラメーターが指す ULONG に格納します。
dwFlagsDWORDこの関数の動作を変更するフラグのセットです。この関数に対して定義されているフラグはありません。

公式ドキュメント

BCryptExportKey 関数は、キーを、後で使用するために永続化できるメモリ BLOB にエクスポートします。

戻り値

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

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

リターンコード 説明
STATUS_SUCCESS 関数は成功しました。
STATUS_BUFFER_TOO_SMALL cbOutput パラメーターで指定されたサイズが、暗号文を格納するのに十分な大きさではありません。バッファー pbOutput が小さすぎる場合、pcbResult は pbOutput に必要なバイト数を受け取ります。
STATUS_INVALID_HANDLE hKey パラメーターのキーハンドルが無効です。
STATUS_INVALID_PARAMETER 1 つ以上のパラメーターが無効です。
STATUS_NOT_SUPPORTED 指定された BLOB 型はプロバイダーでサポートされていません。指定されたキーハンドルが秘密シードのエクスポートをサポートしていない場合も同様です。解説 を参照してください。

解説(Remarks)

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

この関数をカーネルモードで呼び出すには、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)