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

20

Como um arquivo de texto de zero byte gera um hash quando hash com sha1sum, sha256sum etc? Quais dados os programas estão fazendo o hash para gerar um valor de hash?

Ta

QuickHash no Linux

Comandos do terminal

Gizmo_the_Great
fonte

Respostas:

21

Os algoritmos de hash leem a entrada e a processam, independentemente de haver dados. Esse é um comportamento válido e desejado e é usado até para verificar se uma determinada implementação está correta. Isso leva a "hashes nulos" para todos os principais algoritmos.

Para resumir: da39a3ee5e6b4b0d3255bfef95601890afd80709 é o sha1-hash para um arquivo vazio em qualquer lugar, o mesmo se aplica aos hashs nulos de outros alrogritmos.

Sascha Kaupp
fonte
1
Bem, você aprende algo novo todos os dias! Eu não sabia que havia um "valor nulo" para cada algoritmo. Muito Obrigado.
26813 Gizmo_the_Great #
3
Os algoritmos de hash têm uma condição inicial predeterminada - como um número com o qual eles começam e se modificam à medida que lêem os dados. Se não houver dados para ler, o hash é apenas o resultado dessa condição inicial predefinida.
26413 Kevin
O motivo também é porque o algoritmo sha1 anexa o comprimento dos dados (neste caso: zero) e também existem alguns sinalizadores e preenchimentos na mensagem. Assim, mesmo "sem dados" ainda resultará no processamento de alguns dados.
precisa saber é o seguinte
14

Todos os algoritmos de hash no Quick Hash são construções de Merkle – Damgård . Como tal, eles colocam a mensagem em um múltiplo do tamanho do bloco.

Os algoritmos do Quick Hash conseguem isso anexando um 1bit, quantos 0bits forem necessários e, finalmente, o tamanho da mensagem.

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

Dennis
fonte
Se o motivo da minha edição é confuso, inicialmente eu interpretei mal sua resposta e a reformulei "para maior clareza", depois percebi que minha edição estava errada e voltei e a corrigi. O sistema consolidou as duas explicações porque estava dentro da mesma janela de tempo.
Fixer1234
1

(Complemento à resposta de Dennis e 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 (observação: o MD5 está quebrado; não é um 'hash seguro'. Isso está documentado na entrada MD5 da Wikipedia.)

Assim, por exemplo, se você está tentando verificar a inocência de arquivos em virustotal.com com um dos valores seguros de hash listados aqui, por exemplo da39a3ee5e6b4b0d3255bfef95601890afd80709, pode ter certeza de que o arquivo era realmente 0 bytes (ou era uma pasta que confuso, hashes como se fosse um arquivo de 0 byte.)

Matthew Elvey
fonte
Como isso contribui para as respostas atuais?
Máté Juhász
Fornecendo uma maneira direta para um cético verificar se todos os arquivos de 0 byte terão a mesma soma de verificação Várias pessoas ficaram céticas quanto a isso ao discutir a inocência de arquivos de 0 byte em virustotal.com. Portanto, acho que isso adiciona à solução uma maneira de alguém que chega a essa pergunta não ter certeza se é verdade que, se a soma de verificação for cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b9a323, os bytes 0 foram 0
Matthew Elvey