CryptSetKeyParam 関数 (wincrypt.h)

重要 この API は非推奨です。 新規および既存のソフトウェアでは、Cryptography Next Generation API の使用を開始する必要があります。 Microsoft は、今後のリリースでこの API を削除する可能性があります。
 
CryptSetKeyParam 関数は、セッション キーの操作のさまざまな側面をカスタマイズします。 この関数によって設定された値はメモリに保持されず、1 つのセッションでのみ使用できます。

Microsoft Base Cryptographic Provider では、キー交換キーまたは署名キーの値の設定は許可されません。ただし、カスタム プロバイダーでは、キーに設定できる値を定義できます。

構文

BOOL CryptSetKeyParam(
  [in] HCRYPTKEY  hKey,
  [in] DWORD      dwParam,
  [in] const BYTE *pbData,
  [in] DWORD      dwFlags
);

パラメーター

[in] hKey

値を設定するキーのハンドル。

[in] dwParam

次の表には、使用できる定義済みの値が含まれています。

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

価値 意味
KP_ALGID
pbData は、適切な ALG_IDを指します。 これは、Microsoft Base Digital Signature Standard (DSS)、Diffie-Hellman 暗号化プロバイダー、または互換性のある CSP とセッション キーを交換するときに使用されます。 CryptImportKey 関数とキーが合意されると、セッション キーはアルゴリズムの種類を設定して使用できるようになります。
KP_CERTIFICATE
pbData は、識別エンコード規則 (DER) を使用してエンコードされた X.509 証明書を含むバッファーのアドレスです。 証明書の公開キーは、対応する署名または交換キーと一致する必要があります。
KP_PERMISSIONS
pbData は、0 個以上のアクセス許可フラグを指定する DWORD 値を指します。 これらのフラグの詳細については、CryptGetKeyParamを参照してください。
KP_SALT
pbData は、セッション キーの一部として作成 新しい salt 値を指定する BYTE 配列を指します。 salt 値のサイズは、使用されている CSP によって異なります。 この値を設定する前に、CryptGetKeyParam 関数を呼び出して、salt 値のサイズを決定します。 Salt 値は、セッション キーをより一意にするために使用され、ディクショナリ攻撃がより困難になります。 既定では、Microsoft Base Cryptographic Provider の salt 値は 0 です。
KP_SALT_EX
pbData は、salt を含む CRYPT_INTEGER_BLOB 構造体を指します。 詳細については、「Salt Valueの指定」を参照してください。
 

Digital Signature Standard (DSS) キーが hKey パラメーターで指定されている場合は、dwParam 値を次のいずれかの値に設定することもできます。

価値 意味
KP_G
pbData は、DSS キー BLOBからジェネレーター G を指します。 データは CRYPT_INTEGER_BLOB 構造体の形式で、pbData メンバーは値、cbData メンバーは値の長さです。 この値は、ヘッダー情報がなく、リトル エンディアン 形式 必要です。
KP_P
pbData は、DSS キー BLOB の素数 P を指します。 データは、CRYPT_INTEGER_BLOB 構造の形式です。 pbData メンバーは値、cbData メンバーは値の長さです。 この値は、ヘッダー情報がなく、リトル エンディアン 形式 必要です。
KP_Q
pbData は、DSS キー BLOB の素数 Q を指します。 データは、pbData メンバーが値である CRYPT_INTEGER_BLOB 構造体の形式で、cbData メンバーは値の長さです。 この値は、ヘッダー情報がなく、リトル エンディアン 形式 必要です。
KP_X
P、Q、および G の値を設定した後、pbData パラメーター の dwParam および NULL のKP_X値を指定する呼び出しを、CryptSetKeyParam 関数に対して行うことができます。 これにより、X と Y の値が生成されます。
 

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

