Share via


Creación de un HMAC

Para calcular un HMAC

  1. Obtenga un puntero al proveedor de servicios criptográficos (CSP) de Microsoft mediante una llamada a CryptAcquireContext.
  2. Cree un identificador para un objeto hashHMAC llamando a CryptCreateHash. Pase CALG_HMAC en el parámetro Algid . Pase el identificador de una clave simétrica en el parámetro hKey . Esta clave simétrica es la clave que se usa para calcular el HMAC.
  3. Especifique el tipo de hash que se va a usar mediante una llamada a CryptSetHashParam con el parámetro dwParam establecido en el valor HP_HMAC_INFO. El parámetro pbData debe apuntar a una estructura de HMAC_INFO inicializada.
  4. Llame a CryptHashData para empezar a calcular el HMAC de los datos. La primera llamada a CryptHashData hace que el valor de clave se combine mediante el operador XOR con la cadena interna y los datos. El resultado de la operación XOR se aplica un hash y, a continuación, se aplica un algoritmo hash a los datos de destino para el HMAC (al que apunta el parámetro pbData pasado en la llamada a CryptHashData). Si es necesario, se pueden realizar llamadas posteriores a CryptHashData para finalizar el hash de los datos de destino.
  5. Llame a CryptGetHashParam con el parámetro dwParam establecido en HP_HASHVAL. Esta llamada hace que el hash interno finalice y la cadena externa se combine mediante XOR con la clave . El resultado de la operación XOR se aplica un hash y, a continuación, se aplica un hash al resultado del hash interno (completado en el paso anterior). A continuación, el hash externo finaliza y se devuelve en el parámetro pbData y la longitud del parámetro dwDataLen .

Nota

No use la misma clave simétrica (sesión) tanto para el cifrado de mensajes como para la generación del código de autenticación de mensajes (MAC). El uso de la misma clave para ambos aumenta considerablemente el riesgo de que los atacantes descodifiquen los mensajes.