[1] MAC de una tecla ( OMAC ) es un código de autenticación de mensajes construido a partir de un cifrado de bloque muy parecido alalgoritmo CBC-MAC .
Oficialmente, hay dos algoritmos OMAC (OMAC1 y OMAC2) que son esencialmente iguales excepto por un pequeño ajuste. OMAC1 es equivalente a CMAC , que se convirtió en una recomendación del NIST en mayo de 2005.
Es gratuito para todos los usos: no está cubierto por ninguna patente. [2] En criptografía , CMAC (Código de autenticación de mensajes basado en cifrado) [3] es un algoritmo de código de autenticación de mensajes basado en cifrado en bloque . Puede utilizarse para garantizar la autenticidad y, por tanto, la integridad de los datos binarios. Este modo de operación corrige las deficiencias de seguridad de CBC-MAC (CBC-MAC es seguro solo para mensajes de longitud fija).
El núcleo del algoritmo CMAC es una variación de CBC-MAC que Black y Rogaway propusieron y analizaron bajo el nombre XCBC [4] y enviaron al NIST . [5] 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 y nombraron el algoritmo resultante One-Key CBC-MAC ( OMAC ) en sus artículos. [6] Posteriormente enviaron OMAC1, [7] un refinamiento de OMAC y un análisis de seguridad adicional. [8] El algoritmo OMAC reduce la cantidad de material clave requerido para XCBC. CMAC es equivalente a OMAC1.
Para generar una etiqueta CMAC de ℓ bits ( t ) de un mensaje ( m ) utilizando un cifrado de bloque de b bits ( E ) y una clave secreta ( k ), primero se generan dos subclaves de b bits ( k 1 y k 2 ) utilizando el siguiente algoritmo (esto es equivalente a la multiplicación por x y x 2 en un campo finito GF (2 b )). Sea ≪ el operador estándar de desplazamiento a la izquierda y ⊕ denote el exclusivo bit a bit o :
- Calcule un valor temporal k 0 = E k (0).
- Si msb ( k 0 ) = 0, entonces k 1 = k 0 ≪ 1, de lo contrario k 1 = ( k 0 ≪ 1) ⊕ C ; donde C es una cierta constante que depende solo de b . (Específicamente, C son los coeficientes no principales del primer polinomio binario lexicográficamente irreducible de grado- b con el número mínimo de unos: 0x1B para 64 bits, 0x87 para 128 bits y 0x425 para bloques de 256 bits).
- Si MSB ( k 1 ) = 0 , entonces k 2 = k 1 «1 , de lo k 2 = ( k 1 « 1) ⊕ C .
- Devolver claves ( k 1 , k 2 ) para el proceso de generación de MAC.
Como un pequeño ejemplo, suponga 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:
- Divida 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.
Implementaciones
- Implementación de Python : vea 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 de Ruby [10]
Referencias
- ^ Microbiología clínica y quimioterapia antimicrobiana . Asociación Interregional de Microbiología Clínica y Quimioterapia Antimicrobiana.
- ^ Rogaway, Phillip. "CMAC: Sin licencia" . Consultado el 27 de mayo de 2020 .
Declaración de Phillip Rogaway sobre el estado de propiedad intelectual de CMAC
- ^ Dworkin, MJ (2016). "Recomendación para los modos de operación de cifrado de bloques" (PDF) . doi : 10.6028 / nist.sp.800-38b . Cite journal requiere
|journal=
( ayuda ) - ^ Black, John; Rogaway, Phillip (20 de agosto de 2000). 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 el manejo de mensajes de longitud arbitraria con el CBC MAC" (PDF) . Cite journal requiere
|journal=
( ayuda ) - ^ Iwata, Tetsu; Kurosawa, Kaoru (24 de febrero de 2003). "OMAC: CBC MAC de una tecla". Cifrado de software rápido . Apuntes de conferencias en informática. 2887 . Springer, Berlín, Heidelberg. págs. 129-153. doi : 10.1007 / 978-3-540-39887-5_11 . ISBN 978-3-540-20449-7.
- ^ Iwata, Tetsu; Kurosawa, Kaoru (2003). "OMAC: MAC de CBC de una tecla - Anexo" (PDF) . Cite journal requiere
|journal=
( ayuda ) - ^ Iwata, Tetsu; Kurosawa, Kaoru (8 de diciembre de 2003). "Límites de seguridad más fuertes para OMAC, TMAC y XCBC". En Johansson, Thomas; Maitra, Subhamoy (eds.). Progresos en Criptología - INDOCRYPT 2003 . Apuntes de conferencias en informática. 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.
- ^ "Impacket es una colección de clases de Python para trabajar con protocolos de red .: SecureAuthCorp / impacket" . 15 de diciembre de 2018 - a través de GitHub.
- ^ "Extensión Ruby C para la función hash con clave AES-CMAC (RFC 4493): louismullie / cmac-rb" . 4 de mayo de 2016 - a través de 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-128 (AES-CMAC-PRF-128)
- Prueba en línea de OMAC
- Más información sobre OMAC