Questão Como os arquivos de byte zero podem gerar um valor de hash?


Como pode um arquivo de texto de zero bytes gerar um hash quando hash com sha1sum, sha256sum etc? Quais dados são os programas hash para gerar um valor de hash?

Ta

QuickHash in Linux

Terminal Commands


19


origem




Respostas:


Algoritmos de hash lêem a entrada e a processam, não importa se há dados. Esse é um comportamento válido e desejado e é usado até mesmo para verificar se uma determinada implementação está correta. Isso leva a "hashes nulos" para todos os principais algoritmos.

Resumindo: da39a3ee5e6b4b0d3255bfef95601890afd80709 é o hash sha1 para um arquivo vazio em todos os lugares, o mesmo acontece com os hashes nulos de outros alocrogramas.


20



Bem, você aprende algo novo todos os dias! Eu não sabia que havia um "valor nulo" para cada algoritmo. Muito Obrigado. - Gizmo_the_Great
Os algoritmos de hash têm uma condição inicial predeterminada - como se fosse um número com o qual eles começam e sofrem mutação ao ler os dados. Se não houver dados para ler, o hash é apenas um resultado dessa condição inicial predefinida. - Kevin
O motivo também é porque o algoritmo sha1 acrescenta o comprimento dos dados (neste caso: zero) e há alguns sinalizadores e preenchimentos adicionados à mensagem também. Portanto, mesmo "nenhum dado" ainda resultará em alguns dados sendo processados. - user92979


Todos os algoritmos de hash no Quick Hash são Construções Merkle-Damgård. Assim, eles enviam a mensagem para um múltiplo do tamanho do bloco.

Os algoritmos do Quick Hash conseguem isso anexando um 1 pouco, como muitos 0 bits conforme necessário e, finalmente, o tamanho da mensagem.

Isso permite mensagens de hashing de tamanho arbitrário, incluindo mensagens de comprimento zero.


14



Se a minha razão de edição é confusa, eu inicialmente interpretei mal a sua resposta e a reescrevi "para maior clareza", então percebi que minha edição estava errada e voltei e consertei. O sistema consolidou as duas explicações porque estava dentro da mesma janela de tempo. - fixer1234


(Add-on para Dennis e resposta do fixer1234?)

Sucintamente:

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

Todos os arquivos de 0 byte terão a mesma soma de verificação.

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

$ shasum /dev/null da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null

$ md5 /dev/null MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e (nota: MD5 está quebrado; não é um 'hash seguro'. Isso está documentado na entrada do MD5 na Wikipedia.)

Assim, por exemplo, se você está tentando verificar a inocuidade dos arquivos em virustotal.com com um dos valores de hash seguros listados aqui, e. da39a3ee5e6b4b0d3255bfef95601890afd80709 então você pode ter certeza de que o arquivo era de fato 0 bytes (ou era uma pasta, que virtualmente confunde hashes como se fosse um arquivo de 0 bytes).


1



Como isso contribui para as respostas atuais? - Máté Juhász
Fornecendo uma maneira direta para um cético para verificar que é o caso que todos os arquivos de 0 byte terão a mesma soma de verificação Várias pessoas foram céticos sobre isso ao discutir a inocuidade de arquivos de 0 bytes em virustotal.com. Então, eu acho que isso adiciona à solução uma maneira para alguém que chega a essa pergunta sem ter certeza se a soma de verificação é cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e, então o arquivo era 0 bytes. - Matthew Elvey