VMAC es un algoritmo de código de autenticación de mensajes (MAC) basado en cifrado de bloques que utiliza un hash universal propuesto por Ted Krovetz y Wei Dai en abril de 2007. El algoritmo fue diseñado para un alto rendimiento respaldado por un análisis formal. [ cita requerida ]
VMAC está diseñado para tener un rendimiento excepcional en software en arquitecturas de CPU de 64 bits y al mismo tiempo funcionar bien en arquitecturas de 32 bits. [ cita requerida ] Las velocidades medidas son tan rápidas como medio ciclo de CPU por byte (cpb) en arquitecturas de 64 bits, menos de cinco cpb en procesadores de escritorio de 32 bits y alrededor de diez cpb en arquitecturas integradas de 32 bits. [1] UMAC es una variante estrechamente relacionada de VMAC que está optimizada para arquitecturas de 32 bits .
Descripción general
VMAC es un MAC al estilo de Wegman y Carter. [2] [3] Se utiliza una función hash "universal" rápida para convertir un mensaje de entrada M en una cadena corta. [ cita requerida ] Esta cadena corta se combina luego mediante la adición con un relleno pseudoaleatorio, lo que da como resultado la etiqueta VMAC. La seguridad depende de que el remitente y el receptor compartan una función hash secreta elegida aleatoriamente y un relleno pseudoaleatorio. Esto se logra utilizando la función hash con clave H y la función pseudoaleatoria F. Se genera una etiqueta realizando el cálculo
Etiqueta = H K1 (M) + F K2 (Nonce)
donde K1 y K2 son claves aleatorias secretas compartidas por el remitente y el receptor, y Nonce es un valor que cambia con cada etiqueta generada. El receptor necesita saber qué nonce fue utilizado por el remitente, por lo que se debe utilizar algún método para sincronizar los nonces. Esto se puede hacer enviando explícitamente el nonce junto con el mensaje y la etiqueta, o acordando el uso de algún otro valor no repetitivo, como un número de secuencia. No es necesario mantener el nonce en secreto, pero se debe tener cuidado para garantizar que, durante la vida útil de una clave VMAC, se use un nonce diferente con cada mensaje.
VMAC utiliza una función denominada VHASH (también especificada en este documento) como función hash con clave H y utiliza una función pseudoaleatoria F cuya implementación predeterminada utiliza el cifrado de bloques AES. VMAC permite longitudes de etiquetas de cualquier múltiplo de 64 bits hasta el tamaño de bloque del cifrado de bloques en uso. Cuando se utiliza AES, esto significa que VMAC puede producir etiquetas de 64 o 128 bits.
La teoría de las MAC de Wegman-Carter y el análisis de VMAC muestran que si uno "instancia" VMAC con claves y pads verdaderamente aleatorios, entonces la probabilidad de que un atacante (incluso uno sin límites computacionales) produzca una etiqueta correcta para los mensajes que elija es menor que 1/2 60 o 1/2 120 cuando las etiquetas tienen una longitud de 64 o 128 bits, respectivamente. Cuando un atacante realiza N intentos de falsificación, la probabilidad de obtener una o más etiquetas correctas aumenta linealmente a menos de N/2 60 o N/2 120. En una implementación aplicada de VMAC, utilizando AES para producir claves y pads, estas probabilidades de falsificación aumentan en una pequeña cantidad relacionada con la seguridad de AES. Mientras AES sea seguro, este pequeño término aditivo es insignificante para cualquier ataque práctico. Consulte la especificación para obtener más detalles. El análisis de la seguridad de VMAC ha sido realizado por los autores Wei Dai y Ted Krovetz. [ cita requerida ] [4]
Implementaciones
- C [5] [6]
- C++ [7] [8]
- Pitón [9]
Referencias
- ^ T. Krovetz y W. Dai (2007). "VMAC: Código de autenticación de mensajes mediante hash universal". Grupo de trabajo CFRG . IETF . Consultado el 12 de agosto de 2010 .
- ^ J. Carter; M. Wegman (1977). "Clases universales de funciones hash (Resumen ampliado)". Actas del noveno simposio anual de la ACM sobre teoría de la computación - STOC '77 . ACM. págs. 106– 112. doi : 10.1145/800105.803400 . S2CID 1302091.
- ^ J. Carter; M. Wegman (1981). "Nuevas funciones hash y su uso en autenticación e igualdad de conjuntos". Revista de Ciencias de la Computación y de Sistemas . 22 (3): 265– 279. doi : 10.1016/0022-0000(81)90033-7 .
- ^ T. Krovetz (2007). "Autenticación de mensajes en arquitecturas de 64 bits" (PDF) . Áreas seleccionadas en criptografía . Apuntes de clase en informática. Vol. 4356. Springer-Verlag. págs. 327– 341. doi :10.1007/978-3-540-74462-7_23. ISBN . 978-3-540-74461-0. ISSN 0302-9743.
- ^ "vmac.h (código fuente)" . Consultado el 13 de noviembre de 2022 .
- ^ "vmac.c (código fuente)" . Consultado el 13 de noviembre de 2022 .
- ^ "Crypto++: archivo fuente vmac.h". www.cryptopp.com .
- ^ "Crypto++: archivo fuente vmac.cpp". www.cryptopp.com .
- ^ Krovetz, Ted (22 de abril de 2007). "Una implementación de referencia sencilla y no optimizada de VMAC" . Consultado el 13 de noviembre de 2022 .
Enlaces externos
- VMAC: Código de autenticación de mensajes mediante hash universal – Borrador de Internet de abril de 2007
- Página de inicio de VMAC
- Entrada wiki de VMAC de Cryptolounge Archivado el 2 de abril de 2010 en Wayback Machine