¿Cómo pueden los archivos de cero bytes generar un valor hash?

20

¿Cómo puede un archivo de texto de cero bytes generar un hash cuando se combina con sha1sum, sha256sum, etc.? ¿Qué datos procesan los programas para generar un valor hash?

Ejército de reserva

QuickHash en Linux

Comandos de terminal

Gizmo_the_Great
fuente

Respuestas:

21

Los algoritmos hash leen la entrada y la procesan, sin importar si hay datos. Este es un comportamiento válido y deseado e incluso se usa para verificar si cierta implementación es correcta. Esto lleva a "valores nulos" para todos los algoritmos principales.

Para resumir: da39a3ee5e6b4b0d3255bfef95601890afd80709 es el sha1-hash para un archivo vacío en todas partes, lo mismo es cierto con los valores nulos de otros alrogrithms.

Sascha Kaupp
fuente
1
¡Bueno, aprendes algo nuevo todos los días! No sabía que había un "valor nulo" para cada algoritmo. Muchas gracias.
Gizmo_the_Great
3
Los algoritmos hash tienen una condición inicial predeterminada, como un número con el que comienzan y mutan a medida que leen los datos. Si no hay datos para leer, el hash es solo el resultado de esa condición inicial preestablecida.
Kevin
La razón también se debe a que el algoritmo sha1 agrega la longitud de los datos (en este caso: cero) y también se agregan algunas banderas y relleno al mensaje. Por lo tanto, incluso "sin datos" dará como resultado el procesamiento de algunos datos.
user92979
14

Todos los algoritmos hash en Quick Hash son construcciones Merkle-Damgård . Como tal, rellenan el mensaje a un múltiplo del tamaño del bloque.

Los algoritmos de Quick Hash logran esto agregando un 1bit, tantos 0bits como sea necesario, y finalmente la longitud del mensaje.

Esto permite mensajes hash de longitud arbitraria, incluidos los mensajes de longitud cero.

Dennis
fuente
Si mi razón de edición es confusa, inicialmente leí mal su respuesta y la volví a redactar "para mayor claridad", luego me di cuenta de que mi edición era incorrecta y volví a arreglarla. El sistema consolidó las dos explicaciones porque estaba dentro de la misma ventana de tiempo.
Fixer1234
1

(¿Complemento para Dennis y la respuesta de fixer1234?)

Sucintamente:

$ shasum -a 256 /dev/null e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /dev/null

Todos los archivos de 0 bytes tendrán la misma suma de verificación.

$ shasum -a 512 /dev/null cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e /dev/null

$ shasum /dev/null da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null

$ md5 /dev/null MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e (nota: MD5 está roto; no es un 'hash seguro'. Esto está documentado en la entrada de MD5 en Wikipedia).

Así, por ejemplo, si está tratando de verificar la inocuidad de los archivos en virustotal.com con uno de los valores hash seguros que se enumeran aquí, por ejemplo da39a3ee5e6b4b0d3255bfef95601890afd80709, puede estar seguro de que el archivo era de 0 bytes (o era una carpeta, que virustotal, confusamente, se mezcla como si fuera un archivo de 0 bytes).

Matthew Elvey
fuente
¿Cómo se agrega esto a las respuestas actuales?
Máté Juhász
Al proporcionar una forma directa para que un escéptico verifique que es el caso de que todos los archivos de 0 bytes tengan la misma suma de verificación. Varias personas se mostraron escépticas al respecto al discutir la inocuidad de los archivos de 0 bytes en virustotal.com. Por lo tanto, creo que agrega a la solución una forma para alguien que llega a esta pregunta no está seguro de si es cierto que si la suma de verificación es cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f17b9a9, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 323, 313, 323, 313, 323, 313, 323.
Matthew Elvey