Partager via


Fonction CryptSetKeyParam (wincrypt.h)

important cette API est déconseillée. Les logiciels nouveaux et existants doivent commencer à utiliser API de nouvelle génération de chiffrement. Microsoft peut supprimer cette API dans les versions ultérieures.
 
La fonction CryptSetKeyParam personnalise différents aspects des opérations d’une clé de session. Les valeurs définies par cette fonction ne sont pas conservées en mémoire et ne peuvent être utilisées que dans une seule session.

Le fournisseur de chiffrement de base Microsoft n’autorise pas la définition de valeurs pour l’échange de clés ou les clés de signature ; Toutefois, les fournisseurs personnalisés peuvent définir des valeurs qui peuvent être définies pour ses clés.

Syntaxe

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

Paramètres

[in] hKey

Handle vers la clé pour laquelle les valeurs doivent être définies.

[in] dwParam

Les tableaux suivants contiennent des valeurs prédéfinies qui peuvent être utilisées.

Pour tous les types de clés, ce paramètre peut contenir l’une des valeurs suivantes.

Valeur Signification
KP_ALGID
pbData pointe vers une ALG_IDappropriée. Cela est utilisé lors de l’échange de clés de session avec microsoft Base Digital Signature Standard (DSS), Diffie-Hellman fournisseur de chiffrement ou fournisseurs de solutions cloud compatibles. Une fois qu’une clé est acceptée avec la fonction CryptImportKey, la clé de session est activée pour être utilisée en définissant son type d’algorithme.
KP_CERTIFICATE
pbData est l’adresse d’une mémoire tampon qui contient le certificat X.509 qui a été encodé à l’aide de règles d’encodage unique (DER). La clé publique dans le certificat doit correspondre à la signature ou à la clé d’échange correspondante.
KP_PERMISSIONS
pbData pointe vers une valeur DWORD qui spécifie zéro ou plusieurs indicateurs d’autorisation. Pour obtenir une description de ces indicateurs, consultez CryptGetKeyParam.
KP_SALT
pbData pointe vers un tableau BYTE qui spécifie une nouvelle valeur de sel faire partie de la clé de session. La taille de la valeur de sel varie en fonction de l’utilisation du fournisseur de solutions cloud. Avant de définir cette valeur, déterminez la taille de la valeur de sel en appelant la fonction CryptGetKeyParam. Les valeurs salt sont utilisées pour rendre les clés de session plus uniques, ce qui rend les attaques de dictionnaire plus difficiles. La valeur de sel est égale à zéro par défaut pour le fournisseur de chiffrement de base Microsoft.
KP_SALT_EX
pbData pointe vers une structure de CRYPT_INTEGER_BLOB qui contient le sel. Pour plus d’informations, consultez Spécification d’une valeur de sel.
 

Si une clé Digital Signature Standard (DSS) est spécifiée par le paramètre hKey, la valeur dwParam peut également être définie sur l’une des valeurs suivantes.

Valeur Signification
KP_G
pbData pointe vers le générateur G à partir dublob de clé DSS . Les données sont sous la forme d’une structure CRYPT_INTEGER_BLOB, où le membre pbData est la valeur, et le membre cbData est la longueur de la valeur. La valeur est attendue sans informations d’en-tête et dans formulaire little-endian.
KP_P
pbData pointe vers le module principal P d’un objet BLOB de clé DSS. Les données sont sous la forme d’une structure CRYPT_INTEGER_BLOB. Le membre pbData est la valeur, et le membre cbData est la longueur de la valeur. La valeur est attendue sans informations d’en-tête et dans formulaire little-endian.
KP_Q
pbData pointe vers le premier Q d’un objet BLOB de clé DSS. Les données sont sous la forme d’une structure CRYPT_INTEGER_BLOB où le membre pbData est la valeur, et le membre cbData est la longueur de la valeur. La valeur est attendue sans informations d’en-tête et dans formulaire little-endian.
KP_X
Une fois que les valeurs P, Q et G ont été définies, un appel qui spécifie la valeur KP_X pour dwParam et NULL pour le paramètre pbData peut être effectué à la fonction CryptSetKeyParam. Cela entraîne la génération des valeurs X et Y.
 

Si une clé d’algorithme Diffie-Hellman ou DSA (Digital Signature Algorithm) est spécifiée par hKey, la valeur dwParam peut également être définie sur l’une des valeurs suivantes.