価値 意味
KP_CMS_DH_KEY_INFO
インポートされた Diffie-Hellman キーの情報を設定します。 pbData パラメーターは、設定するキー情報を含む CMS_DH_KEY_INFO 構造体のアドレスです。
KP_PUB_PARAMS
DSS または Diffie-Hellman キーのパブリック パラメーター (P、Q、G など) を設定します。 このキーのキー ハンドルは、CRYPT_PREGEN フラグで生成された PREGEN 状態である必要があります。 pbData パラメーターは、この構造体内のデータがDHPUBKEY_VER3またはDSSPUBKEY_VER3 BLOB である DATA_BLOB 構造体へのポインターである必要があります。 この関数は、この CRYPT_INTEGER_BLOB 構造体からキー ハンドルにパブリック パラメーターをコピーします。 この呼び出しが行われた後、KP_X パラメーター値を CryptSetKeyParam と共に使用して、実際の秘密キーを作成する必要があります。 KP_PUB_PARAMS パラメーターは、パラメーター値がKP_P、KP_Q、およびKP_Gを持つ複数の呼び出しではなく、1 つの呼び出しとして使用されます。
 

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

価値 意味
KP_EFFECTIVE_KEYLEN
この値型は RC2 キーでのみ使用でき、Windows 2000 より前の Microsoft Enhanced Cryptographic Provider で CryptSetKeyParam 関数が実装されているため追加されています。 前の実装では、拡張プロバイダーの RC2 キーは 128 ビットの強度でしたが、キーテーブルにキーを拡張するために使用される有効なキー長はわずか40ビットでした。 これにより、アルゴリズムの強度が 40 ビットに低下しました。 下位互換性を維持するために、前の実装はそのまま残ります。 ただし、有効なキー長は、CryptSetKeyParam 呼び出しでKP_EFFECTIVE_KEYLENを使用して 40 ビットを超える値に設定できます。 有効なキーの長さは、有効なキー長の値を持つ DWORD 値へのポインターとして、pbData パラメーターに渡されます。 Microsoft Base Cryptographic Provider の有効なキーの最小長は 1 で、最大値は 40 です。 Microsoft Enhanced Cryptographic Provider では、最小値は 1、最大値は 1,024 です。 キーを使用して暗号化または復号化する前に、キーの長さを設定する必要があります。
KP_HIGHEST_VERSION
許可されるトランスポート層セキュリティ (TLS) バージョンの を設定します。 このプロパティは、SSL キーと TLS キーにのみ適用されます。 pbData パラメーターは、サポートされている TLS バージョン番号が最も大きい DWORD 変数のアドレスです。
KP_IV
pbData は、初期化ベクトルを指定する BYTE 配列を指します。 この配列には、/8 要素 BlockLength含まれている必要があります。 たとえば、ブロック長が 64 ビットの場合、初期化ベクトルは 8 バイトで構成されます。

初期化ベクトルは、Microsoft Base Cryptographic Provider の既定では 0 に設定されます。

KP_KEYVAL
Data Encryption Standard (DES) キーのキー値を設定します。 pbData パラメーターは、キーを含むバッファーのアドレスです。 このバッファーは、キーと同じ長さにする必要があります。 このプロパティは DES キーにのみ適用されます。
KP_PADDING
パディング モードを設定します。 pbData パラメーターは、暗号で使用される 埋め込み メソッドを識別する数値識別子を受け取る DWORD 値へのポインターです。 次のいずれかの値を指定できます。
PKCS5_PADDING
PKCS 5 (秒 6.2) 埋め込み方法を指定します。
RANDOM_PADDING
埋め込みでは、乱数が使用されます。 この埋め込み方法は、Microsoft が提供する CSP ではサポートされていません。
ZERO_PADDING
埋め込みではゼロが使用されます。 この埋め込み方法は、Microsoft が提供する CSP ではサポートされていません。
KP_MODE
pbData は、使用する 暗号モード を指定する DWORD 値を指します。 定義済みの暗号モードの一覧については、CryptGetKeyParamを参照してください。 暗号化モードは、Microsoft Base Cryptographic Provider に対して既定でCRYPT_MODE_CBCに設定されます。
KP_MODE_BITS
pbData は、出力フィードバック (OFB) または 暗号フィードバック (CFB) 暗号モードを使用するときに、サイクルごとに処理されるビット数を示す DWORD 値を指します。 Microsoft Base Cryptographic Provider の場合、サイクルごとに処理されるビット数は既定で 8 に設定されます。
 

