¿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
¿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
Respuestas:
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.
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 1
bit, tantos 0
bits como sea necesario, y finalmente la longitud del mensaje.
Esto permite mensajes hash de longitud arbitraria, incluidos los mensajes de longitud cero.
(¿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).