W jaki sposób pliki zero bajtów mogą generować wartość skrótu?

20

W jaki sposób zerowy bajt pliku tekstowego może generować skrót podczas mieszania z sha1sum, sha256sum itp.? Jakie dane są mieszane przez programy w celu wygenerowania wartości skrótu?

Ta

QuickHash w systemie Linux

Polecenia terminalowe

Gizmo_the_Great
źródło

Odpowiedzi:

21

Algorytmy mieszania odczytują dane wejściowe i przetwarzają je, bez względu na to, czy w ogóle są dane. Jest to prawidłowe i pożądane zachowanie, a nawet służy do sprawdzenia, czy określona implementacja jest poprawna. Prowadzi to do „zerowych skrótów” dla wszystkich głównych algorytmów.

Podsumowując: da39a3ee5e6b4b0d3255bfef95601890afd80709 jest skrótem sha1 dla pustego pliku wszędzie, to samo dotyczy zerowych skrótów innych algorytmów.

Sascha Kaupp
źródło
1
Cóż, codziennie uczysz się czegoś nowego! Nie wiedziałem, że dla każdego algorytmu istnieje „wartość zerowa”. Wielkie dzięki.
Gizmo_the_Great
3
Algorytmy mieszające mają z góry określony warunek początkowy - coś w rodzaju liczby, od której zaczynają i mutują podczas odczytu danych. Jeśli nie ma danych do odczytania, skrót jest tylko wynikiem tego wstępnie ustawionego warunku początkowego.
Kevin
Powodem jest także to, że algorytm sha1 dołącza długość danych (w tym przypadku zero), a do wiadomości dodano również flagi i dopełnienie. Tak więc nawet „brak danych” nadal spowoduje przetwarzanie niektórych danych.
user92979,
14

Wszystkie algorytmy mieszające w Quick Hash są konstrukcjami Merkle – Damgård . Dlatego wypełniają wiadomość wielokrotnością rozmiaru bloku.

Algorytmy Quick Hash osiągają to, dodając 1trochę, tyle 0bitów, ile potrzeba, a na końcu długość wiadomości.

Umożliwia to mieszanie wiadomości o dowolnej długości, w tym wiadomości o zerowej długości.

Dennis
źródło
Jeśli mój powód edycji jest mylący, początkowo źle odczytałem twoją odpowiedź i przeredagowałem ją „dla jasności”, a potem zdałem sobie sprawę, że moja edycja była błędna, wróciłem i naprawiłem ją. System skonsolidował dwa wyjaśnienia, ponieważ znajdował się w tym samym oknie czasowym.
fixer1234
1

(Dodatek do odpowiedzi Dennisa i fixer1234?)

Treściwie:

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

Wszystkie pliki 0-bajtowe będą miały tę samą sumę kontrolną.

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

$ shasum /dev/null da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null

$ md5 /dev/null MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e (uwaga: MD5 jest zepsuty; nie jest to „bezpieczny hash”. Jest to udokumentowane we wpisie MD5 w Wikipedii).

Tak więc, na przykład, jeśli próbujesz zweryfikować nieszkodliwość plików w virustotal.com za pomocą jednej z wymienionych tutaj bezpiecznych wartości skrótu, np. da39a3ee5e6b4b0d3255bfef95601890afd80709Możesz być pewien, że plik rzeczywiście miał 0 bajtów (lub był folderem, który virustotal, myląco, haszy, jakby to był plik 0-bajtowy.)

Matthew Elvey
źródło
Jak to dodaje do obecnych odpowiedzi?
Máté Juhász
Zapewniając sceptykowi bezpośredni sposób sprawdzenia, czy wszystkie pliki 0-bajtowe będą miały tę samą sumę kontrolną Kilka osób było sceptycznie nastawionych do tego, dyskutując o nieszkodliwości plików 0-bajtowych na virustotal.com. Więc myślę, że dodaje się do roztworu sposób dla kogoś, kto przychodzi na to pytanie nie wiem, czy to prawda, że jeśli suma kontrolna jest cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e, plik 0 bajtów.
Matthew Elvey