Compartilhar via


Função BCryptKeyDerivation (bcrypt.h)

A função BCryptKeyDerivation deriva uma chave sem exigir um contrato secreto. Ele é semelhante na funcionalidade a BCryptDeriveKey , mas não requer um valor de BCRYPT_SECRET_HANDLE como entrada.

Sintaxe

NTSTATUS BCryptKeyDerivation(
  [in]           BCRYPT_KEY_HANDLE hKey,
  [in, optional] BCryptBufferDesc  *pParameterList,
  [out]          PUCHAR            pbDerivedKey,
  [in]           ULONG             cbDerivedKey,
  [out]          ULONG             *pcbResult,
  [in]           ULONG             dwFlags
);

Parâmetros

[in] hKey

Identificador da chave de entrada.

[in, optional] pParameterList

Ponteiro para uma estrutura BCryptBufferDesc que contém os parâmetros KDF. Esse parâmetro é opcional e pode ser NULL se não for necessário. Os parâmetros podem ser específicos para uma função de derivação de chave (KDF) ou genérica. A tabela a seguir mostra os parâmetros obrigatórios e opcionais para KDFs específicos implementados pelo provedor Primitivo da Microsoft.

KDF Parâmetro Obrigatório
SP800-108 HMAC no modo de contador KDF_LABEL sim
KDF_CONTEXT sim
KDF_HASH_ALGORITHM sim
SP800-56A KDF_ALGORITHMID sim
KDF_PARTYUINFO sim
KDF_PARTYVINFO sim
KDF_HASH_ALGORITHM sim
KDF_SUPPPUBINFO não
KDF_SUPPPRIVINFO não
PBKDF2 KDF_HASH_ALGORITHM sim
KDF_SALT sim
KDF_ITERATION_COUNT não
CAPI_KDF KDF_HASH_ALGORITHM sim
 

O seguinte parâmetro genérico pode ser usado:

  • KDF_GENERIC_PARAMETER
Parâmetros genéricos são mapeados para parâmetros específicos do KDF da seguinte maneira:

SP800-108 HMAC no modo de contador:

  • 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 – o padrão é 10000

CAPI_KDF

  • KDF_GENERIC_PARAMETER = Não usado

[out] pbDerivedKey

Endereço de um buffer que recebe a chave. O parâmetro cbDerivedKey contém o tamanho desse buffer.

[in] cbDerivedKey

Tamanho, em bytes, do buffer apontado pelo parâmetro pbDerivedKey .

[out] pcbResult

Ponteiro para uma variável que recebe o número de bytes que foram copiados para o buffer apontado pelo parâmetro pbDerivedKey .

[in] dwFlags

Sinalizadores que modificam o comportamento dessa função. O valor a seguir pode ser usado com o provedor Microsoft Primitive.

Valor Significado
BCRYPT_CAPI_AES_FLAG
Especifica que o algoritmo de destino é AES e que, portanto, a chave deve ser expandida duas vezes. Esse sinalizador só é válido com o algoritmo CAPI_KDF.

Retornar valor

Retorna um código status que indica o êxito ou a falha da função.

Comentários

Você pode usar os seguintes identificadores de algoritmo na função BCryptOpenAlgorithmProvider antes de chamar BCryptKeyDerivation:

  • BCRYPT_CAPI_KDF_ALGORITHM
  • BCRYPT_SP800108_CTR_HMAC_ALGORITHM
  • BCRYPT_SP80056A_CONCAT_ALGORITHM
  • BCRYPT_PBKDF2_ALGORITHM
Para chamar essa função no modo kernel, use Cng.lib, que faz parte do DDK (Driver Development Kit). Windows Server 2008 e Windows Vista: Para chamar essa função no modo kernel, use Ksecdd.lib.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho bcrypt.h
Biblioteca Bcrypt.lib
DLL Bcrypt.dll

Confira também

BCryptDeriveKey

NCryptKeyDerivation