Los archivos ZIP protegidos con contraseña son medios comunes para comprimir y compartir conjuntos de archivos, desde documentos confidenciales hasta muestras de malware e incluso archivos maliciosos (es decir, "facturas" de phishing en correos electrónicos). Pero, ¿sabía que es posible que un archivo ZIP encriptado tenga dos contraseñas correctas y que ambas produzcan el mismo resultado cuando se extrae el ZIP?
Muy interesante : "ZIP usa PBKDF2, que procesa la entrada si es demasiado grande. Ese hash (como bytes sin procesar) se convierte en la contraseña real."
#1 Por aclarar, PBKDF2 significa Password Based Key Deviation Function. La idea es a partir de una contraseña (que puede tener una longitud variable), generar una clave para la función de cifrado que se utilice después (que va a tener una longitud fija). Si el fichero se cifrase con AES128, de alguna forma tenemos que convertir esa contraseña de n bits en una clave 128 bits. Si utilizamos AES256, lo mismo, pero generando 256bits de clave. Para contraseñas pequeñas (menores que el tamaño de clave deseado), la solución suele ser padding, basicamente añadir ceros hasta el tamaño deseado. Para contraseñas largas, se aplica una función de hash para reducir el tamaño. Dos cosas curiosas:
- AES256 bit utiliza claves de 256 bits, pero PBKDF2 genera claves de 160 bits (SHA1), por lo que si sabemos que un fichero cifrado con AES256 ha derivado su clave utilizando PBKDF2 con SHA1, romperlo por fuerza bruta es muchos miles de millones de veces mas sencillo (pero igualmente fuera del alcance de la tecnología actual)
- Existen tres categorías donde pueden caer estas contraseñas. 1) Contraseñas pequeñas donde hay infinitas colisiones con contraseñas grandes. 2) Contraseñas grandes, que tienen infinitas colisiones con otras contraseñas grandes y con una contraseña pequeña que es fácil de calcular (que es lo que hace el articulo). 3) Contraseñas medianas que no tienen colisiones. Estas son contraseñas que utilizan menos de 256 bits pero que no se pueden representar con 160 bits. Al ser menores de 256 bits, las contraseñas se utilizan directamente como claves, pero al necesitar mas de 160 bits, nunca va a existir una serie de bits cuya función SHA1 genere dicho resultado.
Comentarios
Tiene infinitas contraseñas correctas. Pero solo es fácil calcular dos
Basicamente colisiones
Como todas las hash con pérdidas de información te sale más de una contraseña válida posible
Muy interesante : "ZIP usa PBKDF2, que procesa la entrada si es demasiado grande. Ese hash (como bytes sin procesar) se convierte en la contraseña real."
#1 Por aclarar, PBKDF2 significa Password Based Key Deviation Function. La idea es a partir de una contraseña (que puede tener una longitud variable), generar una clave para la función de cifrado que se utilice después (que va a tener una longitud fija). Si el fichero se cifrase con AES128, de alguna forma tenemos que convertir esa contraseña de n bits en una clave 128 bits. Si utilizamos AES256, lo mismo, pero generando 256bits de clave. Para contraseñas pequeñas (menores que el tamaño de clave deseado), la solución suele ser padding, basicamente añadir ceros hasta el tamaño deseado. Para contraseñas largas, se aplica una función de hash para reducir el tamaño. Dos cosas curiosas:
- AES256 bit utiliza claves de 256 bits, pero PBKDF2 genera claves de 160 bits (SHA1), por lo que si sabemos que un fichero cifrado con AES256 ha derivado su clave utilizando PBKDF2 con SHA1, romperlo por fuerza bruta es muchos miles de millones de veces mas sencillo (pero igualmente fuera del alcance de la tecnología actual)
- Existen tres categorías donde pueden caer estas contraseñas. 1) Contraseñas pequeñas donde hay infinitas colisiones con contraseñas grandes. 2) Contraseñas grandes, que tienen infinitas colisiones con otras contraseñas grandes y con una contraseña pequeña que es fácil de calcular (que es lo que hace el articulo). 3) Contraseñas medianas que no tienen colisiones. Estas son contraseñas que utilizan menos de 256 bits pero que no se pueden representar con 160 bits. Al ser menores de 256 bits, las contraseñas se utilizan directamente como claves, pero al necesitar mas de 160 bits, nunca va a existir una serie de bits cuya función SHA1 genere dicho resultado.
1234 o 1212