Valeur Signification
KP_CMS_DH_KEY_INFO
Définit les informations d’une clé Diffie-Hellman importée. Le paramètre pbData est l’adresse d’une structure CMS_DH_KEY_INFO qui contient les informations clés à définir.
KP_PUB_PARAMS
Définit les paramètres publics (P, Q, G, et ainsi de suite) d’une clé DSS ou Diffie-Hellman. Le handle de clé de cette clé doit être dans l’état PREGEN, généré avec l’indicateur CRYPT_PREGEN. Le paramètre pbData doit être un pointeur vers une structure DATA_BLOB où les données de cette structure sont un objet blob DHPUBKEY_VER3 ou DSSPUBKEY_VER3. La fonction copie les paramètres publics de cette structure CRYPT_INTEGER_BLOB vers le handle de clé. Une fois cet appel effectué, la valeur du paramètre KP_X doit être utilisée avec CryptSetKeyParam pour créer la clé privée réelle. Le paramètre KP_PUB_PARAMS est utilisé en tant qu’appel plutôt que plusieurs appels avec les valeurs de paramètre KP_P, KP_Q et KP_G.
 

Si une clé de sessionde chiffrement de bloc est spécifiée par le paramètre hKey, la valeur dwParam peut également être définie sur l’une des valeurs suivantes.

Valeur Signification
KP_EFFECTIVE_KEYLEN
Ce type de valeur ne peut être utilisé qu’avec des clés RC2 et a été ajouté en raison de l’implémentation de la fonction CryptSetKeyParam dans le fournisseur de chiffrement Microsoft Enhanced avant Windows 2000. Dans l’implémentation précédente, les clés RC2 du fournisseur amélioré étaient de 128 bits en force, mais la longueur de clé effective utilisée pour développer les clés dans la table de clés n’était que de 40 bits. Cela a réduit la puissance de l’algorithme à 40 bits. Pour maintenir la compatibilité descendante, l’implémentation précédente reste la même. Toutefois, la longueur de clé effective peut être définie sur plus de 40 bits à l’aide de KP_EFFECTIVE_KEYLEN dans l’appel CryptSetKeyParam. La longueur de clé effective est passée dans le paramètre pbData en tant que pointeur vers une valeur DWORD avec la valeur de longueur de clé effective. La longueur minimale de clé effective sur le fournisseur de chiffrement de base Microsoft est une et la valeur maximale est de 40. Dans le fournisseur de chiffrement Microsoft Enhanced, le minimum est un et le maximum est de 1 024. La longueur de la clé doit être définie avant le chiffrement ou le déchiffrement avec la clé.
KP_HIGHEST_VERSION
Définit la version la plus élevée transport Layer Security (TLS) autorisée. Cette propriété s’applique uniquement aux clés SSL et TLS. Le paramètre pbData est l’adresse d’une variable DWORD qui contient le numéro de version TLS le plus élevé pris en charge.
KP_IV
pbData pointe vers un tableau BYTE qui spécifie le vecteur d’initialisation. Ce tableau doit contenir éléments BlockLength/8. Par exemple, si la longueur du bloc est de 64 bits, le vecteur d’initialisation se compose de 8 octets.

Le vecteur d’initialisation est défini sur zéro par défaut pour le fournisseur de chiffrement de base Microsoft.

KP_KEYVAL
Définissez la valeur de clé d’une clé Data Encryption Standard (DES). Le paramètre pbData est l’adresse d’une mémoire tampon qui contient la clé. Cette mémoire tampon doit être de la même longueur que la clé. Cette propriété s’applique uniquement aux clés DES.
KP_PADDING
Définissez le mode de remplissage. Le paramètre pbData est un pointeur vers une valeur DWORD qui reçoit un identificateur numérique qui identifie la méthode de remplissage utilisée par lede chiffrement . Il peut s’agir de l’une des valeurs suivantes.
PKCS5_PADDING
Spécifie la méthode de remplissage PKCS 5 (s 6.2).
RANDOM_PADDING
Le remplissage utilise un nombre aléatoire. Cette méthode de remplissage n’est pas prise en charge par les fournisseurs de services cloud fournis par Microsoft.
ZERO_PADDING
Le remplissage utilise des zéros. Cette méthode de remplissage n’est pas prise en charge par les fournisseurs de services cloud fournis par Microsoft.
KP_MODE
pbData pointe vers une valeur DWORD qui spécifie le mode de chiffrement à utiliser. Pour obtenir la liste des modes de chiffrement définis, consultez CryptGetKeyParam. Le mode de chiffrement est défini sur CRYPT_MODE_CBC par défaut pour le fournisseur de chiffrement de base Microsoft.
KP_MODE_BITS
pbData pointe vers une valeur DWORD qui indique le nombre de bits traités par cycle lorsque le mode de chiffrement de commentaires de sortie (OFB) ou mode de chiffrement de commentaires de chiffrement (CFB) est utilisé. Le nombre de bits traités par cycle est défini sur 8 par défaut pour le fournisseur de chiffrement de base Microsoft.
 

