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

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.


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.


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.)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.