Création d’un HMAC
Pour calculer un HMAC
- Obtenez un pointeur vers le fournisseur de services de chiffrement Microsoft (CSP) en appelant CryptAcquireContext.
- Créez un handle pour un objet de hachageHMAC en appelant CryptCreateHash. Passez CALG_HMAC dans le paramètre Algid . Passez le handle d’une clé symétrique dans le paramètre hKey . Cette clé symétrique est la clé utilisée pour calculer le HMAC.
- Spécifiez le type de hachage à utiliser en appelant CryptSetHashParam avec le paramètre dwParam défini sur la valeur HP_HMAC_INFO. Le paramètre pbData doit pointer vers une structure HMAC_INFO initialisée.
- Appelez CryptHashData pour commencer à calculer le HMAC des données. Le premier appel à CryptHashData entraîne la combinaison de la valeur de clé à l’aide de l’opérateur XOR avec la chaîne interne et les données. Le résultat de l’opération XOR est haché, puis les données cibles du HMAC (pointées par le paramètre pbData passé dans l’appel à CryptHashData) sont hachées. Si nécessaire, des appels ultérieurs à CryptHashData peuvent alors être effectués pour terminer le hachage des données cibles.
- Appelez CryptGetHashParam avec le paramètre dwParam défini sur HP_HASHVAL. Cet appel entraîne la fin du hachage interne et la chaîne externe à combiner à l’aide de XOR avec la clé. Le résultat de l’opération XOR est haché, puis le résultat du hachage interne (terminé à l’étape précédente) est haché. Le hachage externe est ensuite terminé et retourné dans le paramètre pbData et la longueur dans le paramètre dwDataLen .
Notes
N’utilisez pas la même clé symétrique (session) pour le chiffrement des messages et la génération de code d’authentification de message (MAC). L’utilisation de la même clé pour les deux augmente considérablement le risque de décodage des messages par les attaquants.