Si une clé de RSA est spécifiée dans le paramètre hKey, la valeur du paramètre dwParam peut être la valeur suivante.

Valeur Signification
KP_OAEP_PARAMS
Définissez les paramètres de remplissage de chiffrement asymétrique optimal (OAEP) (PKCS #1 version 2) pour la clé. Le paramètre pbData est l’adresse d’une structure CRYPT_DATA_BLOB qui contient l’étiquette OAEP. Cette propriété s’applique uniquement aux clés RSA.
 

Notez que les valeurs suivantes ne sont pas utilisées :

  • 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

Pointeur vers une mémoire tampon initialisée avec la valeur à définir avant d’appeler CryptSetKeyParam. La forme de ces données varie en fonction de la valeur de dwParam.

[in] dwFlags

Utilisé uniquement lorsque dwParam est KP_ALGID. Le paramètre dwFlags est utilisé pour transmettre des valeurs d’indicateur pour la clé activée. Le paramètre dwFlags peut contenir des valeurs telles que la taille de clé et les autres valeurs d’indicateur autorisées lors de la génération du même type de clé avec CryptGenKey. Pour plus d’informations sur les valeurs d’indicateur autorisées, consultez CryptGenKey.

Valeur de retour

Si la fonction réussit, la valeur de retour est différente de zéro (TRUE).

Si la fonction échoue, la valeur de retour est zéro (FALSE). Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Les codes d’erreur précédés par « NTE » sont générés par le fournisseur de solutions Cloud en cours d’utilisation. Certains codes d’erreur possibles suivent.

Retourner le code Description
ERROR_BUSY
Le contexte CSP est actuellement utilisé par un autre processus .
ERROR_INVALID_HANDLE
L’un des paramètres spécifie un handle qui n’est pas valide.
ERROR_INVALID_PARAMETER
L’un des paramètres contient une valeur qui n’est pas valide. Il s’agit le plus souvent d’un pointeur qui n’est pas valide.
NTE_BAD_FLAGS
Le paramètre dwFlags n’est pas égal à zéro, ou la mémoire tampon pbData contient une valeur qui n’est pas valide.
NTE_BAD_TYPE
Le paramètre dwParam spécifie un paramètre inconnu.
NTE_BAD_UID
Le contexte CSP spécifié lorsque la clé hKey a été créée est introuvable.
NTE_FAIL
La fonction a échoué de manière inattendue.
NTE_FIXEDPARAMETER
Certains fournisseurs de services cloud ont des valeurs P, Q et G codées en dur. Si c’est le cas, l’utilisation de KP_P, de KP_Q et de KP_G pour la valeur de dwParam provoque cette erreur.

Remarques

Si les paramètres KP_Q, KP_P ou KP_X sont définis sur une clé PREGEN Diffie-Hellman ou DSS, les longueurs de clé doivent être compatibles avec la longueur de clé définie à l’aide des 16 bits supérieurs du paramètre dwFlags lors de la création de la clé à l’aide de CryptGenKey. Si aucune longueur de clé n’a été définie dans CryptGenKey, la longueur de la clé par défaut a été utilisée. Cela crée une erreur si une longueur de clé non définie est utilisée pour définir P, Q ou X.

Exemples

Pour obtenir un exemple qui utilise cette fonction, consultez Exemple de programme C : dupliquer une clé de session. Pour plus de code qui utilise cette fonction, consultez Exemple de programme C : définition et obtention de paramètres de clé de session .

Exigences

Exigence Valeur
client minimum pris en charge Windows XP [applications de bureau uniquement]
serveur minimum pris en charge Windows Server 2003 [applications de bureau uniquement]
plateforme cible Windows
d’en-tête wincrypt.h
bibliothèque Advapi32.lib
DLL Advapi32.dll

Voir aussi

ALG_ID

CryptGenKey

CryptGetKeyParam

CryptImportKey

de génération de clés et de fonctions Exchange