Як файли з нульовим байтом можуть генерувати хеш-значення?


20

Як текстовий файл з нульовим байтом може генерувати хеш, коли хешировано з sha1sum, sha256sum тощо? Які дані програми хешують, щоб генерувати хеш-значення?

Та

QuickHash в Linux

Командні термінали

Відповіді:


21

Алгоритми хеша читають дані та обробляють його, незалежно від того, чи є дані взагалі. Це дійсна та потрібна поведінка і навіть використовується для перевірки правильності певної реалізації. Це призводить до "нульових хешів" для всіх основних алгоритмів.

Підсумовуючи це: da39a3ee5e6b4b0d3255bfef95601890afd80709 - це ша1-хеш для порожнього файлу скрізь, те ж саме і з нульовими хешами інших алгоритмів.


1
Ну ви дізнаєтесь щось нове щодня! Я не знав, що існує "нульове значення" для кожного алгоритму. Велике дякую.
Gizmo_the_Great

3
Алгоритми хешу мають заздалегідь задану початкову умову - на зразок числа, з якого вони починаються та мутують під час читання даних. Якщо немає даних для читання, хеш - це лише результат встановленого початкового стану.
Кевін

Причина також полягає в тому, що алгоритм sha1 додає довжину даних (в даному випадку - нуль), а в повідомлення також додаються деякі прапори та прокладки. Тож навіть "відсутні дані" все одно призведе до того, що деякі дані обробляться.
user92979

14

Всі алгоритми хешування у швидкому хеші - це конструкції Меркле – Дамгард . Таким чином, вони додають повідомлення до кратного розміру блоку.

Алгоритми Quick Hash досягають цього, додаючи 1трохи, стільки 0бітів, скільки потрібно, і нарешті довжину повідомлення.

Це дозволяє хешировать повідомлення довільної довжини, включаючи повідомлення нульової довжини.


Якщо причина моєї редагування заплутана, я спочатку неправильно прочитав вашу відповідь і переформулював її «для ясності», потім зрозумів, що моя редакція помилився, і повернувся назад і виправив її. Система консолідувала два пояснення, оскільки це було в одному часовому вікні.
fixer1234

1

(Доповнення до відповіді Денніса та fixer1234?)

Коротко:

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

Усі 0-байтові файли матимуть однакову контрольну суму.

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

$ shasum /dev/null da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null

$ md5 /dev/null MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e (зверніть увагу: MD5 зламаний; це не "безпечний хеш". Це зафіксовано у записі MD5 у Вікіпедії.)

Так, наприклад, якщо ви намагаєтеся перевірити нешкідливість файлів на virustotal.com за допомогою одного із перелічених тут захищених хеш-значень, наприклад, da39a3ee5e6b4b0d3255bfef95601890afd80709тоді ви можете бути впевнені, що файл дійсно був 0 байтів (або це папка, яка virustotal, заплутано, хеширується так, ніби це 0-байтний файл.)


Як це додає до поточних відповідей?
Máté Juhász

Надаючи прямий спосіб скептику переконатися, що це так, що всі 0-байтові файли матимуть однакову контрольну суму. Декілька людей скептично ставились до цього, коли обговорювали нешкідливість 0-байтових файлів на сайті virustotal.com. Тому я думаю, що це додає до рішення спосіб для когось, хто приходить до цього питання, не впевнений, що це правда, якщо контрольна сума є cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d28635777a5777eeeeeeee
Меттью Елві
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.