¿Qué es HMAC (Código de autenticación de mensajes basado en hash)?

HMAC (Código de autenticación de mensajes basado en hash) es un tipo de código de autenticación de mensajes (MAC) que se adquiere mediante la ejecución de una función hash criptográfica en los datos (es decir) que se van a autenticar y una clave secreta compartida. Como cualquiera de los MAC, se utiliza tanto para la integridad como para la autenticación de los datos. La verificación de la integridad de los datos es necesaria para las partes involucradas en la comunicación. HTTPS, SFTP, FTPS y otros protocolos de transferencia utilizan HMAC. La función hash criptográfica puede ser MD-5, SHA-1 o SHA-256. Las firmas digitales son casi similares a las HMAC, es decir, ambas emplean una función hash y una clave compartida. La diferencia radica en las claves, es decir, los HMAC usan una clave simétrica (misma copia) mientras que las firmas usan asimétrica (dos claves diferentes). 

What-is-HMAC

Historia

Los procesos y decisiones pertinentes a los negocios dependen en gran medida de la integridad. Si los atacantes manipulan estos datos, pueden afectar los procesos y las decisiones comerciales. Por lo tanto, al trabajar en línea a través de Internet, se debe tener cuidado para garantizar la integridad o, al menos, saber si se modifican los datos. Ahí es cuando HMAC entra en uso. 

 Aplicaciones

  • Verificación de la dirección de correo electrónico durante la activación o creación de una cuenta.
  • Autenticación de los datos del formulario que se envían al navegador del cliente y luego se devuelven.
  • Los HMAC se pueden usar para Internet de las cosas (IoT) debido a su menor costo.
  • Siempre que sea necesario restablecer la contraseña, se envía un enlace que se puede usar una vez sin agregar un estado del servidor.
  • Puede tomar un mensaje de cualquier longitud y convertirlo en un resumen de mensaje de longitud fija. Es decir, incluso si recibió un mensaje largo, el resumen del mensaje será pequeño y, por lo tanto, permitirá maximizar el ancho de banda.

Trabajo de HMAC

Los HMAC proporcionan al cliente y al servidor una clave privada compartida que solo ellos conocen. El cliente realiza un hash único (HMAC) para cada solicitud. Cuando el cliente solicita el servidor, procesa los datos solicitados con una clave privada y los envía como parte de la solicitud. Tanto el mensaje como la clave se codifican en pasos separados para que sea seguro. Cuando el servidor recibe la solicitud, crea su propio HMAC. Se comparan ambos HMACS y, si ambos son iguales, el cliente se considera legítimo. 

La fórmula para HMAC:  

 HMAC = hashFunc(secret key + message) 

Hay tres tipos de funciones de autenticación. Son el cifrado de mensajes, el código de autenticación de mensajes y las funciones hash. La principal diferencia entre MAC y hash (HMAC aquí) es la dependencia de una clave. En HMAC tenemos que aplicar la función hash junto con una clave en el texto sin formato. La función hash se aplicará al mensaje de texto sin formato. Pero antes de aplicar, tenemos que calcular S bits y luego agregarlo al texto sin formato y luego aplicar la función hash. Para generar esos S bits hacemos uso de una clave que se comparte entre el emisor y el receptor. 
 

Usando la clave K (0 < K < b), K+ se genera rellenando O en el lado izquierdo de la clave K hasta que la longitud se convierte en b bits. La razón por la que no se rellena a la derecha es el cambio (aumento) en la longitud de la clave. b bits porque es el tamaño de bloque de texto sin formato. Hay dos bits de relleno predefinidos llamados ipad y opad. Todo esto se hace antes de aplicar la función hash al mensaje de texto sin formato. 
 

 ipad - 00110110 
 opad - 01011100

Ahora tenemos que calcular S bits 
K+ se EXORiza con ipad y el resultado es S1 bits que es equivalente a b bits ya que tanto K+ como ipad son b bits. Tenemos que agregar S1 con mensajes de texto sin formato. Sea P el mensaje de texto sin formato. 
S1, p0, p1 hasta Pm cada uno es b bits. m es el número de bloques de texto sin formato. P0 es un bloque de texto sin formato y b es un tamaño de bloque de texto sin formato. Después de agregar S1 al texto sin formato, debemos aplicar el algoritmo HASH (cualquier variante). Simultáneamente, tenemos que aplicar el vector de inicialización (IV), que es un búfer de tamaño n bits. El resultado producido es, por lo tanto, un código hash de n bits, es decir, H(S1 || M). 
De manera similar, los n-bits se rellenan con b-bits y K+ se EXORiza con opad produciendo bits S2 de salida. S2 se agrega a los bits b y una vez más se aplica la función hash con IV al bloque. Esto da como resultado un código hash de n bits que es H( S2 || H( S1 || M )). 

Resumen: 
 

  1. Seleccione K. 
    Si K < b, complete los 0 a la izquierda hasta que k=b. K está entre 0 y b ( 0 < K < b )
  2. EXOR K+ con ipad equivalente a b bits produciendo bits S1.
  3. Agregar S1 con texto sin formato M
  4. Aplique SHA-512 en ( S1 || M )
  5. Rellene n bits hasta que la longitud sea igual a b bits
  6. EXOR K+ con opad equivalente a b bits produciendo S2 bits.
  7. Agregue S2 con la salida del paso 5.
  8. Aplique SHA-512 en el paso 7 para generar un código hash de n bits.

Ventajas

  • Los HMAC son ideales para sistemas de alto rendimiento como enrutadores debido al uso de funciones hash que se calculan y verifican rápidamente a diferencia de los sistemas de clave pública.
  • Las firmas digitales son más grandes que las HMAC, pero las HMAC brindan una seguridad comparablemente mayor.
  • Los HMAC se utilizan en administraciones donde los sistemas de clave pública están prohibidos.

Desventajas 

  • Los HMAC utilizan una clave compartida que puede conducir al no repudio. Si la clave del remitente o del receptor se ve comprometida, será fácil para los atacantes crear mensajes no autorizados.

Publicación traducida automáticamente

Artículo escrito por ajaychawla y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *