¿Cómo y cuándo uso HMAC?

121

Estaba leyendo HMAC en wikipedia y estaba confundido sobre algunos puntos.

  1. ¿Dónde uso HMAC?
  2. ¿Por qué es la parte clave del hash?
  3. Incluso si alguien usó con éxito un "ataque de extensión de longitud", ¿sería útil para el atacante?
pregunta 13.09.2012 - 13:22
fuente

5 respuestas

115

Un código de autenticación de mensaje (MAC) se genera a partir de un mensaje y una clave secreta mediante un algoritmo MAC. Una propiedad importante de un MAC es que es imposible producir el MAC de un mensaje y una clave secreta sin conocer la clave secreta. Un MAC del mismo mensaje producido por una clave diferente no parece estar relacionado. Incluso saber el MAC de otros mensajes no ayuda a calcular el MAC de un mensaje nuevo.

Un HMAC es un MAC que se basa en un función de hash . La idea básica es concatenar la clave y el mensaje y juntarlos. Dado que es imposible, dado un hash criptográfico, descubrir de qué se trata el hash, saber que el hash (o incluso una colección de dichos hashes) no permite encontrar la clave. La idea básica no funciona, en parte debido a los ataques de extensión de longitud , por lo que la construcción real de HMAC es un poco más complicado. Para obtener más información, navegue por la etiqueta hmac en Cryptography Stack Exchange , especialmente ¿Por qué H (k || x) no es una construcción MAC segura? , ¿Es H (k || longitud || x) una construcción MAC segura? y HMAC vs funciones MAC . Hay otras formas de definir un MAC, por ejemplo, algoritmos de MAC basados en cifrados de bloque como CMAC .

Un MAC autentica un mensaje. Si Alice ve un mensaje y un MAC y conoce la clave secreta asociada, puede verificar que el MAC fue producido por un principal que conoce la clave haciendo el cálculo de MAC por sí mismo. Por lo tanto, si un mensaje viene con un MAC correcto adjunto, significa que este mensaje fue visto por un titular de la clave secreta en algún momento. Un MAC es una firma basada en una clave secreta, que proporciona garantías similares a un esquema de firma basado en criptografía de clave pública, como los esquemas basados en RSA donde la firma debe haber sido realizada por un principal en posesión de la clave privada.

Por ejemplo, supongamos que Alice se guarda su clave secreta y solo la usa para calcular los mensajes MAC que almacena en un servidor en la nube u otro medio de almacenamiento no confiable. Si luego lee un mensaje y ve un MAC correcto adjunto, sabe que este es uno de los mensajes que almacenó en el pasado.

Un HMAC por sí mismo no proporciona integridad de mensajes. Puede ser uno de los componentes en un protocolo que proporciona integridad. Por ejemplo, suponga que Alice almacena versiones sucesivas de varios archivos en un medio no confiable, junto con sus MAC. (Una vez más, asumimos que solo Alice conoce la clave secreta). Si lee un archivo con un MAC correcto, sabe que lo que leyó es una versión anterior de algún archivo que almacenó. Un atacante que controla los medios de almacenamiento aún podría devolver versiones anteriores del archivo o un archivo diferente. Una posible forma de proporcionar integridad de almacenamiento en este escenario sería incluir el nombre del archivo y un número de versión como parte de los datos cuyo MAC se calcula; Alice tendría que recordar el número de la última versión de cada archivo para verificar que no se le han dado datos obsoletos. Otra forma de garantizar la integridad sería que Alicia recuerde el MAC de cada archivo (pero un hash funcionaría igual de bien en este escenario en particular).

¹ "Imposible", ya que requiere mucho más poder de cómputo de lo que es realmente posible.

    
respondido por el Gilles 18.09.2012 - 03:01
fuente
41

HMAC es una "firma" calculada que a menudo se envía junto con algunos datos. El HMAC se utiliza para verificar (autenticar) que los datos no se han alterado o reemplazado. Aquí hay una metáfora:

Va a enviar un paquete a Sarah que contiene una fotografía. Esperas que ella abra el paquete y vea la fotografía. En algún momento en el futuro cercano, usted espera que ella le envíe de vuelta el paquete con esa fotografía. Es vital que vuelva a poner la misma fotografía en el paquete. Debe estar absolutamente seguro de que no le envíe una fotografía alterada ni un poco ni la reemplace por otra diferente. Tienes cientos de estos paquetes que salen diariamente con fotos diferentes; nunca recordarías la foto con tanto detalle que pudieras decir si ella cambió un poco de ella (como si le aplicara una pequeña porción de zumo en la cara).

Esto es lo que puede hacer: antes de enviarle el paquete, coloque otra copia de la fotografía dentro de una pequeña caja cerrada. Guarde la llave Coloque la pequeña caja cerrada dentro del paquete junto con la fotografía original que le está enviando. Suponga que sabe que no debe quitar la caja bloqueada del paquete. Cuando reciba el paquete de vuelta de ella, ábralo, coloque la foto en la mesa. Abra la caja bloqueada, quite la copia, compare los dos. Si son iguales, entonces ella no ha alterado la fotografía (es "auténtica"). Si la caja bloqueada no está en el paquete o su llave no la abrirá, asuma que ella ha hecho algo nefasto y tire todo el paquete a la basura. La belleza aquí es que no necesita "recordar" nada sobre lo que le envió originalmente; Todo lo que necesita para garantizar la legitimidad de la foto vuelve dentro del paquete.

En el ejemplo anterior, el pequeño cuadro bloqueado representa un HMAC. Su clave es la clave del HMAC. La fotografía es la información a la que está aplicando el HMAC.

