На практиці так, ідентичний криптографічний хеш означає, що файли однакові, до тих пір, поки файли не були створені зловмисником або іншим шкідливим об'єктом. Шанси випадкових зіткнень з будь-якою добре розробленою криптографічною хеш-функцією настільки малі, що є незначними на практиці та за відсутності активного зловмисника.
Загалом, однак, ні, ми не можемо сказати, що два довільних файли, що мають один і той же хеш, безумовно означають, що вони однакові.
Те, як працює криптографічна хеш-функція, - це взяти вхід довільної довжини та вивести значення фіксованої довжини, обчислене з входу. Деякі хеш-функції мають декілька вихідних довжин на вибір, але вихід все ще певною мірою має значення фіксованої довжини. Це значення буде до декількох десятків байт; алгоритми хешування з найдовшим вихідним значенням у загальному використанні сьогодні мають 512-бітний вихід, а 512-бітний вихід 64 байти.
Якщо вхід до хеш-функції довший, ніж вихід хеш-функції, слід усунути деяку точність, щоб вхід підходив до виводу. Отже, повинно існувати кілька входів довжин, більших за довжину виводу, які генерують однаковий вихід.
Візьмемо для прикладу поточну робочу коня SHA-256. Він виводить хеш у 256 біт або 32 байти. Якщо у вас є два файли, кожен з яких становить рівно 32 байти, але різні, вони повинні (якщо не бракує алгоритму) з різними значеннями, незалежно від вмісту файлів; в математичних термінах, хеш - функція відображення 2 на 256 вхідний простір на 2 256 вихідного простору, яке повинно бути можна обійтися без зіткнень. Однак якщо у вас є два файли довжиною 33 байти, має існувати деяка комбінація входів, які дають однакові 32-байтні хеш-значення вихідного хеш для обох файлів, тому що ми зараз відображаємо 2 264 простір вводу на 2 256вихідний простір; тут ми легко бачимо, що в середньому повинно існувати 2 8 входів для кожного виходу. Візьміть це далі, і з 64-байтовими файлами має існувати 2 256 входів на кожен вихід!
Криптографічні хеш-функції розроблені таким чином, що обчислювально важко скласти вхід, який дає певний вихід, або скласти два входи, що дають однаковий вихід. Це відоме як опір попередньої атаки або опір атаці зіткнення . Знайти ці зіткнення не неможливо ; це просто призначено бути справді, дійсно, справді, дуже важко. (Трохи особливий випадок нападу зіткнення - це день народження .)
Деякі алгоритми краще протистоять атакуючим. MD5, як правило, вважається повністю зламаним в ці дні, але останнє, що я подивився, він все ще мав досить гарну стійкість до першого зображення . SHA-1 також ефективно порушується; попередні атаки були продемонстровані, але вимагають конкретних умов, хоча немає підстав вважати, що так буде нескінченно; як говориться, напади завжди стають кращими, вони ніколи не стають гіршими. В даний час SHA-256/384/512 вважається безпечним для більшості цілей. Однак , якщо ви просто зацікавлені в тому, чи є дві неправомірно розроблені, дійсніФайли однакові, то будь-якого з них повинно бути достатньо, оскільки вхідний простір вже достатньо обмежений, щоб вас найбільше цікавили випадкові зіткнення. Якщо у вас є якісь підстави вважати, що файли були створені зловмисно, вам потрібно як мінімум використовувати криптографічну хеш-функцію, яка в даний час вважається безпечною, що ставить нижню смугу на SHA-256.
Перший малюнок - знайти вхід, який дає конкретне хеш-вихідне значення; другий малюнок - це знайти один вхід, який дає такий же вихід, як і інший, зазначений вхід; зіткнення полягає у знаходженні двох входів, які дають однаковий вихід, без огляду на те, що це таке, а іноді і без огляду на те, що є входами.
Все, що сказано, важливо пам’ятати, що файли можуть мати дуже різні подання даних і все одно відображати абсолютно однакові. Таким чином, вони можуть бути однаковими, навіть якщо їхні криптографічні хеші не збігаються, але якщо хеші збігаються, вони з великою ймовірністю виявляться однаковими.
cmp
Unix абоfc
(порівняння файлів) у Windows.