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

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

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

Ejército de reserva

QuickHash en Linux

Comandos terminales

Respuesta1

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 utiliza para verificar si una determinada implementación es correcta. Esto conduce a "hashes nulos" para todos los algoritmos principales.

Para resumir: da39a3ee5e6b4b0d3255bfef95601890afd80709 es el hash sha1 para un archivo vacío en todas partes, lo mismo ocurre con los hashes nulos de otros alrogritmos.

Respuesta2

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

Los algoritmos de Quick Hash logran esto añadiendo un 1bit, tantos 0bits como sean necesarios y, finalmente, la longitud del mensaje.

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

Respuesta3

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

Sucintamente:

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

Todos los archivos de 0 bytes tendrán la misma suma de comprobació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 MD5 en Wikipedia).

Así, por ejemplo, si intentas verificar la inocuidad de archivos envirustotal.comcon uno de los valores hash seguros enumerados aquí, por ejemplo, da39a3ee5e6b4b0d3255bfef95601890afd80709entonces puede estar seguro de que el archivo tenía realmente 0 bytes (o era una carpeta, que virustotal, de manera confusa, aplica hash como si fuera un archivo de 0 bytes).

información relacionada