Uso apropiado de HMAC

3

Acabo de leer este artículo , que es una parte superior 10 lista de errores crypto desarrollador. En el número 7, afirma que "HMAC no debe aplicarse al texto simple, sino al texto cifrado combinado con el IV". Siempre pensé que el HMAC se computaba a partir del texto plano. Después de leer más más , me di cuenta de que mis pensamientos iniciales eran incorrectos. Sin embargo, todavía no entiendo por qué es necesario concatenar el IV con el texto cifrado antes de aplicar el HMAC. ¿Por qué es este el caso?

    
pregunta Enigmatic Cipher 30.04.2017 - 18:34
fuente

2 respuestas

2

Cambiar el IV dará como resultado un sabotaje predecible en el primer bloque descifrado. P' = P xor IV xor TamperIV .

Como está intentando probar la recuperación de los datos originales, debe incluir el IV.

Y necesita aplicar el HMAC al texto cifrado + IV en lugar del texto simple por dos razones:

  1. Los mismos datos con la misma clave serán HMAC iguales, lo que puede revelar datos (derrotar al IV aleatorio en modo CBC)
  2. Si alguien está manipulando los datos encriptados, es posible que esté intentando llevarlo a un canal lateral para revelar datos, o tal vez bloquearse. Si se prueba que el texto cifrado (y IV) no se modifican, se puede descifrar.
respondido por el bartonjs 30.04.2017 - 20:08
fuente
2

Esta oración se aplica específicamente cuando se usa HMAC en combinación con el cifrado. HMAC se puede usar solo si solo te importa el mensaje autenticidad : garantiza quién produjo el mensaje, pero no oculta el contenido del mensaje. Esta oración no se aplica en este caso. Cuando se usa HMAC solo para autenticidad, el HMAC se calcula sobre el texto sin formato y eso es todo.

Cuando desea tener tanto secreto como autenticidad, es decir, cuando desea ocultar el contenido del mensaje y garantizar su origen, necesita cifrado autenticado . Hay modos de operación que proporcionan cifrado autenticado; GCM, que se menciona en el artículo, es una opción popular y una buena opción.

También es posible improvisar un mecanismo de cifrado autenticado combinando un mecanismo de cifrado (como un cifrado de bloque en modo CTR o CBC) con un mecanismo de autenticación (como HMAC). Sin embargo, hacer esto correctamente es sutil. Hay dos formas principales de hacerlo: cifrar-luego-MAC o MAC-luego-cifrar. La oración que cita dice que debe cifrar y luego MAC, es decir, primero debe cifrar el mensaje y luego autenticar el resultado final (que es el texto cifrado que incluye el IV). Esta es una buena recomendación en principio , pero no es fácil implementarlo correctamente.

La recomendación contra GCM es mala. Sí, falla si la IV se reutiliza. Sin embargo, una biblioteca criptográfica decente llamará al RNG por su cuenta para generar un IV, eliminando el riesgo de reutilización IV (a menos que el RNG del sistema se rompa, en cuyo caso su generación de claves también se rompe). (Existen bibliotecas criptográficas erróneas que requieren que la persona que llama realice todas las tareas de plomería; evítelas). Es mucho más fácil usar una biblioteca GCM correctamente que ensamblar HMAC y el cifrado correctamente. La recomendación poco clara de hacer encriptar y luego HMAC contradice la recomendación # 1 del artículo contra la "sopa criptográfica".

A menos que tenga una buena razón para hacerlo, y entienda perfectamente lo que está haciendo, siempre use las bibliotecas crypto de más alto nivel que hacen lo que necesita . Use una capa de protocolo que dependa de TLS y realice la verificación del certificado, si es posible, use el mecanismo de cifrado de archivos o discos del sistema operativo y el almacenamiento de contraseñas en lugar de la suya, use bibliotecas criptográficas que realizan todas las llamadas de RNG y la generación IV y adjuntándolas internamente si tienes que bajar al nivel de criptografía, etc.

    
respondido por el Gilles 01.05.2017 - 01:19
fuente

Lea otras preguntas en las etiquetas