次の方法で共有


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 関数の