Lo anterior es una metáfora de ida y vuelta donde solo usted tiene una llave. En una situación diferente, digamos que a menudo envías paquetes a Tommy. Le preocupa que los portadores de correo curiosos puedan abrir sus paquetes y reemplazar las fotografías o cambiarlas. Haces lo mismo con la caja bloqueada, excepto que en este caso, permites que Tommy tenga una copia de la llave, de modo que cuando reciba un paquete, pueda abrir la caja bloqueada incluida y comparar las fotos por sí mismo. Si al recibirlo encuentra que las fotos son diferentes, su llave no abre la caja o si falta la caja, sabe que algo es sospechoso.

Las metáforas anteriores describen por qué se necesitan los HMAC, pero no tanto cómo funcionan. Cambiemos la metáfora de nuevo para acercarnos más a cómo funcionan:

Mantengamos la imagen mental del paquete con la fotografía: desea enviarlo por correo, luego recibirlo nuevamente como antes, asegurándose de que la foto no haya sido alterada o reemplazada por el receptor, o durante el viaje de ida y vuelta.

Antes de cerrar el paquete y enviarlo por correo, debe hacer una copia de la fotografía. No hay caja bloqueada esta vez, en lugar de eso, cepilla la copia con una mezcla de químicos líquidos. Solo usted conoce la receta (clave) para esta mezcla, y cada vez que cepilla una copia, usa exactamente los mismos pinceladas. La mezcla hará girar y desdibujará la copia de la fotografía en algo que se asemeja al arte moderno; llamémoslo un HMAC. No está exactamente seguro de cómo se verá después de que se seque, pero sabe que si cepilla dos fotos idénticas con la misma receta y los mismos trazos de pincel, los HMAC resultantes tendrán el mismo aspecto. Así que coloca el HMAC seco en el paquete junto con la fotografía original y se lo envías a Sarah.

Cuando recuperas el paquete de Sarah, contiene lo que esperas que sea la fotografía original sin alterar, junto con lo que esperas que sea el HMAC que creaste e incluyó con él. Saque la fotografía del paquete, cópiela y cree otro HMAC con esa copia (aplique su mezcla / trazos de pincel). Compare el HMAC que acaba de crear con el HMAC que regresó en el paquete. Si son idénticos, puede estar seguro de que Sarah y los carteros no alteraron la fotografía.

Si Sarah había alterado la foto, entonces los HMAC no serán idénticos. Si Sarah hubiera alterado el HMAC, entonces los HMAC no serán idénticos. Si Sarah alteró la foto y trató de crear un nuevo HMAC, entonces los HMAC no serán idénticos (no conoce su receta).

Por lo tanto, usted sabe si la foto (datos) es auténtica o no, que es exactamente para lo que se utilizan los HMAC.

    
respondido por el Dave 27.09.2014 - 03:45
fuente
23

La respuesta corta es "HMAC proporciona firmas digitales utilizando claves simétricas en lugar de PKI". Esencialmente, si no desea lidiar con las complejidades de las claves públicas / privadas, la raíz de la confianza y las cadenas de certificados, aún puede tener una firma digital confiable con HMAC. HMAC se basa en la criptografía de clave simétrica con secretos precompartidos en lugar de pares privados / públicos. El inconveniente es el mismo que con la criptografía de clave simétrica en general: ahora debe preocuparse por la distribución y protección de sus claves secretas.

    
respondido por el dtoubelis 08.04.2015 - 18:06
fuente
10

1. Utiliza HMAC siempre que desee integridad de los datos mantenidos (y autenticidad)

2. La clave es parte del HMAC, ya que se trata de un secreto compartido que solo se conoce entre 2 partes y solo ellas pueden crear el HMAC y nadie más. (Asegura la autenticidad )

3. Los ataques de extensión de longitud no son posibles en HMAC. Los MAC, por otro lado, simplemente agregan una clave al mensaje, que es susceptible a él. Se introdujo HMAC para superar este ataque en los MAC.

    
respondido por el sudhacker 13.09.2012 - 15:37
fuente
4
  • Los HMACS se usan cuando necesita verificar dos "integridad" y "autenticidad". Por ejemplo: considere un escenario en el que se le envía una parte de los datos junto con su hash: puede verificar la integridad del mensaje volviendo a calcular el hash del mensaje y comparándolo con el hash que recibió. Sin embargo, no está seguro si el mensaje y el hash fueron enviados por alguien que conocía o en quien confiaba. Si hubiera recurrido al uso de HMACS, podría volver a calcular el HMAC usando una clave secreta que solo usted y una parte confiable conocen, y compararlo con el HMAC que acaba de recibir, en efecto, cumpliendo el propósito de "autenticidad". p>

  • Como mencioné anteriormente, el secreto de la clave garantiza que el HMAC fue computado por una parte confiable.

  • Los HMACS no son hashes con clave. Los ataques de extensión de longitud son posibles cuando usas hashes con clave, no HMACS. Para obtener más información, puede consultar esta .

[EDITAR]

Respuesta editada para responder a los comentarios a continuación: "¿Todavía no entiendo por qué la clave está en el mensaje? ¿No conozco la clave pública de la fiesta? Si conozco la clave pública, entonces ¿por qué está la clave en el mensaje? mensaje en lugar de utilizar la clave ya conocida? Si no conozco la clave, ¿por qué confiaría en esa parte? "

  • La clave no está "en" el mensaje. La clave es usada para generar el HMAC a partir de un mensaje. La clave utilizada para generar HMACS no es ninguna "clave pública". Es más como un secreto compartido entre dos partes. Puede consultar el método de autenticación de la API REST para que las cosas de AWS comprendan mejor cómo se utilizan los HMACS para la firma de URL.
respondido por el user1187 13.09.2012 - 13:50
fuente

Lea otras preguntas en las etiquetas