hKey パラメーターに RSA キーが指定されている場合、dwParam パラメーターの値は次の値になります。

価値 意味
KP_OAEP_PARAMS
キーの最適非対称暗号化パディング (OAEP) (PKCS #1 バージョン 2) パラメーターを設定します。 pbData パラメーターは、OAEP ラベルを含む CRYPT_DATA_BLOB 構造体のアドレスです。 このプロパティは RSA キーにのみ適用されます。
 

次の値は使用されないことに注意してください。

  • KP_ADMIN_PIN
  • KP_CMS_KEY_INFO
  • KP_INFO
  • KP_KEYEXCHANGE_PIN
  • KP_PRECOMP_MD5
  • KP_PRECOMP_SHA
  • KP_PREHASH
  • KP_PUB_EX_LEN
  • KP_PUB_EX_VAL
  • KP_RA
  • KP_RB
  • KP_ROUNDS
  • KP_RP
  • KP_SIGNATURE_PIN
  • KP_Y

[in] pbData

CryptSetKeyParamを呼び出す前に設定する値で初期化 バッファーへのポインター。 このデータの形式は、dwParam値によって異なります。

[in] dwFlags

dwParam がKP_ALGIDされている場合にのみ使用されます。 dwFlags パラメーターは、有効なキーのフラグ値を渡すために使用されます。 dwFlags パラメーターは、CryptGenKeyで同じ種類のキーを生成するときに許可されるキー サイズやその他のフラグ値などの値を保持できます。 使用可能なフラグ値については、CryptGenKeyを参照してください。

戻り値

関数が成功した場合、戻り値は 0 以外 (TRUE) です。

関数が失敗した場合、戻り値は 0 (FALSE) です。 拡張エラー情報については、GetLastError呼び出します。

"NTE" で開始されるエラー コードは、使用されている特定の CSP によって生成されます。 考えられるエラー コードの一部を次に示します。

リターン コード 形容
ERROR_BUSY
CSP コンテキストは現在、別の プロセスによって使用されています。
ERROR_INVALID_HANDLE
パラメーターの 1 つは無効なハンドルを指定します。
ERROR_INVALID_PARAMETER
パラメーターの 1 つに無効な値が含まれています。 これは、多くの場合、無効なポインターです。
NTE_BAD_FLAGS
dwFlags パラメーターが 0 以外であるか、pbData バッファーに無効な値が含まれています。
NTE_BAD_TYPE
dwParam パラメーターは、不明なパラメーターを指定します。
NTE_BAD_UID
hKey キーが作成されたときに指定された CSP コンテキストが見つかりません。
NTE_FAIL
予期しない方法で関数が失敗しました。
NTE_FIXEDPARAMETER
一部の CSP には、P、Q、G の値がハードコーディングされています。 その場合、dwParam の値にKP_P、KP_Q、KP_G 使用すると、このエラーが発生します。

備考

PREGEN Diffie-Hellman または DSS キーにKP_Q、KP_P、またはKP_Xパラメーターが設定されている場合、キーの長さは、CryptGenKeyを使用してキーが作成されたときに、dwFlags パラメーターの上位 16 ビットを使用して設定 キーの長さと互換性がある必要があります。 CryptGenKeyでキーの長さが設定されていない場合は、既定のキーの長さが使用されました。 既定以外のキー長を使用して P、Q、または X を設定すると、エラーが発生します。

この関数を使用する例については、「例 C プログラム: セッション キーの複製」を参照してください。 この関数を使用するその他のコードについては、「サンプル C プログラム: セッション キー パラメーターの設定と取得」 を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wincrypt.h
ライブラリ Advapi32.lib
DLL Advapi32.dll

関連項目

ALG_ID

CryptGenKey

CryptGetKeyParam

CryptImportKey

キー生成と Exchange 関数の