CryptGetKeyParam 関数 (wincrypt.h)

大事な この API は非推奨です。 新規および既存のソフトウェアでは 、Cryptography Next Generation API の 使用を開始する必要があります。Microsoft は、今後のリリースでこの API を削除する可能性があります。
 
CryptGetKeyParam 関数は、キーの操作を制御するデータを取得します。 Microsoft 暗号化サービス プロバイダーを使用する場合、基本対称キーマテリアルは、この関数またはその他の関数では取得できません。

構文

BOOL CryptGetKeyParam(
  [in]      HCRYPTKEY hKey,
  [in]      DWORD     dwParam,
  [out]     BYTE      *pbData,
  [in, out] DWORD     *pdwDataLen,
  [in]      DWORD     dwFlags
);

パラメーター

[in] hKey

クエリ対象のキーのハンドル。

[in] dwParam

作成するクエリの種類を指定します。

すべてのキー型について、このパラメーターには次のいずれかの値を含めることができます。

意味
KP_ALGID
キー アルゴリズムを取得します。 pbData パラメーターは、キーの作成時に指定されたアルゴリズムの識別子を受け取るALG_ID値へのポインターです。

CryptGenKey 関数Algid パラメーターにAT_KEYEXCHANGEまたはAT_SIGNATUREが指定されている場合、キーの生成に使用されるアルゴリズム識別子は、使用されるプロバイダーによって異なります。 詳細については、「 ALG_ID」を参照してください。

KP_BLOCKLEN
セッション キーが hKey パラメーターで指定されている場合は、キー暗号のブロック長を取得します。 pbData パラメーターは、ブロック長をビット単位で受け取る DWORD 値へのポインターです。 ストリーム暗号の場合、この値は常に 0 です。

公開キーと秘密キーのペアhKey で指定されている場合は、キー ペアの暗号化の細分性を取得します。 pbData パラメーターは、暗号化粒度を受け取る DWORD 値へのポインターです (ビット単位)。 たとえば、 Microsoft Base Cryptographic Provider は 512 ビット RSA キー ペアを生成するため、これらのキーに対して値 512 が返されます。 公開キー アルゴリズム暗号化がサポートされていない場合、取得された値は未定義です。

KP_CERTIFICATE
pbData は、Distinguished Encoding Rules (DER) を使用してエンコードされた X.509 証明書を受信するバッファーのアドレスです。 証明書公開キーは、対応する署名または交換キーと一致する必要があります。
KP_GET_USE_COUNT
この値は使用されません。
KP_KEYLEN
キーの実際の長さを取得します。 pbData パラメーターは、キーの長さをビット単位で受け取る DWORD 値へのポインターです。 KP_KEYLEN を使用して、任意のキー型の長さを取得できます。 Microsoft 暗号化サービス プロバイダー (CSP) は、CALG_DESの場合は 64 ビット、 CALG_3DES_112の場合は 128 ビット、 CALG_3DESの場合は 192 ビットのキー長を返します。 これらの長さは、CryptGetProvParam 関数の dwParam 値を PP_ENUMALGS に設定してアルゴリズムを列挙するときに返される長さとは異なります。 この呼び出しによって返される長さは、キーに含まれるパリティ ビットを含む、キーの実際のサイズです。

CALG_CYLINK_MEKをサポートする Microsoft CSP ALG_IDは、そのアルゴリズムに対して 64 ビットを返します。 CALG_CYLINK_MEK は 40 ビットのキーですが、キー長を 64 ビットにするためにパリティとゼロキー ビットがあります。

KP_SALT
キーの salt 値 を取得します。 pbData パラメーターは、リトル エンディアン形式で salt 値を受け取る BYTE 配列へのポインターです。 塩の値のサイズは、使用されている CSP とアルゴリズムによって異なります。 Salt 値は 、公開キーと秘密キーのペアには適用されません。
KP_PERMISSIONS
キーのアクセス許可を取得します。 pbData パラメーターは、キーのアクセス許可フラグを受け取る DWORD 値へのポインターです。

現在、次のアクセス許可識別子が定義されています。 キーのアクセス許可には、0 または次の値の 1 つ以上の組み合わせを指定できます。

