Capítulo 7 Funciones Hash
Capítulo 7 Funciones Hash
Capítulo 7 Funciones Hash
criptografía
PARA INGENIER@S aplicada
Diapositivas
utilizadas en las
clases grabadas
de Class4crypt
https://www.youtube.com/user/jorgeramio
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 690
¿Qué son las funciones hash?
• Una función hash o resumen (digest) puede definirse como una
función que asocia a un texto, archivo o documento electrónico M
de cualquier tamaño, un resumen H = h(M) suyo, representado
en bits, con una longitud fija y supuestamente único
• De esta manera, el hash es una especie de huella digital del
archivo o texto, que se muestra siempre en formato hexadecimal
• El tamaño de h(M) dependerá del algoritmo utilizado
• Así, por ejemplo, la función hash MD5 devuelve 128 bits, el hash
SHA-1 devuelve 160 bits y los hashes SHA-2 y SHA-3 devuelven
224, 256, 384 y 512 bits, al aplicarlos sobre un texto o archivo
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 691
El hash no es un sistema de cifra
• Es un error muy común señalar a las funciones hash como
algoritmos de cifra
• No son algoritmos de cifra porque no hay ninguna clave
• No confundir con HMAC, que sí incluye una clave
• Dependiendo del entorno de ejecución (hardware, software, web
online), las funciones hash tienen un rendimiento o tasa que va
desde las pocas decenas de MegaBytes por segundo a dos o tres
centenas de MegaBytes por segundo
• Para las operaciones de firma digital donde se usan las funciones
hash, esas velocidades son adecuadas. En otros entornos, como
los de informática forense, esa velocidad podría ser crítica
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 692
Ejemplos de hash con Hashcalc y Online
http://www.slavasoft.com/hashcalc/ https://emn178.github.io/online-tools/sha256.html
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 693
Ejemplo de hash con la utilidad de 7-zip
Botón derecho
del ratón
224 4,6 GB
MB/s
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 694
Utilidad del hash en la criptografía
• Para realizar una firma digital F, habrá que realizar una cifra usando la
clave privada del emisor con un algoritmo de criptografía asimétrica
• En RSA, si esta clave privada es dE, el módulo de cifra es nE y hay que
firmar el mensaje M, la operación sería F = MdE mod nE
• Pero sabemos que los algoritmos de cifra asimétrica, que permiten la
firma digital a diferencia de los algoritmos de cifra en simétrica,
tienen velocidades de cifra/firma mucho menores que estos últimos
• Así, la firma no se hará sobre el mensaje sino sobre el resultado de
aplicar un hash a ese mensaje o documento: F = h(M)dE mod nE
• Esto permite agilizar la operación de firma y, también, comprobar en
recepción la integridad del documento recibido firmado digitalmente
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 695
Principio del palomar, unicidad y colisiones
• Como es obvio, en tanto el hash o huella digital será un valor de bits
mucho menor que los bits del archivo o mensaje al que se le aplica
esa función, no se puede afirmar que el hash sea único
• Habrá una probabilidad de que dos archivos o mensajes diferentes
tengan el mismo hash, lo que llamaremos una colisión
• Lógicamente esta probabilidad va a depender del tamaño del hash
• Esto se conoce como el principio del
palomar (Johann Dirichlet), que dice
que si hay más palomas que huecos en
el palomar, entonces en alguno de estos
huecos habrá más de una paloma
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 696
La seguridad del resumen de un hash
• Si una función hash nos devuelve 4 bits, los 24 = 16 estados posibles
serán 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001,
1010, 1011, 1100, 1101, 1110, 1111, todos equiprobables
• La pregunta que nos puede preocupar es: ¿cuál sería la probabilidad
de que dos mensajes distintos tengan igual función hash? Si se firma
un hash h(M), queremos estar seguros que sea el del mensaje original
• En este escenario la probabilidad será de 1/24 = 1/16
• Con una probabilidad de 1/24 (6,25% muy alta) podríamos tener dos
mensajes diferentes (incluso contradictorios) con iguales hash
• Por ello, los hashes usan centenas de bits como resumen, hoy en día al
menos de 256 bits, y esa probabilidad baja a 1/2256 … en la práctica 0
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 697
Propiedades de las funciones hash (1/7)
1. Facilidad de cálculo
• Deberá ser fácil y rápido calcular h(M) a partir de M
2. Unidireccionalidad
• Conocido un resumen H = h(M), debe ser computacionalmente imposible o no
factible encontrar el mensaje M a partir del resumen H
• Aunque exista una forma para resolver el problema, el tiempo y los recursos
necesarios para revertir h(M) deberán ser muy difíciles de cumplir
Fácil y rápido
M Computacionalmente imposible
H = h(M)
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 698
Propiedades de las funciones hash (2/7)
3. Compresión
• A partir de un mensaje M de cualquier longitud, el
resumen H = h(M) debe tener una longitud fija
• En la firma digital, lo normal es que la longitud de h(M)
sea menor que el mensaje M a firmar
• Aunque tenga cierto parecido, una función hash no es lo
mismo que la función zip para compresión de archivos
• La función zip recodifica el archivo mediante un codificador óptimo y, por
tanto, optimiza el número de bits comprimiendo el archivo todo lo que puede,
usando entre otras cosas la redundancia del lenguaje
• En cambio una función hash devuelve un resumen de longitud fija
• Si M tiene menos bits que el resultado del hash, como sería el caso del uso de
hashes en contraseñas, lógicamente no se cumplirá esta propiedad
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 699
Propiedades de las funciones hash (3/7)
4. Difusión o efecto avalancha
• El hash h(M) debe ser una función compleja de todos los bits del mensaje M
• Por tanto, si se modifica un solo bit del mensaje M, el hash h(M) debería
cambiar en media la mitad de sus bits
• MD5 sobre M1 y M2 que difieren en 1 bit (B = 01000010 y C = 01000011)
• M1 = BEBA COCA COLA h(M1) = EBC97CD6472A3FDBE53B09F6E2BA8687
• M2 = BEBA BOCA COLA h(M2) = 967A99F55CF64973C553374C08A7BD72
h(M1) 1110 1011 1100 1001 0111 1100 1101 0110 0100 0111 0010 1010 De los 128 bits de MD5,
0011 1111 1101 1011 1110 0101 0011 1011 0000 1001 1111 0110 los 70 bits marcados en
1110 0010 1011 1010 1000 0110 1000 0111 rojo en h(M2) indican
h(M2) 1001 0110 0111 1010 1001 1001 1111 0101 0101 1100 1111 0110 cambios que se han
0100 1001 0111 0011 1100 0101 0101 0011 0011 0111 0100 1100 producido entre los
0000 1000 1010 0111 1011 1101 0111 0010 hashes de h(M1) y h(M2)
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 700
Propiedades de las funciones hash (4/7)
5. No predictibilidad
• La fortaleza de las funciones hash reside en la no predictibilidad de la salida
obtenida, o del valor resumen o hash
• Es decir, si se calculan los hashes SHA-256 de los números 0, 1, 2 y 3, no será
posible predecir cuál es el valor del hash SHA-256 del número 4
SHA-256 0: 5FECEB66FFC86F38D952786C6D696C79C2DBC239DD4E91B46729D73A27FB57E9
SHA-256 1: 6B86B273FF34FCE19D6B804EFF5A3F5747ADA4EAA22F1D49C01E52DDB7875B4B
SHA-256 2: D4735E3A265E16EEE03F59718B9B5D03019C07D8B6C51F90DA3A666EEC13AB35
SHA-256 3: 4E07408562BEDB8B60CE05C1DECFE3AD16B72230967DE01F640B7E4729B49FCE
SHA-256 4: ¿?
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 702
Propiedades de las funciones hash (6/7)
7. Resistencia simple a colisiones (o segunda preimagen)
• El objetivo de toda función hash es que sea computacionalmente difícil que,
conocido el mensaje de entrada M, se encuentre un mensaje de entrada M’
(distinto a M) de forma que h(M) = h(M’)
• Así, la resistencia simple a colisiones pretende evitar que un potencial
atacante que disponga de un mensaje M y, por tanto, su correspondiente hash
h(M), pueda encontrar otro mensaje M' cuyo hash h(M’) sea el mismo que el
anterior, lo que le permitiría poder reemplazar un mensaje M por otro M’
• Hay que recordar que lo que se firma son los hashes, no mensajes ni archivos
• La probabilidad de encontrar una segunda preimagen para una función hash
es equivalente a la de encontrar una primera preimagen, en media 1/2n-1
• Por lo tanto, cualquier función hash resistente a segunda preimagen será
resistente también a primera preimagen
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 703
Propiedades de las funciones hash (7/7)
8. Resistencia fuerte a colisiones
• Será computacionalmente difícil encontrar un par de mensajes al azar (M, M’)
de forma que sus hashes h(M) = h(M’) sean iguales
• Esta resistencia fuerte está relacionada con el ataque conocido como paradoja
del cumpleaños
• Si un hash tiene n bits, la probabilidad media de que prospere un ataque por
paradoja del cumpleaños será igual a 1/(2(n/2)). Es decir, deberíamos hacer
una media de 2n/2 intentos, una disminución de cómputo muy considerable
• Por ejemplo Para MD5 2(128/2) = 264 = 1,845 x 1019 intentos
Para SHA-1 2(160/2) = 280 = 1,209 x 1024 intentos
Para SHA-256 2(256/2) = 2128 = 3,403 x 1038 intentos
• ¿Cómo puede llevarse a cabo un ataque mediante la paradoja del cumpleaños?
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 704
La paradoja del cumpleaños
• Paradójico: “Hecho o expresión aparentemente contrarios a la lógica”
• Se conoce como paradoja del cumpleaños al problema matemático
que nos dice que la confianza o probabilidad mayor que el 50% de
que dos personas al azar estén de cumpleaños el mismo día se supera
dentro de un grupo de solo 23 personas, y esta probabilidad llega al
99,7% si ese grupo cuenta con 57 personas, siempre probabilístico
• No es una paradoja porque no contradice la lógica sino la intuición
• Explicación: con un mapa de 365 días (sin contar año bisiesto) la
primera persona consultada marca una fecha, estando los 365 días
libres. La segunda persona consultada cuenta ahora solo 365- 1 días,
y así sucesivamente. Es una serie, en donde el escenario con días
libres va disminuyendo a cada nueva consulta (ver bibliografía)
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 705
Ataque por paradoja de cumpleaños a hash
• Se crean 2n/2 textos verdaderos y sus correspondientes 2n/2 textos
falsos, hasta que los hashes de texto verdadero y falso colisionen,
usando por ejemplo estos sinónimos marcados entre paréntesis {}
para un hash de 20 bits, con 220 = 1.048.576 valores
Estimado {Querido} amigo {compañero}: Texto Verdadero Aquí 210 = 1.024
Te envío {hago llegar} esta carta {nota} para indicarte {darte a conocer} que tu número permutaciones
{cupón} ha sido premiado {agraciado} con el premio principal {gordo} de la lotería. de varios textos
Te envío {Recibe} un cordial saludo {fuerte abrazo}, María. verdaderos
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 706
Más información en píldoras Thoth
https://www.youtube.com/watch?v=FRBIc0udwv0
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 707
Conclusiones de la Lección 7.1
• La función hash es una huella digital de un documento, representada
por un número fijo de bits y normalmente especificada en hexadecimal
• Un hash no es un algoritmo de cifra al carecer de clave y tampoco debe
confundirse con funciones de compresión como los algoritmos zip
• Entre las funciones hash destacan MD5, SHA-1, familia SHA-2 y SHA-3
• Los hashes deben cumplir un conjunto de propiedades como son la
facilidad de cálculo, unidireccionalidad, difusión, no predictibilidad,
resistencia a primera preimagen, resistencia simple a colisiones o
segunda preimagen y resistencia fuerte a colisiones
• El talón de Aquiles de un hash es el ataque por paradoja del cumpleaños
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 708
Lectura recomendada
• Guion píldora formativa Thoth nº 43, ¿Qué son y para qué sirven las funciones hash?, Jorge
Ramió, 2017
• https://www.criptored.es/thoth/material/texto/pildora043.pdf
• ¿Cómo de seguro es la seguridad de 256 bits?, 3Blue1Brown, YouTube, 2017
• https://www.youtube.com/watch?v=S9JGmA5_unY
• Función hash, Principio del palomar y Random oracle, Wikipedia
• https://es.wikipedia.org/wiki/Funci%C3%B3n_hash
• https://es.wikipedia.org/wiki/Principio_del_palomar
• https://en.wikipedia.org/wiki/Random_oracle
• La paradoja del cumpleaños, Estadística para todos
• https://www.estadisticaparatodos.es/taller/cumpleanos/cumpleanos.html
• Birthday problem, Wikipedia
• https://en.wikipedia.org/wiki/Birthday_problem
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.1. Funciones hash en la criptografía - Página 709
Class4crypt c4c7.2
Módulo 7. Funciones hash
Lección 7.2. Función hash MD5: estructura y operaciones
7.2.1. Construcción de hashes
7.2.2. La estructura de Merkle-Damgård
7.2.3. Cronología de los algoritmos de hash
7.2.4. Características de la función hash MD5
7.2.5. Funcionamiento del hash MD5
7.2.6. MD5 por dentro con el software CriptoRes
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 710
Construcción de hashes
• Funciones hash iterativas
• Procesamiento de un mensaje en bloques, aplicando el mismo algoritmo
de manera consecutiva o iterativa, que se aplica desde años 80
• Funciones hash basadas en compresión
• Transformación de la entrada en una salida de menor tamaño (lo normal)
• Usa una estructura o construcción de Merkle-Damgård
• Funciones resumen típicas: MD5, SHA-1 y SHA-2
• Funciones hash basadas en permutaciones
• Transformación de la entrada en una salida de igual tamaño
• Usa funciones esponja (sponge)
• Función resumen típica: SHA-3 (Keccak)
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 711
La estructura de Merkle-Damgård
• Se construyen bloques de 512 Illustration by
David Göthberg,
bits a partir del mensaje M Public Domain
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 714
Algoritmo MD5 Message Digest 5 (1/2)
• MD5 fue creado por Ronald Rivest en 1991 y presenta algunas
mejoras con respecto a MD2 y MD4 del mismo autor (1990)
• Esta función ya está obsoleta desde mediados de 2005. No
obstante, se sigue utilizando en diferentes aplicaciones locales,
aunque no en Internet. Es interesante su estudio dada la sencillez
del algoritmo, su rapidez y su generalidad
• Procesa bloques de 512 bits con una salida de 128 bits
• Expande el mensaje hasta una longitud 64 bits inferior a un
múltiplo de 512 bits. Para el relleno, añade un 1 seguido de
tantos 0 como sean necesarios y reserva los últimos 64 bits para
añadir información sobre la longitud del mensaje
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 715
Algoritmo MD5 Message Digest 5 (2/2)
• El algoritmo comienza con cuatro vectores iniciales (IV) ABCD de
32 bits cada uno, cuyo valor inicial no es secreto. A estos vectores
y al primer bloque de 512 bits de M se le aplican 64 operaciones
de 32 bits con puertas lógicas, cuyo carácter es no lineal
• Las 64 operaciones se engloban en 4 vueltas o rondas
• Como resultado de estas operaciones, se obtienen cuatro nuevos
vectores A’B’C’D’ que serán la entrada IV’ para el segundo bloque
de 512 bits, repitiéndose esto con los restantes bloques de M
• La última salida de IV corresponde al resumen final H = h(M)
• Definido en la RFC 1321: https://tools.ietf.org/html/rfc1321
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 716
Esquema de MD5
Relleno de 1 a 448 bits K mod 264
Mensaje de K bits
(64 bits)
MENSAJE 1000... K
Y1 Y2 Yq YL
RESUMEN
HMD5 HMD5 HMD5 HMD5
ABCD de 128 bits
Primer resumen
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 717
Bloque principal de MD5
Bloque principal
Nuevo vector ABCD
1er bloque de 512 de 128 bits para el
bits del mensaje M próximo bloque...
Vector
inicial
A Vuelta Vuelta Vuelta Vuelta A’
+
B 1 2 3 4 B’
+
C C’
Funciones Funciones Funciones Funciones +
D D’
F y FF G y GG H y HH I e II +
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 718
Funciones F, G, H e I en MD5
Vector inicial ABCD a b c d 128 bits
F (x, y, z) F (b, c, d)
(x AND y) OR (NOT x AND z) (b AND c) OR (NOT b AND d)
G (x, y, z) G (b, c, d)
(x AND z) OR (y AND NOT z) (b AND d) OR (c AND NOT d)
H (x, y, z) H (b, c, d)
x XOR y XOR z b XOR c XOR d
I (x, y, z) I (b, c, d)
y XOR (x OR NOT z) c XOR (b OR NOT d)
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 719
Funcionamiento de MD5
Desplazamiento del registro d
a b
a bc d
c
Situación luego del desplazamiento
función no lineal
Se repite el proceso para Mj+1 hasta
+
16 bloques del texto. En las vueltas
32 bits
2, 3 y 4 se repite el proceso ahora + Mj
con funciones G, H e I 32 bits
+ tj
El algoritmo realiza 416 = 64 sj bits a la
<<< sj
vueltas o rondas para cada uno de izquierda +
los bloques de 512 bits de M +
Suma mod 232
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 720
Funciones en cada vuelta de MD5
A = 01234567 B = 89ABCDEF C = FEDCBA98 D = 76543210
Dependiendo de la ronda, F puede ser F, G, H, I:
F = (B AND C) OR (NOT B AND D) 1ª ronda
G = (B AND D) OR (C AND NOT D) 2ª ronda
H = (B XOR C XOR D) 3ª ronda
I = (C XOR (B OR NOT D)) 4ª ronda
es una suma mod 232, no un XOR
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 721
Operaciones en 1ª y 2ª vueltas de MD5
FF (a, b, c, d, Mj, tj, sj) GG (a, b, c, d, Mj, tj, sj)
Segunda vuelta
Primera vuelta
Cuarta vuelta
HH(c, d, a, b, M3, D4EF3085, 16) II(c, d, a, b, M6, A3014314, 15)
HH(b, c, d, a, M6, 04881D05, 23) II(b, c, d, a, M13, 4E0811A1, 21)
HH(a, b, c, d, M9, D9D4D039, 4) II(a, b, c, d, M4, F7537E82, 6)
HH(d, a, b, c, M12, E6DB99E5, 11) II(d, a, b, c, M11, BD3AF235, 10)
HH(c, d, a, b, M15, 1FA27CF8, 16) II(c, d, a, b, M2, 2AD7D2BB, 15)
HH(b, c, d, a, M2, C4AC5665, 23) II(b, c, d, a, M9, EB86D391, 21)
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 723
MD5 por dentro con CriptoRes
• Mediante la pestaña seguimiento de CriptoRes, podrá observar los
bytes de relleno y los 64 bits (dos últimas palabras de 32 bits)
reservadas para la longitud del mensaje al final de éste
• Siempre existirá un relleno. Por ejemplo, si no hay entrada, el hash de
nulo se calcula sobre el mensaje 0x 80 00 00 00 00 … 00 00 00
• Ejercicios con Criptores
• Si el mensaje tiene un tamaño de 55 bytes (440 bits), como habrá que
reservar los últimos 64 bits para la longitud, se añadirá 1 byte de relleno
0x 80 al primer y único bloque M (55 + 1 + 8 = 64 bytes = 512 bits)
• Si M tiene 56 bytes (448 bits), entonces se añadirá relleno con 0x 80 y se
forzará a que haya un segundo bloque sólo con rellenos, dejando los
últimos 64 bits reservados para la longitud del mensaje
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 724
Mínimo relleno 0x 80 en primer bloque
• Vamos a obtener el hash MD5 del texto M con 55
bytes, 440 bits, que se indica
• M = Este texto tiene 440 bits, 55 bytes, y un relleno
0x 80
• h(M) = 5F5FE9ABDAAAD9E5DA6F9A661FCEAE81
• Tenemos un único bloque de 512 – 64 = 448 bits
para texto + relleno
• Aparece el texto M en hexadecimal y lectura Little
Endian en cada palabra de 32 bits, y al final de la
palabra 14 vemos un único byte 0x 80 de relleno
• Por las palabras 15 y 16, la longitud del M es 0x 1B8
= 440 en decimal, los 440 bits del mensaje
• Todo correcto. ¿Qué pasará si añadimos 1 byte?
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 725
Forzando rellenos en el segundo bloque
• En este software se ha limitado ver el relleno y la
longitud del mensaje solo en el primer bloque
• Vamos a obtener el hash MD5 del texto M con 56
bytes, 448 bits, que se indica
• M = Este texto tiene 448 bits y nos fuerza un
segundo bloque
• h(M) = 75942E56FD7328017734E74D14876C2C
• Nos fuerza a que se procesen ahora dos bloques
• El relleno 0x 80 comienza en la palabra 15 del
primer bloque, y sigue en todo el segundo bloque
con 0x 00 hasta la palabra 14, ya que las palabras
15 y 16 de este segundo último bloque estarán
reservadas para indicar la longitud del mensaje M
Hash 1er bloque y hash dos bloques diferentes
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 726
Más información en píldoras Thoth
https://www.youtube.com/watch?v=dxqxxwi9pwk
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 727
Conclusiones de la Lección 7.2
• MD5 usa la construcción de Merkle-Damgård de compresión
• Por lo tanto, divide el mensaje en bloques de 512 bits, incluyendo
siempre un relleno de ceros que comienza por 0x 80 y dejando los
últimos 64 bits para indicar el tamaño de texto
• Trabaja con 4 vectores iniciales ABCD de 32 bits cada uno que se
mezclan con el bloque de 512 bits del mensaje M en 64 vueltas o rondas
con las funciones F, G, H e I, con 16 vueltas en cada una
• En cada vuelta, se tomarán 16 palabras diferentes Mj de 32 bits del
mensaje M, desde M0 hasta M15, además de 16 constantes tj diferentes y
unos desplazamientos sj determinados en una tablas
• MD5 entrega un resumen de 128 bits y hoy no es recomendable su uso
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 728
Lectura recomendada (1/2)
• Guion píldora formativa Thoth nº 44, ¿Cómo funciona el hash MD5?, Jorge
Ramió, 2017
• https://www.criptored.es/thoth/material/texto/pildora044.pdf
• CLCript 02: MD5 y SHA-1: relleno y endianess, Jorge Ramió, 2019
• https://www.criptored.es/descarga/CLCript_entrega_02_MD5_y_SHA1_relleno_y_endian
ess.pdf
• Merkle–Damgård construction, Wikipedia
• https://en.wikipedia.org/wiki/Merkle%E2%80%93Damg%C3%A5rd_construction
• The MD5 Message-Digest Algorithm, Request for Comments 1321, R Rivest,
MIT Laboratory for Computer Science and RSA Data Security, Inc. April 1992
• https://tools.ietf.org/html/rfc1321
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 729
Lectura recomendada (2/2)
• Padding (cryptography), Wikipedia
• https://en.wikipedia.org/wiki/Padding_(cryptography)
• Understanding the length extension attack, Cryptography
• https://crypto.stackexchange.com/questions/3978/understanding-the-length-
extension-attack
• Everything you need to know about hash length extension attacks,
SkullSecurity
• https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-
extension-attacks
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.2. Función hash MD5: estructura y operaciones - Página 730
Class4crypt c4c7.3
Módulo 7. Funciones hash
Lección 7.3. Función hash SHA-1
7.3.1. Información compartida con la clase c4c7.2 sobre MD5: estructura Merkle-Damgård , relleno
ISO/IEC 7816-4, bits de indicación del tamaño
7.3.2. Funciones hash SHA y el proyecto Capstone con DSA
7.3.3. Por qué se habla de SHA-0
7.3.4. Características de la función hash SHA-1
7.3.5. Funcionamiento del hash SHA-1
7.3.6. SHA-1 por dentro con el software CriptoRes
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 731
Información compartida con Lección c4c7.2
• En SHA-1, al igual que en MD5:
• Se usa la construcción de Merkle-Damgård de compresión
• Se usa relleno ISO/IEC 7816-4, representado en hexadecimal
como 0x 80 00 00…, es decir, en binario un 1 seguido de 0s
• Una vez puesto al menos el primer byte de relleno 0x 80, se
reservan los últimos 64 bits del documento, para indicar el
tamaño del mismo y evitar ataques por extensión de longitud
• Si necesita repasar estos conceptos, por favor vea la clase c4c7.2
Función hash MD5, estructura y operaciones, en esta url:
• https://www.youtube.com/watch?v=rkBVdhfCy1c
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 732
Secure Hash Algorithm SHA y SHA-0
• En 1993, la National Security Agency NSA de los Estados Unidos
diseña una función hash de 160 bits, con la idea de que permita
sustituir a la función hash MD5 de Ron Rivest (1991) de solo 128 bits
• Además, en ese mismo año 1993 el gobierno USA da inicio al proyecto
Capstone para nuevos estándares de criptografía de uso público y
gubernamental, impulsado por la propia NSA y el National Institute of
Standards and Technology NIST
• En la firma digital Digital Signature Algorithm DSA que se incluye en
el proyecto Capstone, es obligatorio usar un hash de 160 bits
• En 1995 la NSA actualiza SHA como SHA-1, justificando que en aquel
algoritmo había encontrado debilidades, y pide que pase a llamarse
SHA-0 y no se use, sin publicar las razones técnicas que lo han forzado
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 733
Características de SHA-1 (1/2)
• SHA-1 fue creado por la NSA en 1995 y soluciona las debilidades
que mostraba su predecesor SHA o SHA-0 (1993)
• Esta función hash comienza su declive cuando en 2005 MD5 es
atacado, debido a que sus operaciones son muy similares
• Procesa bloques de 512 bits con una salida de 160 bits
• Expande el mensaje hasta una longitud 64 bits inferior a un
múltiplo de 512 bits
• El relleno se indica con un bit 1 seguido de tantos bits 0 como
sean necesarios, reservando los últimos 64 bits del mensaje para
añadir información sobre la longitud en bits del mismo
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 734
Características de SHA-1 (2/2)
• El algoritmo comienza con 5 vectores iniciales (IV) ABCDE de 32
bits cada uno, cuyo valor inicial no es secreto. A estos vectores y al
primer bloque de 512 bits de M se le aplican 80 operaciones de 32
bits con puertas lógicas, cuyo carácter es no lineal
• Las 80 operaciones se engloban en 4 vueltas o rondas F, G, H, I
• Como resultado de estas operaciones, se obtienen cinco nuevos
vectores A’B’C’D’E’ que serán la entrada IV’ para el segundo bloque
de 512 bits, repitiéndose este proceso con los restantes bloques de
M hasta terminar el mensaje
• La última salida de IV corresponde al resumen final H = h(M)
• RFC 6234: https://tools.ietf.org/html/rfc6234#page-36
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 735
Esquema de SHA-1
Relleno de 1 a 448 bits K mod 264
Mensaje de K bits
(64 bits)
MENSAJE 1000... K
A = 0x 67452301
L512 bits = N32 bits B = 0x EFCDAB89
C = 0x 98BADCFE
N palabras de 32 bits
D = 0x 10325476
512 bits E = 0x C3D2E1F0
Y1 Y2 Yq YL
RESUMEN
HSHA-1 HSHA-1 HSHA-1 HSHA-1
ABCDE de 160 bits
Primer resumen
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 736
Bloque principal de SHA-1
1er bloque de 512 Nuevo vector A’B’C’D’E’
bits del mensaje M de 160 bits para el
Vector próximo bloque...
inicial
A A’
Vuelta 1 Vuelta 2 Vuelta 3 Vuelta 4 +
B B’
+
C Función Función Función Función
F G H I + C’
D + D’
E 20 pasos 20 pasos 20 pasos 20 pasos
+ E’
+
Suma módulo 232
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 737
Funciones en vueltas F, G, H e I en SHA-1
Desplazamiento del registro
• F (b, c, d) → pasos t = 0 a 19
ea b
a bc d
c d
e
(b AND c) OR ((NOT b) AND d)
• Se realiza el proceso con la función F para • G (b, c, d) → pasos t = 20 a 39
las palabras M0 a M15 de 32 bits del primer b XOR c XOR d
• H (b, c, d) → pasos t = 40 a 59
bloque. Para obtener las palabras M16 a
(b AND c) OR (b AND d) OR (c AND d)
M19 que faltan, se usará un algoritmo de • I (b, c, d) → pasos t = 60 a 79
expansión que veremos más adelante b XOR c XOR d
• En las vueltas 2, 3 y 4 se repite el proceso Funciones F, G, H e I en SHA-1
con funciones G, H e I desde M20 hasta M79
• Tenemos 4 vueltas multiplicado por 20 palabras = 80 pasos por cada bloque
de 512 bits… pero, ¿cómo es posible sacar 80 palabras diferentes de 32 bits
de un bloque de 512 bits y un mensaje M que cuenta solo con 16 palabras?
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 738
Las 80 palabras de SHA-1 en cada vuelta
• Cada bloque de 16 palabras del mensaje (M0 ... M15) se expandirá a
80 palabras (W0 ... W79) según el siguiente algoritmo que, cuando
se acaban las 16 palabras de 32 bits del mensaje M, genera las
otras 64 palabras restantes haciendo una operación lógica xor con
palabras anteriores
• Para t = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
• Wt = Mt
• Para t = 16, 17, 18, 19, 20, 21, … 74, 75, 76, 77, 78, 79
• Wt = (Wt-3 Wt-8 Wt-14 Wt-16) <<< 1
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 739
Funcionamiento de SHA-1
Vector de 160 bits a b c d e
A = 0x 67452301 Función
B = 0x EFCDAB89 no lineal
C = 0x 98BADCFE
D = 0x 10325476 <<< 30
+ Suma
E = 0x C3D2E1F0 +
mod 232
<<< 5 +
Después de esta última
Bloques del texto a partir
operación, se produce el del bloque de 16 palabras + Wt 32 bits
desplazamiento del
Una constante en cada una
+ Kt 32 bits
vector hacia la derecha de las cuatro vueltas
ea b
a bc dc d
e
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 740
Funciones en cada vuelta de SHA-1
A = 67452301 B = EFCDAB89 C = 98BADCFE
D = 10325476 E = C3D2E1F0
Dependiendo de la ronda, la función F puede ser F, G, H, I:
F = (B AND C) OR (NOT B AND D) 1ª ronda
G = (B XOR C XOR D) 2ª ronda
H = (B AND C) OR (B AND D) OR (C AND D) 3ª Ronda
I = (B XOR C XOR D) 4ª ronda
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 741
Algoritmo de desplazamiento en cada paso
a b c d e
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 745
Cálculos en el primer paso (operaciones)
• Calculando Ft(b,c,d) + e + (a <<< 5) + Wt + Kt e = d = 10325476
• Ft(b,c,d) = (b AND c) or (NOT b AND d) d = c = 98BADCFE
• b AND c = EFCDAB89 AND 98BADCFE = 88888888 c = b <<< 30 = 7BF36AE2
• NOT b = NOT EFCDAB89 = 10325476 b = a = 67452301
a = TEMP = F2FCD9E0
• NOT b AND d = 10325476 and 10325476 = 10325476
• (b AND c) or (NOT b AND d) = 88888888 or 10325476 = 98BADCFE
• +e 98BADCFE + C3D2E1F0 = 5C8DBEEE
• + (a <<< 5) 5C8DBEEE + E8A4602C = 45321F1A
• + M0 45321F1A + 5348412D = 987A6047
• + Kt 987A6047 + 5A827999 = F2FCD9E0. Por lo tanto, TEMP = F2FCD9E0
67452301 EFCDAB89 98BADCFE 10325476 C3D2E1F0 Vector abcde en t = 1
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 746
Más información en píldoras Thoth
https://www.youtube.com/watch?v=pG8785ZEFuM
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 747
Conclusiones de la Lección 7.3
• SHA-1 usa la construcción de Merkle-Damgård de compresión
• Por lo tanto, divide el mensaje en bloques de 512 bits, incluyendo
siempre un relleno de ceros que comienza por 0x 80 y dejando los
últimos 64 bits para indicar el tamaño del documento
• Trabaja con un vector inicial de 5 palabras ABCDE de 32 bits cada una,
que se mezclan con el bloque de 512 bits del mensaje M en 80 pasos
con 4 vueltas con funciones F, G, H e I, 20 pasos vueltas en cada una
• Para cada vuelta se tomarán 20 palabras diferentes de 32 bits, a partir
de M y permitiendo mediante un algoritmo obtener hasta 80 palabras,
usándose además 4 constantes Kt una diferente para cada vuelta
• SHA-1 entrega un resumen de 160 bits y su uso cada vez es menor
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 748
Lectura recomendada (1/2)
• Guion píldora formativa Thoth nº 45, ¿Cómo funciona el hash SHA-1?, Jorge
Ramió, 2017
• https://www.criptored.es/thoth/material/texto/pildora045.pdf
• CLCript 02: MD5 y SHA-1: relleno y endianess, Jorge Ramió, 2019
• https://www.criptored.es/descarga/CLCript_entrega_02_MD5_y_SHA1_relleno_y_endian
ess.pdf
• Capstone (cryptography), Wikipedia
• https://en.wikipedia.org/wiki/Capstone_(cryptography)
• US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF), RFC IETF
• https://tools.ietf.org/html/rfc6234#page-36
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 749
Lectura recomendada (2/2)
• SHA-1, Wikipedia
• https://en.wikipedia.org/wiki/SHA-1#SHA-0
• SHA1 Online, Online Tools
• https://emn178.github.io/online-tools/sha1.html
• ASCII, Hex, Binary, Decimal, Base64 converter, RapidTables
• https://www.rapidtables.com/convert/number/ascii-hex-bin-dec-converter.html
• Re-Hashed: The Difference Between SHA-1, SHA-2 and SHA-256 Hash
Algorithms, Patrick Nohe
• https://www.thesslstore.com/blog/difference-sha-1-sha-2-sha-256-hash-algorithms/
• Why did the NSA create SHA?, Cryptography
• https://crypto.stackexchange.com/questions/79522/why-did-the-nsa-create-sha
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 750
Class4crypt c4c7.4
Módulo 7. Funciones hash
Lección 7.4. Colisiones en funciones hash MD5 y SHA-1
7.4.1. El efecto de difusión o avalancha, que no siempre se cumple
7.4.2. Repasando las debilidades de las funciones hash
7.4.3. Colisiones en MD5
7.4.3.1. Certificados digitales X.509
7.4.3.2. Archivos ejecutables
7.4.3.3. Archivos de documentos PDF e imágenes JPG
7.4.4. Colisiones en SHA-1
Class4crypt c4c7.4 Colisiones en funciones hash MD5 y SHA-1
https://www.youtube.com/watch?v=T7JZVqdVFBU
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 751
El efecto difusión o avalancha
• Un efecto que demuestra fortaleza: el cambio de un solo bit del
mensaje M deberá afectar en media al 50% de los bits del hash
• Y en la teoría esto sí se cumple. Lo veremos a continuación con
un simple ejercicio práctico
• Pero en MD5, y últimamente en SHA-1, ya no solo se cambia un
bit sino varios bytes del mensaje M, y los hashes de M y M’ son
iguales, siendo esto no por algo fortuito sino programado
• Por lo tanto, a partir de dos archivos M y M’ diferentes existen
técnicas que permiten modificarlos de tal forma que se obtenga
que h(M) = h(M’), es decir una colisión forzada
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 752
Práctica del efecto de difusión o avalancha
• Encontrar los hashes MD5 de estos dos textos donde solo hay un bit de diferencia:
• M1 = El café cuesta 2 euros M2 = El café cuesta 6 euros (2 = 0011 0010 y 6 = 0011 0110)
• hMD5(M1) = D89D86EE07E5D3DAAF9D59109A470BC2 =
• 1101100010011101100001101110111000000111111001011101001111011010101011
1110011101010110010001000010011010010001110000101111000010
• hMD5(M2) = 80A1F7DCAB1A111B4CAC3E4A2410C3AF =
• 1000000010100001111101111101110010101011000110100001000100011011010011
0010101100001111100100101000100100000100001100001110101111
• hMD5(M1) XOR hMD5(M2) =
• 0101100000111100011100010011001010101100111111111100001011000001111000
1100110001011001110101101010111110010101111100100001101101
• Los bits en rojo (1) muestran los bits que han cambiado entre hMD5(M1) y hMD5(M2)
• De los 128 bits del hash MD5, los bits que han cambiado entre hMD5(M1) y hMD5(M2) son 68,
prácticamente el 50% de los bits
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 753
Las colisiones en las funciones hash
• En la lección c4c7.1 vimos que los hashes deber tener fortaleza
ante ataques por primera preimagen y segunda preimagen,
necesitando como media 2n-1 intentos, o bien por la paradoja del
cumpleaños, siendo ahora necesarios en media solo 2n/2 intentos
• El problema no es que existan esas probabilidades de colisión,
que siempre las habrá por el principio del palomar, sino el hecho
de que estas colisiones en vez de ser casuales, sean fruto de una
modificación a conciencia realizada sobre los archivos
• Y esto último es lo que le viene sucediendo desde el año 2004 a
MD5 y desde 2017 a SHA-1. MD5 es mucho más vulnerable que
SHA-1, y no solo porque su resumen tenga 32 bits menos
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 754
Primer aviso de colisiones en MD5 en 2004
• En agosto de 2004, científicos chinos de la Shandong University
presentan en el congreso Crypto 2004 un trabajo en el que se
analizan las debilidades de funciones hash como MD5 y SHA-1
ante colisiones, ambas con construcción Merkle-Damgård
• En aquellos primeros ataques se demuestra que puede forzarse
el cambio de ciertos bits en el mensaje para que dos mensajes,
ahora diferentes por ese cambio, tengan el mismo hash MD5, si
bien dichos mensajes en hexadecimal no tienen sentido
• Con el paso del tiempo, esas modificaciones pueden dar lugar a
que documentos completamente opuestos, de cualquier formato,
tengan el mismo hash MD5, usando la paradoja del cumpleaños
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 755
Colisiones con MD5 en certificados X.509
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Class4crypt c4c7.4 - © jorgeramio 2021
Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 756
Ejercicio propuesto de colisiones en X.509
• Descargue desde el sitio web estos archivos: MD5Collision.certificate1.cer,
MD5Collision.certificate2.cer y MD5CollisionCA.cer
• Comandos a ejecutar en C:\OpenSSL-Win64\bin>
• Convertir archivos .cer en archivos .pem
• openssl x509 -in MD5Collision.certificate1.cer -inform DER -out MD5Collision.certificate1.pem
• openssl x509 -in MD5Collision.certificate2.cer -inform DER -out MD5Collision.certificate2.pem
• openssl x509 -in MD5CollisionCA.cer -inform DER -out MD5CollisionCA.pem
• Verificación de colisión certificate1 y certificate2
• Recuerde que estos certificados tienen validez hasta el 1 de febrero de 2007 (cambie la fecha del PC)
• openssl verify -CAfile MD5CollisionCA.pem MD5Collision.certificate1.pem
• openssl verify -CAfile MD5CollisionCA.pem MD5Collision.certificate2.pem
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 757
Colisiones con MD5 en archivos ejecutables
Dos archivos, uno “bueno” y uno “malo”
HashMD5 = CDC47D670159EEF60916CA03A9D4A007
• C:\Program Files\OpenSSL-Win64\bin>
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 759
Colisiones con MD5 en documentos PDF
Desarrollado en 2007 por Marc
Stevens, CWI, Amsterdam, The
Netherlands; Arjen K. Lenstra,
EPFL, Lausanne, Switzerland,
and Bell Labs, USA; Benne de
Weger, TU/e, Eindhoven, The
Netherlands
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 760
Práctica colisiones en archivos PDF
• C:\Program Files\OpenSSL-Win64\bin>
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 761
Colisiones con MD5 en imágenes JPG (1/2)
Desarrollado en 2012 por Nathaniel McHugh
Sheffield, U.K., investigador en seguridad, tarda
10 horas en encontrar una colisión por paradoja
del cumpleaños
JamesBrown.jpg
(102.400 bytes)
BarryWhite.jpg
(102.400 bytes)
HashMD5 = e06723d4961a0a3f950e7786f3766338
Descarga: https://arstechnica.com/information-technology/2014/11/crypto-attack-that-hijacked-windows-
update-goes-mainstream-in-amazon-cloud/
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 762
Colisiones con MD5 en imágenes JPG (2/2)
ship.jpg plane.jpg
335.104 bytes 335.104 bytes
HashMD5 = 253dd04e87492e4fc3471de5e776bc3d
Descarga: https://natmchugh.blogspot.com/2015/02/create-your-own-md5-collisions.html
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 763
Práctica colisiones en archivos JPG
• C:\Program Files\OpenSSL-Win64\bin>
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 764
Colisiones con SHA-1 en PDF: Shattered
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 765
Práctica colisiones en archivos PDF SHA-1
• C:\Program Files\OpenSSL-Win64\bin>
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 766
Conclusiones de la Lección 7.4
• Las funciones hash tienen como una fortaleza la propiedad de difusión o
avalancha: el cambio de un solo bit en el mensaje debe afectar al 50% de bits
• Pero, en algunos casos, el cambio de varios bytes hace que dos mensajes
diferentes colisionen, lo que unido a que las funciones hash son vulnerables a
ataques por la paradoja del cumpleaños, facilita encontrar esas colisiones
• MD5 comienza a experimentar estas debilidades en 2004 y SHA-1 en 2017
• Pueden usarse diversas técnicas, por ejemplo añadir al final de cada archivo
bits que permitan colisionar los hashes de ambos archivos modificados
• MD5 y SHA-1 aún se observan en muchos sitios, por ejemplo en el web de
descarga de Apache (https://httpd.apache.org/download.cgi)
• Se recomienda hoy usar SHA-256 o superior, y si fuese posible SHA-3
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 767
Lectura recomendada (1/2)
• CLCript 13: Colisiones en hashes MD5 y SHA-1, Jorge Ramió, 2019
• https://www.criptored.es/descarga/CLCript_entrega_13_Colisiones_en_MD5_y_SHA1.pdf
• How to Break MD5 and Other Hash Functions, Xiaoyun Wang and Hongbo Yu, 2004
• http://merlot.usc.edu/csac-f06/papers/Wang05a.pdf
• Colliding X.509 Certificates based on MD5-collisions, Lenstra, Wang y Weber, 2005
• http://www.win.tue.nl/~bdeweger/CollidingCertificates/
• An Illustrated Guide to Cryptographic Hashes, Steve Friedl, 2005
• http://www.unixwiz.net/techtips/iguide-crypto-hashes.html
• MD5 Collision Demo, Peter Selinge, Dep. of Mathematics and Statistics /Dalhousie University, 2006
• https://www.mathstat.dal.ca/~selinger/md5collision/
• Predicting the winner of the 2008 US Presidential Elections using a Sony PlayStation 3, Stevens, Lenstra,
de Weger, 2007
• https://www.win.tue.nl/hashclash/Nostradamus/
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 768
Lectura recomendada (2/2)
• Crypto attack that hijacked Windows Update goes mainstream in Amazon Cloud, Dan Goodin, 2014
• https://arstechnica.com/information-technology/2014/11/crypto-attack-that-hijacked-windows-
update-goes-mainstream-in-amazon-cloud/
• How I created two images with the same MD5 hash, Nat McHugh, 2014
• https://natmchugh.blogspot.com/2014/10/how-i-created-two-images-with-same-md5.html
• Hack the Hash, Nathaniel McHugh, 050615
• https://speakerdeck.com/natmchugh/hack-the-hash
• Shattered, Marc Stevens, Pierre Karpman, Elie Bursztein, Ange Albertini, Yarik Markov, 2017
• https://shattered.io/
• SHA-1 ‘Fully and Practically Broken’ by New Collision, Dennis Fisher, 2021
• https://duo.com/decipher/sha-1-fully-and-practically-broken-by-new-collision
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.4. Colisiones en funciones hash MD5 y SHA-1 - Página 769
Class4crypt c4c7.5
Módulo 7. Funciones hash
Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash
7.5.1. Resúmenes SHA-224, SHA-256, SHA-384 y SHA-512
7.5.2. Construcción esponja
7.5.3. Primitiva criptográfica Keccak
7.5.4. El algoritmo SHA-3
7.5.5. Resumen comparativo MD5, SHA-1, SHA-2 y SHA-3
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 770
Construcción Merkle-Damgård y SHA-2
• La familia de hashes
SHA-2 se basa en la
construcción Merkle-
Damgård, usada por
MD5 y SHA-1
• Para repasar estos
conceptos, puede ver la
lección c4c7.2 Función
hash MD5: estructura y
operaciones, o bien la
presentación entregada
y publicada en PDF https://www.youtube.com/watch?v=rkBVdhfCy1c
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 771
Características de la familia SHA-2
• A la vista de futuras vulnerabilidades en SHA-1, la NSA crea en
2001 una familia de hashes conocida como SHA-2
• SHA-2 entrega resúmenes de 224, 256, 384 y 512 bits
• El SHA-224 es el SHA-256 truncado a los 224 bits de la derecha
• El SHA-384 es el SHA-512 truncado a los 384 bits de la derecha
• SHA-256 y su variante SHA-224 emplean palabras de 32 bits
• SHA-512 y su variante SHA-384 emplean palabras de 64 bits
• Las variantes SHA-512/224 y SHA-512/256 son recomendadas
en vez de SHA-224 y SHA-256, al estar basadas en SHA-512 y
tener mayor resistencia a los ataques por extensión de longitud
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 772
Esquema genérico de la función SHA-2
• SHA-256
• Bloques de 512 bits, con 64
vueltas, vectores y palabras de
32 bits, suma mod 232 y un
mensaje máximo de 264-1 bits
• SHA-512
• Bloques de 1.024 bits, con 80
vueltas, vectores y palabras de
64 bits, suma mod 264 y un
mensaje máximo de 2128-1 bits
• Ch (Choose) y Maj (Majority): son operaciones lógicas AND y XOR
• 1 y 0: XOR repetido sobre el mismo registro con tres desplazamientos
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 773
Datos y operaciones en SHA-256
• Vector de inicio (32 bits parte decimal de la raíz cuadrada primos [2, 19])
• A = 6a09e667 B = bb67ae85 C = 3c6ef372 D = a54ff53a
• E = 510e527f F = 9b05688c G = 1f83d9ab H = 5be0cd19
• Terminadas las 16 palabras Wt de 32 bits del bloque (16*32 = 512), se extienden a
un total de 64 palabras (para los 64 pasos de cada bloque) haciendo operaciones
XOR, rotaciones y desplazamiento de palabras anteriores
• Kt es una constante de 32 bits basada en los primeros 64 primos en [2, 311]
• Ch ( E , F , G ) = ( E AND F ) XOR ( NOT E AND G )
• Maj ( A , B , C ) = ( A AND B ) XOR ( A AND C ) XOR ( B AND C )
• Σ0 ( A ) = ( A ⋙ 2 ) XOR ( A ⋙ 13 ) XOR ( A ⋙ 22 )
• Σ1 ( E ) = ( E ⋙ 6 ) XOR ( E ⋙ 11 ) XOR ( E ⋙ 25 )
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 774
Datos y operaciones en SHA-512
• Vector de inicio (64 bits parte decimal de la raíz cuadrada primos [2, 19])
• A = 6a09e667f3bcc908 B = bb67ae8584caa73b C = 3c6ef372fe94f82b
• D = a54ff53a5f1d36f1 E = 510e527fade682d1 F = 9b05688c2b3e6c1f
• G = 1f83d9abfb41bd6b H = 5be0cd19137e2179
• Terminadas las 16 palabras Wt de 64 bits del bloque (16*64 = 1.024), se extienden
a un total de 80 palabras (para los 80 pasos de cada bloque) haciendo operaciones
XOR, rotaciones y desplazamiento de palabras anteriores
• Kt es una constante de 64 bits basada en los primeros 80 primos en [2, 409]
• Ch ( E , F , G ) = ( E AND F ) XOR ( NOT E AND G )
• Maj ( A , B , C ) = ( A AND B ) XOR ( A AND C ) XOR ( B AND C )
• Σ0 ( A ) = ( A ⋙ 28 ) XOR ( A ⋙ 34 ) XOR ( A ⋙ 39 )
• Σ1 ( E ) = ( E ⋙ 14 ) XOR ( E ⋙ 18 ) XOR ( E ⋙ 41 )
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 775
Resumen características familia SHA-2
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 777
Construcción esponja
• Construcción esponja: función F(M) = h(M) para hash SHA-3
• Entrada de longitud variable y salida de longitud variable
• Permutación (o transformación) f de longitud fija
• Número de bits o estado = b, donde b = r + c (r bloque o rate y c capacity)
• Bloques M + relleno
• Bloques de r bits
• S = estado (b bits)
• Inicializado a cero
• Fase de absorción (entrada)
• Fase de exprimido (salida)
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 778
Estados de Keccak
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 782
Resumen características de funciones hash
Algorithm and variant Output size Internal Block size Rounds Operations Security Security Performance on Skylake First
(bits) state size (bits) against against (median cpb) published
(bits) collision length
Long 8 bytes
attacks extension
messages
(bits) attacks
(bits)
MD5 (as reference) 128 128 512 64 And, Xor, Rot, ≤ 18 0 4.99 55.00 1992
(4 × 32) Add (collisions
(mod 232), Or found)
SHA-0 160 160 512 80 And, Xor, Rot, < 34 0 ≈ SHA-1 ≈ SHA-1 1993
(5 × 32) Add (collisions
(mod 232), Or found)
SHA-1 < 63 3.47 52.00 1995
(collisions
found)
SHA-2 SHA-224 224 256 512 64 And, Xor, Rot, 112 32 7.62 84.50 2004
SHA-256 256 (8 × 32) Add 128 0 7.63 85.25 2001
(mod 232), Or,
Shr
SHA-384 384 512 1024 80 And, Xor, Rot, 192 128 (≤ 384) 5.12 135.75 2001
SHA-512 512 (8 × 64) Add 256 0 5.06 135.50
SHA-512/224 224 (mod 264), Or, 112 288 ≈ SHA-384 ≈ SHA-384 2012
SHA-512/256 256 Shr 128 256
SHA-3 SHA3-224 224 1600 1152 24 And, Xor, Rot, 112 448 8.12 154.25 2015
SHA3-256 256 (5 × 5 × 64) 1088 Not 128 512 8.59 155.50
SHA3-384 384 832 192 768 11.06 164.00
SHA3-512 512 576 256 1024 15.88 164.00
SHAKE128 d (arbitrary) 1344 min(d/2, 256 7.08 155.25
SHAKE256 d (arbitrary) 1088 128) 512 8.59 155.50
min(d/2,
256)
Ref: Wikipedia
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 783
Más información en píldoras Thoth
https://www.youtube.com/watch?v=hEa_IC1-JQI
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.3. Función hash SHA-1 - Página 784
Conclusiones de la Lección 7.5
• La familia SHA-2 propuesta por la NSA en 2001, y algunas variantes en 2004 y
2012, usa también la construcción Merkle-Damgård usada por MD5 y SHA-1
• Las más conocidas son SHA-224, SHA-256, SHA-384 y SHA-512
• Son funciones hash más seguras que SHA-1, trabajan con 32 y 64 bits, siendo
actualmente la más conocida y utilizada SHA-256
• El algoritmo SHA-3 usa una construcción esponja que tiene dos fases, la de
absorción y la de exprimido, y que entrega un número variable de bits según
las necesidades del usuario, utilizando el algoritmo Keccak
• Para el hash SHA-3, Keccak limita la salida a un único bloque en el que reduce
su tamaño al valor del hash deseado, es decir, 224, 256, 384 o 512 bits
• El NIST lo establece como estándar en 2015 pero su uso sigue siendo escaso
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 785
Lectura recomendada (1/2)
• Guion píldora formativa Thoth nº 46, ¿Qué son SHA-2 y SHA-3?, Jorge Ramió, 2017
• https://www.criptored.es/thoth/material/texto/pildora046.pdf
• Criptografía: Función SHA-256, Javier Domínguez Gómez, 2018
• https://academy.bit2me.com/wp-content/uploads/2019/10/Criptography_SHA_256_es.pdf
• SHA-2, Wikipedia
• https://es.wikipedia.org/wiki/SHA-2
• US Secure Hash Algorithms, Internet Engineering Task Force IETF, ISSN 2070-1721, May 2011
• https://datatracker.ietf.org/doc/html/rfc6234#page-51
• Convertir de decimal a hexadecimal con parte fraccionaria - Ejercicio #3, Pasos por ingeniería, 2017
• https://www.youtube.com/watch?v=2Z4Xa5_MIUU
• Rainbow Tables: A Path to Password Gold for Cybercriminals, Hashedout, Casey Crane, 2021
• https://www.thesslstore.com/blog/rainbow-tables-a-path-to-password-gold-for-cybercriminals/
• Hash Functions, SHA-3 Project, NIST
• https://csrc.nist.gov/projects/hash-functions/sha-3-project
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 786
Lectura recomendada (2/2)
• SHA-3, Wikipedia
• https://en.wikipedia.org/wiki/SHA-3
• Keccak and the SHA-3 Standardization, Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche,
2013
• https://csrc.nist.gov/csrc/media/projects/hash-functions/documents/keccak-slides-at-nist.pdf
• Lecture 21 (update): SHA-3 Hash Function, Christof Paar, 2017
• https://www.youtube.com/watch?v=JWskjzgiIa4
• SHA-3 and The Hash Function Keccak, An extension chapter for Understanding Cryptography, Christof
Paar, Jan Pelzl,
• http://professor.unisinos.br/linds/teoinfo/Keccak.pdf
• Some notes on SHA-3, Stefan's Blog
• https://stbuehler.de/blog/article/2014/05/15/some_notes_on_sha-3.html
• BLAKE2 - fast secure hashing
• https://www.blake2.net/
Class4crypt - Módulo 7. Funciones hash - © jorgeramio 2022 Lección 7.5. SHA-2, SHA-3 y resumen de funciones hash - Página 787