Ciertamente, el uso de cifrados en bloque para construir funciones hash y códigos de autenticación de mensajes (MAC) es una práctica bien establecida en el campo de la criptografía. Un cifrado de bloque es un cifrado de clave simétrica que opera en bloques de datos de tamaño fijo utilizando una clave secreta compartida. Ejemplos de cifrados de bloque incluyen el Estándar de cifrado avanzado (AES) y el Estándar de cifrado de datos (DES). Estos cifrados están diseñados principalmente para cifrar y descifrar, pero sus propiedades se pueden aprovechar para crear otras primitivas criptográficas, como funciones hash y MAC.
Funciones hash de cifrados de bloque
Una función hash criptográfica es un algoritmo determinista que asigna una cantidad arbitraria de datos a una cadena de bytes de tamaño fijo. La salida, conocida como valor hash, debe tener varias propiedades clave: debe ser computacionalmente inviable revertirla (resistencia de preimagen), encontrar dos entradas diferentes que produzcan la misma salida (resistencia a la colisión) o encontrar una entrada diferente que produzca la misma salida como entrada dada (segunda resistencia de preimagen).
Construcción Merkle-Damgård
Uno de los métodos más conocidos para construir una función hash a partir de un cifrado de bloque es la construcción Merkle-Damgård. Este método utiliza un cifrado de bloques en un modo de operación específico para procesar los datos de entrada en bloques.
1. Inicialización: Comience con un valor inicial, conocido como vector de inicialización (IV).
2. Tratamiento de agua: divide el mensaje de entrada en bloques de tamaño fijo. Para cada bloque, utilice el cifrado de bloque para transformar el estado actual.
3. Finalizacion: Después de procesar todos los bloques, el estado final es el valor hash.
Por ejemplo, dejemos ser un cifrado de bloque,
una llave,
el vector de inicialización, y
el mensaje dividido en bloques
. La función hash
se puede definir de la siguiente manera:
Esta construcción garantiza que la función hash herede las propiedades de seguridad del cifrado de bloque subyacente, suponiendo que el cifrado de bloque sea seguro.
Construcción Davies-Meyer
Otro método popular es la construcción de Davies-Meyer, que utiliza un cifrado de bloque en forma de avance para construir una función hash. La construcción se define de la siguiente manera:
Dónde es el valor hash después de procesar el
-ésimo bloque,
es la función de cifrado de cifrado en bloque con clave
y con
denota la operación XOR bit a bit. El valor inicial
normalmente se establece en una constante fija.
Códigos de autenticación de mensajes (MAC) de cifrados de bloque
Un código de autenticación de mensajes (MAC) es un breve fragmento de información que se utiliza para autenticar un mensaje y garantizar su integridad. Un algoritmo MAC toma como entrada un mensaje y una clave secreta, y genera una etiqueta MAC. El destinatario, que también posee la clave secreta, puede verificar la autenticidad del mensaje recalculando la etiqueta MAC y comparándola con la etiqueta recibida.
CBC-MAC
Uno de los métodos más simples y más utilizados para construir una MAC a partir de un cifrado de bloque es el código de autenticación de mensajes de encadenamiento de bloques cifrados (CBC-MAC). Este método utiliza el modo de operación CBC de un cifrado de bloque para procesar el mensaje, y el bloque final se utiliza como etiqueta MAC.
1. Inicialización: Comience con un vector de inicialización (IV) establecido en cero.
2. Tratamiento de agua: Cifre cada bloque del mensaje utilizando el cifrado de bloque en modo CBC.
3. Finalizacion: La salida del cifrado del bloque final es la etiqueta MAC.
Por ejemplo, dejemos ser un cifrado de bloque,
una llave,
el mensaje dividido en bloques
y con
el vector de inicialización. La etiqueta CBC-MAC
se calcula de la siguiente manera:
La seguridad de CBC-MAC depende de la unicidad de la longitud del mensaje y la clave. Para garantizar la seguridad, se recomienda utilizar claves diferentes para el cifrado y la generación de MAC.
HMAC
Otra construcción MAC ampliamente utilizada es el Código de autenticación de mensajes basado en hash (HMAC), que se puede crear utilizando una función hash basada en cifrado de bloques. HMAC proporciona mejores propiedades de seguridad y es más robusto contra ciertos tipos de ataques.
HMAC se define de la siguiente manera:
Lugar:
– es una función hash (por ejemplo, una construida utilizando un cifrado de bloque).
– es la llave
rellenado con el tamaño de bloque de la función hash.
– denota la operación XOR bit a bit.
– y la
son constantes de relleno fijas.
– denota concatenación.
Consideraciones de Seguridad
Cuando se utilizan cifrados de bloque para construir funciones hash y MAC, se deben tener en cuenta varias consideraciones de seguridad:
1. Gestión de claves: La seguridad de las construcciones depende del secreto de la clave. Se deben seguir prácticas adecuadas de gestión de claves para garantizar que las claves no se vean comprometidas.
2. Resistencia a la colisión: Para funciones hash, la resistencia a las colisiones es importante. El cifrado de bloque debe ser seguro contra ataques que podrían provocar colisiones en la función hash.
3. Longitud del mensaje: Para CBC-MAC, la seguridad puede verse comprometida si se utiliza la misma clave para mensajes de diferentes longitudes. Es importante asegurarse de que la clave sea única para cada longitud de mensaje o utilizar técnicas adicionales para manejar mensajes de longitud variable.
4. Relleno: Se deben utilizar esquemas de relleno adecuados para garantizar que los bloques de mensajes tengan el tamaño correcto para el cifrado de bloque. El relleno incorrecto puede provocar vulnerabilidades de seguridad.
5. Desempeno: El rendimiento de las construcciones depende de la eficiencia del cifrado de bloque subyacente. Para implementaciones prácticas se prefieren cifrados de bloques de alto rendimiento como AES.
Ejemplos prácticos
Ejemplo de CBC-MAC
Considere un cifrado de bloque con un tamaño de bloque de 128 bits y una clave
. deja el mensaje
sea "¡Hola, mundo!" acolchado al tamaño de bloque más cercano. El mensaje se divide en bloques.
y la etiqueta CBC-MAC se calcula de la siguiente manera:
1. Inicialización:
2. Tratamiento de agua:
–
–
3. Finalizacion:
La etiqueta resultante se utiliza como MAC para el mensaje.
Ejemplo de HMAC
Considere una función hash construido utilizando un cifrado de bloque con un tamaño de bloque de 512 bits. deja la llave
ser "secretkey" y el mensaje
ser "¡Hola, mundo!". La etiqueta HMAC se calcula de la siguiente manera:
1. Relleno de teclas: Rellene la tecla al tamaño de bloque de la función hash para obtener
.
2. Hash interno: Calcula el hash interno:
–
3. Hash externo: Calcula el hash externo:
–
La etiqueta resultante es el HMAC del mensaje.
Los cifrados de bloque son primitivas criptográficas versátiles que se pueden utilizar para construir funciones hash y MAC. Las construcciones Merkle-Damgård y Davies-Meyer son métodos populares para crear funciones hash a partir de cifrados de bloques, mientras que CBC-MAC y HMAC son construcciones MAC ampliamente utilizadas. La seguridad de estas construcciones depende de las propiedades del cifrado de bloque subyacente, la gestión adecuada de claves y el cumplimiento de las mejores prácticas en la implementación criptográfica.
Otras preguntas y respuestas recientes sobre Aplicaciones de los cifrados en bloque:
- ¿El modo BCE divide el texto sin formato de entrada grande en bloques posteriores?
- ¿Se puede utilizar el modo OFB como generador de flujo de claves?
- ¿Puede un cifrado ser determinista?
- ¿Cuáles son los modos de operación?
- ¿Qué hace el modo BCE con los cifrados de bloques simples?
- ¿Se puede crear PSRNG mediante cifrados en bloque?
- ¿Se puede construir una MAC mediante cifrados en bloque?
- ¿Qué es un modo de operación probabilístico de un cifrado de bloque?
- ¿Cómo permite el modo de operación Contador (CTR) el cifrado y descifrado paralelos y qué ventajas ofrece esto en aplicaciones prácticas?
- ¿Qué papel juega el vector de inicialización (IV) en el modo Cipher Block Chaining (CBC) y cómo mejora la seguridad?
Ver más preguntas y respuestas en Aplicaciones de cifrados en bloque