NCryptKeyDerivation 関数 (ncrypt.h)

NCryptKeyDerivation 関数は、指定されたキー派生関数を使用して、別のキーからキーを作成します。 関数は、バイト配列内のキーを返します。

構文

SECURITY_STATUS NCryptKeyDerivation(
  [in]  NCRYPT_KEY_HANDLE hKey,
  [in]  NCryptBufferDesc  *pParameterList,
  [out] PUCHAR            pbDerivedKey,
  [in]  DWORD             cbDerivedKey,
  [out] DWORD             *pcbResult,
  [in]  ULONG             dwFlags
);

パラメーター

[in] hKey

キー派生関数 (KDF) キーのハンドル。

[in] pParameterList

KDF パラメーターを含む NCryptBufferDesc 構造体のアドレス。 パラメーターは、KDF またはジェネリックに固有にすることができます。 次の表は、Microsoft ソフトウェア キー ストレージ プロバイダーによって実装される特定の KDF に必要なパラメーターと省略可能なパラメーターを示しています。

Kdf パラメーター 必須
カウンター モードの SP800-108 HMAC KDF_LABEL はい
KDF_CONTEXT はい
KDF_HASH_ALGORITHM はい
SP800-56A KDF_ALGORITHMID はい
KDF_PARTYUINFO はい
KDF_PARTYVINFO はい
KDF_HASH_ALGORITHM はい
KDF_SUPPPUBINFO no
KDF_SUPPPRIVINFO no
PBKDF2 KDF_HASH_ALGORITHM はい
KDF_SALT はい
KDF_ITERATION_COUNT no
CAPI_KDF KDF_HASH_ALGORITHM はい
 

次のジェネリック パラメーターを使用できます。

  • KDF_GENERIC_PARAMETER
ジェネリック パラメーターは、次の方法で KDF 固有のパラメーターにマップされます。

カウンター モードの SP800-108 HMAC:

  • KDF_GENERIC_PARAMETER = KDF_LABEL||0x00||KDF_CONTEXT

SP800-56A

  • KDF_GENERIC_PARAMETER = KDF_ALGORITHMID ||KDF_PARTYUINFO ||KDF_PARTYVINFO {||KDF_SUPPPUBINFO } {||KDF_SUPPPRIVINFO }

PBKDF2

  • KDF_GENERIC_PARAMETER = KDF_SALT
  • KDF_ITERATION_COUNT – 既定値は 10000 です

CAPI_KDF

  • KDF_GENERIC_PARAMETER = 使用されていません

[out] pbDerivedKey

キーを受け取るバッファーのアドレス。 cbDerivedKey パラメーターには、キー バッファーのサイズ (バイト単位) が含まれています。

[in] cbDerivedKey

pbDerivedKey パラメーターが指すバッファーのサイズ (バイト単位)。

[out] pcbResult

pbDerivedKey パラメーターによって指されるバッファーにコピーされたバイト数を受け取る DWORD へのポインター。

[in] dwFlags

関数の動作を変更するフラグ。 Microsoft ソフトウェア キー ストレージ プロバイダーでは、次の値を使用できます。

意味
BCRYPT_CAPI_AES_FLAG
ターゲット アルゴリズムが AES であり、したがってキーを二重展開する必要があることを指定します。 このフラグは、CAPI_KDF アルゴリズムでのみ有効です。
NCRYPT_SILENT_FLAG
キー サービス プロバイダー (KSP) にユーザー インターフェイスが表示されないことを要求します。 プロバイダーが操作する UI を表示する必要がある場合、呼び出しは失敗し、KSP は NTE_SILENT_CONTEXT エラー コードを最後のエラーとして設定する必要があります。

戻り値

関数の成功または失敗を示す状態コードを返します。

可能なリターン コードには、次のものが含まれますが、これらに限定されません。

リターン コード 説明
ERROR_SUCCESS
関数は成功しました。
NTE_INVALID_HANDLE
hProvider または hKey ハンドルが無効です。
NTE_INVALID_PARAMETER
pwszDerivedKeyAlg パラメーターと pParameterList パラメーターを NULL にすることはできません。
NTE_NO_MEMORY
キーを作成するのに十分なメモリが不足していました。
NTE_NOT_SUPPORTED
この関数は、キー ストレージ プロバイダーではサポートされていません。

注釈

NCryptKeyDerivation を呼び出す前に、NCryptCreatePersistedKey 関数で次のアルゴリズム識別子を使用できます。

  • BCRYPT_CAPI_KDF_ALGORITHM
  • BCRYPT_SP800108_CTR_HMAC_ALGORITHM
  • BCRYPT_SP80056A_CONCAT_ALGORITHM
  • BCRYPT_PBKDF2_ALGORITHM

要件

要件
サポートされている最小のクライアント Windows 8 [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー ncrypt.h
Library Ncrypt.lib
[DLL] Ncrypt.dll

こちらもご覧ください

BCryptKeyDerivation

NCryptDeriveKey