El MAC de clave única ( OMAC ) es una familia de códigos de autenticación de mensajes construidos a partir de un cifrado de bloques muy similar al algoritmo CBC-MAC . Puede utilizarse para garantizar la autenticidad y, por lo tanto, la integridad de los datos. Se definen dos versiones:
- El OMAC original de febrero de 2003, que rara vez se usa. [ 1 ] El nombre preferido ahora es "OMAC2". [ 2 ]
- El refinamiento OMAC1, [ 2 ] que se convirtió en una recomendación del NIST en mayo de 2005 bajo el nombre CMAC . [ 3 ]
OMAC es gratuito para todos los usos: no está cubierto por ninguna patente. [ 4 ]
Historia
El núcleo del algoritmo CMAC es una variación de CBC-MAC que Black y Rogaway propusieron y analizaron bajo el nombre "XCBC" [ 5 ] y presentaron al NIST . [ 6 ] El algoritmo XCBC aborda de manera eficiente las deficiencias de seguridad de CBC-MAC, pero requiere tres claves.
Iwata y Kurosawa propusieron una mejora de XCBC que requiere menos material de clave (solo una clave) y denominaron al algoritmo resultante One-Key CBC-MAC (OMAC) en sus artículos. [ 1 ] Posteriormente presentaron OMAC1 (= CMAC), [ 2 ] un refinamiento de OMAC y un análisis de seguridad adicional. [ 7 ]
Algoritmo
![]()
Para generar una etiqueta CMAC de ℓ bits ( t ) de un mensaje ( m ) utilizando un cifrado de bloques de b bits ( E ) y una clave secreta (k), primero se generan dos subclaves de b bits (k1 y k2 ) utilizando el siguiente algoritmo ( esto es equivalente a la multiplicación por x y x2 en un campo finito GF(2b ) ). Sea ≪ el operador de desplazamiento a la izquierda estándar y ⊕ el operador OR exclusivo bit a bit :
- Calcula un valor temporal k 0 = E k (0).
- Si msb( k0 ) = 0 , entonces k1 = k0 ≪ 1 , de lo contrario k1 = ( k0 ≪ 1) ⊕ C ; donde C es una constante que depende únicamente de b . (Específicamente, C son los coeficientes no principales del polinomio binario irreducible de grado b, el primero en orden lexicográfico, con el número mínimo de unos: 0x1B para bloques de 64 bits, 0x87 para bloques de 128 bits y 0x425 para bloques de 256 bits).
- Si msb( k 1 ) = 0 , entonces k 2 = k 1 ≪ 1 , de lo contrario k 2 = ( k 1 ≪ 1) ⊕ C .
- Claves de retorno ( k1 , k2 ) para el proceso de generación de MAC .
Como un pequeño ejemplo, supongamos que b = 4 , C = 0011 2 y k 0 = E k (0) = 0101 2. Entonces k 1 = 1010 2 y k 2 = 0100 ⊕ 0011 = 0111 2 .
El proceso de generación de etiquetas CMAC es el siguiente:
- Dividir el mensaje en bloques de b bits m = m 1 ∥ ... ∥ m n −1 ∥ m n , donde m 1 , ..., m n −1 son bloques completos. (El mensaje vacío se trata como un bloque incompleto).
- Si m n es un bloque completo, entonces m n ′ = k 1 ⊕ m n, de lo contrario m n ′ = k 2 ⊕ ( m n ∥ 10...0 2 ) .
- Sea c 0 = 00...0 2 .
- Para i = 1, ..., n − 1 , calcule c i = E k ( c i −1 ⊕ m i ) .
- c n = E k ( c n −1 ⊕ m n ′)
- Salida t = msb ℓ ( c n ) .
El proceso de verificación es el siguiente:
- Utilice el algoritmo anterior para generar la etiqueta.
- Compruebe que la etiqueta generada sea igual a la etiqueta recibida.
Variantes
CMAC-C1 [ 8 ] es una variante de CMAC que proporciona garantías adicionales de seguridad de compromiso y descubrimiento de contexto .
Implementaciones
- Implementación en Python : consulte el uso de la
AES_CMAC()función en " impacket/blob/master/tests/misc/test_crypto.py " y su definición en " impacket/blob/master/impacket/crypto.py " [ 9 ]. - Implementación en Ruby [ 10 ]
Referencias
- 1 2 Iwata, Tetsu; Kurosawa, Kaoru (24 de febrero de 2003). "OMAC: One-Key CBC MAC". Cifrado rápido de software . Notas de clase en ciencias de la computación. Vol. 2887. Springer, Berlín, Heidelberg. págs. 129–153 . doi : 10.1007/978-3-540-39887-5_11 . ISBN 978-3-540-20449-7.
- 1 2 3 Iwata, Tetsu; Kurosawa, Kaoru (2003). "OMAC: One-Key CBC MAC – Addendum" (PDF) .
En esta nota, proponemos OMAC1, una nueva elección de los parámetros de la familia OMAC (ver [4] para más detalles). También se presentan vectores de prueba. En consecuencia, renombramos el OMAC anterior como OMAC2. (Es decir, los vectores de prueba para OMAC2 ya se mostraron en [3]). Usamos OMAC como nombre genérico para OMAC1 y OMAC2.
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ Dworkin, Morris (2016). "Recomendación para los modos de operación de cifrado por bloques: el modo CMAC para la autenticación" (PDF) . doi : 10.6028/nist.sp.800-38b .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ Rogaway, Phillip. "CMAC: No licencia" . Consultado el 27 de mayo de 2020.
Declaración de Phillip Rogaway sobre el estatus de propiedad intelectual de CMAC
. - ↑ Black, John; Rogaway, Phillip (2000-08-20). Avances en criptología – CRYPTO 2000. Springer, Berlín, Heidelberg. págs. 197–215 . doi : 10.1007/3-540-44598-6_12 . ISBN 978-3540445982.
- ↑ Black, J; Rogaway, P. "Una sugerencia para manejar mensajes de longitud arbitraria con el MAC CBC" (PDF) .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ Iwata, Tetsu; Kurosawa, Kaoru (8 de diciembre de 2003). "Límites de seguridad más sólidos para OMAC, TMAC y XCBC". En Johansson, Thomas; Maitra, Subhamoy (eds.). Avances en Criptología - INDOCRYPT 2003 . Apuntes de conferencias sobre informática. vol. 2904. Springer Berlín Heidelberg. págs. 402 –415. CiteSeerX 10.1.1.13.8229 . doi : 10.1007/978-3-540-24582-7_30 . ISBN 9783540206095.
- ^ Bhaumik, Ritam; Chakraborty, Bishwajit; Choi, Wonseok; Dutta, Avijit; Govinden, Jérôme; Shen, Yaobin (2024). "El compromiso de seguridad de los MAC con aplicaciones de composición genérica" . En Reyzin, Leonid; Stebila, Douglas (eds.). Avances en Criptología – CRYPTO 2024 . Apuntes de conferencias sobre informática. vol. 14923. Cham: Springer Nature Suiza. págs. 425– 462. doi : 10.1007/978-3-031-68385-5_14 . ISBN 978-3-031-68385-5.
- ↑ "Impacket es una colección de clases de Python para trabajar con protocolos de red: SecureAuthCorp/impacket" . 15 de diciembre de 2018 – vía GitHub.
- ↑ "Extensión de Ruby C para la función hash con clave AES-CMAC (RFC 4493): louismullie/cmac-rb" . 4 de mayo de 2016 – vía GitHub.
Enlaces externos
- RFC 4493 El algoritmo AES-CMAC
- RFC 4494 El algoritmo AES-CMAC-96 y su uso con IPsec
- RFC 4615 El estándar de cifrado avanzado: código de autenticación de mensajes basado en cifrado, función pseudoaleatoria de 128 bits (AES-CMAC-PRF-128)
- Examen en línea de OMAC
- Más información sobre OMAC
- Implementación en Rust
- Códigos de autenticación de mensajes
- Campos finitos