CRYPT_ARCHIVE
キーのハンドルの有効期間中にエクスポートを許可します。 このアクセス許可は、キーの内部アクセス許可フィールドに既に設定されている場合にのみ設定できます。 このアクセス許可をクリアしようとすると無視されます。
CRYPT_DECRYPT
復号化を許可します。
CRYPT_ENCRYPT
暗号化を許可します。
CRYPT_EXPORT
キーのエクスポートを許可します。
CRYPT_EXPORT_KEY
キーのエクスポートにキーを使用できるようにします。
CRYPT_IMPORT_KEY
キーのインポートにキーを使用できるようにします。
CRYPT_MAC
メッセージ認証コード (MAC) をキーと共に使用できるようにします。
CRYPT_READ
値の読み取りを許可します。
CRYPT_WRITE
値の設定を許可します。
 

デジタル署名標準 (DSS) キーが hKey パラメーターで指定されている場合は、dwParam 値を次のいずれかの値に設定することもできます。

意味
KP_P
DSS キーの係数素数 P を取得します。 pbData パラメーターは、リトル エンディアン形式で値を受け取るバッファーへのポインターです。 pdwDataLen パラメーターには、バッファーのサイズ (バイト単位) が含まれています。
KP_Q
DSS キーの剰余素数 Q を取得します。 pbData パラメーターは、リトル エンディアン形式で値を受け取るバッファーへのポインターです。 pdwDataLen パラメーターには、バッファーのサイズ (バイト単位) が含まれています。
KP_G
DSS キーのジェネレーター G を取得します。 pbData パラメーターは、リトル エンディアン形式で値を受け取るバッファーへのポインターです。 pdwDataLen パラメーターには、バッファーのサイズ (バイト単位) が含まれています。
 

ブロック 暗号セッション キーhKey パラメーターで指定されている場合は、 dwParam 値を次のいずれかの値に設定することもできます。

意味
KP_EFFECTIVE_KEYLEN
RC2 キーの有効なキー長を取得します。 pbData パラメーターは、有効なキー長を受け取る DWORD 値へのポインターです。
KP_IV
キーの初期化ベクトルを取得します。 pbData パラメーターは、初期化ベクトルを受け取る BYTE 配列へのポインターです。 この配列のサイズは、ブロック サイズ (バイト単位) です。 たとえば、ブロック長が 64 ビットの場合、初期化ベクトルは 8 バイトで構成されます。
KP_PADDING
パディング モードを取得します。 pbData パラメーターは、暗号で使用される埋め込みメソッドを識別する数値識別子を受け取る DWORD 値へのポインターです。 これには、次のいずれかの値を指定できます。
PKCS5_PADDING
PKCS 5 (秒 6.2) 埋め込み方法を指定します。
RANDOM_PADDING
埋め込みでは乱数が使用されます。 この埋め込み方法は、Microsoft が提供する CSP ではサポートされていません。
ZERO_PADDING
埋め込みでは 0 が使用されます。 この埋め込み方法は、Microsoft が提供する CSP ではサポートされていません。
KP_MODE
暗号モードを取得します。 pbData パラメーターは、暗号モード識別子を受け取る DWORD 値へのポインターです。 暗号モードの詳細については、「 データ暗号化と暗号化解除」を参照してください。

現在、次の暗号モード識別子が定義されています。

CRYPT_MODE_CBC
暗号モードは 暗号ブロック チェーンです
CRYPT_MODE_CFB
暗号モードは 暗号フィードバック (CFB) です。 Microsoft CSP は現在、暗号フィードバック モードで 8 ビットフィードバックのみをサポートしています。
CRYPT_MODE_ECB
暗号モードは 電子コードブックです。
CRYPT_MODE_OFB
暗号モードは 出力フィードバック (OFB) です。 Microsoft CSP は現在、出力フィードバック モードをサポートしていません。
CRYPT_MODE_CTS
暗号モードは 暗号テキスト ・スティーリング・モードです。
KP_MODE_BITS
フィード バックするビット数を取得します。 pbData パラメーターは、OFB 暗号モードまたは CFB 暗号モードが使用されるときにサイクルごとに処理されるビット数を受け取る DWORD 値へのポインターです。
 

