it-swarm-es.com

¿Cuál es la diferencia entre MAC y hash?

¿Cuál es la diferencia entre los dos algoritmos?
Una diferencia que conozco es que MAC está codificado y el hash no.

32
user1157

Para hacerlo simple: generalmente un MAC es un valor Hash cifrado con una clave secreta. Por ejemplo, los atacantes pueden falsificar mensajes y calcular un nuevo hash, pero él no puede hacerlo si el sistema requiere que el hash se cifre con una clave secreta.

7
Aleksandr Reznik

A función hash criptográfica es una función hash determinista completamente pública que todos pueden calcular a través de entradas arbitrarias. Toma como entrada una secuencia de bits (cualquier secuencia de bits; algunas funciones hash están formalmente limitadas a entradas de, digamos, menos 264 bits, también conocido como "2 millones de terabytes") y genera valores en un espacio bastante pequeño, generalmente una secuencia de bits con un tamaño fijo (por ejemplo, siempre 160 bits con la función hash estándar SHA-1 ). Las buenas funciones hash criptográficas respetan algunas condiciones que se reducen, de manera informal, a que mezclan datos de entrada tan a fondo que no podemos resolverlos después.

Un código de autenticación del mensaje es un algoritmo que toma como entrada un mensaje y una clave secreta y produce una salida de tamaño fijo que puede verificarse posteriormente para que coincida con el mensaje; la verificación también requiere la misma clave secreta. Contrariamente a las funciones hash donde todo se sabe y los atacantes luchan contra las matemáticas, MAC tiene sentido en modelos donde hay entidades con conocimiento de un secreto. Lo que esperamos de un buen MAC es la imposibilidad de olvidar: no debería ser factible calcular un mensaje de par + valor de MAC que se verifique con éxito con una clave dada [~ # ~] k [~ # ~] sin sabiendo [~ # ~] k [~ # ~] exactamente y en su totalidad.

Las funciones de hash y MAC son, por lo tanto, distintos tipos de algoritmos con propiedades distintas y utilizados en situaciones realmente distintas.

Algunos algoritmos MAC (pero ciertamente no todos) pueden considerarse como "funciones hash con una clave", pero esta es una vista restrictiva. HMAC es una construcción MAC bien conocida, que se basa en una función hash subyacente de una manera inteligente. De hecho, las propiedades de seguridad y los modelos para las funciones hash y MAC son lo suficientemente distintos entre sí que golpear una función hash y una tecla juntas no necesariamente produce un MAC seguro, incluso si la función hash es seguro (vea ataque de extensión de longitud que ilustra ese punto).

Hasta cierto punto, podemos afirmar que un algoritmo MAC que puede funcionar de forma segura sin un IV debe exhibir algunas propiedades de tipo hash (esa es la razón por la que me gusta HMAC: sin un IV, es mucho más difícil equivocarse al implementarlo). Sin embargo, el diablo está en los detalles.

34
Thomas Pornin

Son dos primitivas totalmente diferentes. Se utiliza un MAC para la autenticación de mensajes, y es una primitiva simétricamente codificada. Una función hash se puede utilizar para muchos propósitos y no tiene entrada de tecla especial. MAC es un acrónimo de "código de autenticación de mensaje".

No se confunda con el hecho de que algunos algoritmos MAC (por ejemplo, SHA1-HMAC) funcionan utilizando una función hash como una subrutina. Son bestias muy diferentes.

  • Algunos ejemplos de algoritmos MAC: CMAC, SHA1-HMAC, MD5-HMAC, UMAC, Poly1305-AES.
  • Algunos ejemplos de funciones hash criptográficas: SHA256, SHA1, MD5.
13
D.W.

Encontré esto al punto de respuesta de otro foro.

Estos tipos de primitivas criptográficas se pueden distinguir por los objetivos de seguridad que cumplen (en el protocolo simple de "agregar un mensaje"):

Integridad: ¿Puede el destinatario estar seguro de que el mensaje no se ha modificado accidentalmente?

Autenticación: ¿Puede el destinatario estar seguro de que el mensaje se origina en el remitente?

No repudio: Si el destinatario pasa el mensaje y la prueba a un tercero, ¿puede el tercero estar seguro de que el mensaje se originó en el remitente? (Tenga en cuenta que estoy hablando de no repudio en el sentido criptográfico, no en el sentido legal). También es importante esta pregunta:

Claves: ¿La primitiva requiere una clave secreta compartida o pares de claves público-privadas? Creo que la respuesta corta se explica mejor con una tabla:

Cryptographic primitive | Hash |    MAC    | Digital
Security Goal           |      |           | signature
------------------------+------+-----------+-------------
Integrity               |  Yes |    Yes    |   Yes
Authentication          |  No  |    Yes    |   Yes
Non-repudiation         |  No  |    No     |   Yes
------------------------+------+-----------+-------------
Kind of keys            | none | symmetric | asymmetric
                        |      |    keys   |    keys

Recuerde que la autenticación sin confianza en las claves utilizadas es inútil. Para las firmas digitales, un destinatario debe estar seguro de que la clave de verificación realmente pertenece al remitente. Para los MAC, un destinatario debe estar seguro de que la clave simétrica compartida solo se ha compartido con el remitente.

Haga clic aquí para más información

2
kayle