Diffie-Hellman アルゴリズムまたはデジタル署名アルゴリズム (DSA) キーが hKey で指定されている場合は、dwParam 値を次の値に設定することもできます。

意味
KP_VERIFY_PARAMS
Diffie-Hellman アルゴリズムまたは DSA キーのパラメーターを検証します。 pbData パラメーターは使用されず、pdwDataLen が指す値は 0 を受け取ります。

この関数は、キー パラメーターが有効な場合は 0 以外の値を返し、それ以外の場合は 0 を返します。

KP_KEYVAL
この値は使用されません。

Windows Vista、Windows Server 2003、Windows XP: CALG_AGREEDKEY_ANY型のインポートされた Diffie-Hellman アルゴリズム キーから秘密契約値 取得します。 pbData パラメーターは、シークレット アグリーメント値を受け取るバッファーのアドレスです (リトル エンディアン形式)。 このバッファーは、キーと同じ長さである必要があります。 dwFlags パラメーターは、0xF42A19B6に設定する必要があります。 このプロパティは、ローカル システム アカウントで実行されているスレッドによってのみ取得できます。このプロパティは、上記のオペレーティング システムで使用できます。 今後のバージョンでは変更されるか、利用できなくなる場合もあります。

 

証明書が hKey で指定されている場合は、dwParam 値を次の値に設定することもできます。

意味
KP_CERTIFICATE
DER でエンコードされた X.509 証明書を含むバッファー。 pbData パラメーターは使用されず、pdwDataLen が指す値は 0 を受け取ります。

この関数は、キー パラメーターが有効な場合は 0 以外の値を返し、それ以外の場合は 0 を返します。

[out] pbData

データを受信するバッファーへのポインター。 このデータの形式は 、dwParam の値によって異なります。

このバッファーのサイズがわからない場合は、このパラメーターに NULL を 渡し、 pdwDataLen が指す値を 0 に設定することで、実行時に必要なサイズを取得できます。 この関数は、 pdwDataLen が指す値にバッファーの必要なサイズをバイト単位で配置します。 詳細については、「 不明な長さのデータの取得」を参照してください。

[in, out] pdwDataLen

入力時に pbData パラメーターが指すバッファーのサイズ (バイト単位) を含む DWORD 値へのポインター。 関数が戻ると、 DWORD 値にはバッファーに格納されているバイト数が含まれます。

メモ バッファーで返されるデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に指定されたバッファーのサイズよりもわずかに小さい場合があります。 入力時には、可能な最大の出力データがバッファーに収まるように、バッファー サイズが十分な大きさで指定される場合があります。 出力時に、このパラメーターが指す変数が更新され、バッファーにコピーされたデータの実際のサイズが反映されます。
 

[in] dwFlags

このパラメーターは将来使用するために予約されており、0 に設定する必要があります。

戻り値

関数が成功した場合、関数は 0 以外の値を返します。

関数が失敗すると、0 が返されます。 拡張エラー情報については、 GetLastError を呼び出します。

"NTE" の前にあるエラー コードは、使用されている特定の CSP によって生成されます。 考えられるエラー コードには、次のようなものがあります。

リターン コード 説明
ERROR_INVALID_HANDLE
パラメーターの 1 つは、無効なハンドルを指定します。
ERROR_INVALID_PARAMETER
パラメーターの 1 つに無効な値が含まれています。 これは、ほとんどの場合、無効なポインターです。
ERROR_MORE_DATA
pbData パラメーターで指定されたバッファーが、返されたデータを保持するのに十分な大きさでない場合、関数はERROR_MORE_DATA コードを設定し、必要なバッファー サイズをバイト単位で pdwDataLen が指す変数に格納します。
NTE_BAD_FLAGS
dwFlags パラメーターは 0 以外です。
NTE_BAD_KEYまたはNTE_NO_KEY
hKey パラメーターで指定されたキーが無効です。
NTE_BAD_TYPE
dwParam パラメーターは、不明な値番号を指定します。
NTE_BAD_UID
キーの作成時に指定された CSP コンテキスト が見つかりません。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Advapi32.lib
[DLL] Advapi32.dll

こちらもご覧ください

CryptSetKeyParam

キー生成と Exchange 関数