Наскільки точний `md5sum`?


27

Коли ви використовуєте md5sumдля перевірки цілісності файлу, наскільки точним є процес?

Чи означає підтверджений MD5, що КОЖНІ біт точно такий же, або є поріг, який необхідно порушити до відображення бінарної зміни в MD5?

Буде також вдячна будь-яка документація про те, як створюється md5.



@choroba, якщо я читаю все це правильно, то ймовірність невідкритої зміни збільшується в міру перевірки розміру файлу. Однак це все-таки ймовірність, і 100% впевненість може бути лише з файлом 16 байт. Я прав?
Konner Rasmussen

@Konner Я прочитав ваше запитання щодо передачі файлів. З цією метою це безпечно. Шанси трохи пошкодитися при передачі невеликі, і швидше за все, ви втратите частину скопійованого файлу при передачі, якщо припустити, що я зрозумів вашу попередню ситуацію . MD5 намагається еквівалентно порівнянню обох файлів, маючи певну перевагу в тому, що вам не потрібно отримувати доступ до обох файлів одночасно.
Докторо Рейхард

15
"Чи означає підтверджений MD5, що ВСЕ біт точно такий же." Зауважте, що це неможливо, завдяки принципу «Голуб». en.wikipedia.org/wiki/Pigeonhole_principle
Plutor

3
Я не думаю, що ви також отримаєте гарантію на 16-байтні файли.
Mooing Duck

Відповіді:


65

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

Однак цілком підходить (хоча майже напевно є кращі способи) використовувати MD5 для захисту від ненавмисних пошкоджень даних під час транзиту чи зберігання. Незважаючи на те, що така подія може призвести до того, що хеш MD5 буде однаковим, ймовірність настільки мала, що майже неможливо уявити, що це була б імовірність, про яку варто турбуватися. Поломки, спричинені випромінюванням фону, тунельним, статичним та десятками інших джерел, були б на порядок більш імовірними.

Навіть якби у вас було чотиримільйонних одиниць даних, ймовірність того, що невідповідний MD5 створить хеш MD5, що належить до одного з цих квадрильйонних одиниць, набагато менший, ніж один у квадрильйоні.


Хоча теоретично можливо генерувати два файли з однаковим хешем, це може бути практично нездійсненно. Особливо, якщо файл заміни також має сенс. Наприклад, якщо оригінальний файл був англійським текстом, можливо, не існує жодної іншої збіги, яка також є англійською. Або якщо це електронна таблиця Excel, жоден з інших файлів з тим самим хешем не буде дійсними електронними таблицями.
Бармар

1
@Barmar: win.tue.nl/hashclash/Nostradamus ці хлопці створили ряд файлів pdf з тим самим хешем MD5, щоб довести, що це практично можливо.
philfr

26

MD5 - хеш. По суті, він відображає весь вміст файлу в невеликий рядок, який має IIRC довжиною 16 байт.

Очевидно, буде кілька файлів, які мають хеш до однієї суми MD5. Тому відповідна сума MD5 не є гарантією точного відповідності між файлами.

Порогу як такого немає, тому що хеш способу працює. Таким чином, сума MD5 може виявити навіть одну зміну бітів. Однак багато одномісних змін разом можуть призвести до того, що хеш MD5 буде однаковим. Тому цілком розумно використовувати MD5 для перевірки цілісності файлів проти випадкової пошкодження, але ні, якщо можливий зловмисний намір, оскільки хтось міг би змінити файл, переконуючись, що хеш MD5 такий же.


1
настільки довгий короткий сюжет полягає в тому, що md5 - це не що інше, як швидкий і брудний спосіб перевірки цілісності файлу, і його слід використовувати лише тоді, коли виявлена ​​помилка не спричинить катаклізматичні наслідки ... правильно?
Коннер Расмуссен

3
найкраще використовувати це для виявлення корупції під час передачі чи копіювання. насправді не як річ безпеки.
Майкл Мартінес

12
@KonnerRasmussen - це не питання ступеня наслідків, це характер загрози. Якщо ви переживаєте, що два документи можуть випадково мати один і той же MD5, перестаньте турбуватися: шанси значно вищі, що ваші комп'ютери спонтанно спалахнуть полум’ям; якщо ви переживаєте, що розумний зловмисник може скласти документ, який відповідає тому, який у вас уже є, це серйозне занепокоєння, і ви повинні отримати кращий хеш; якщо ви переживаєте, що розумний зловмисник може скласти два документи, які відповідають один одному, не хвилюйтеся: це, безумовно, станеться.
Мальволіо

5
Звичайно, хоча генерувати хеш-кодування MD5 теоретично можливо, генерувати корисне зіткнення (як, наприклад, файл, що зіштовхується, є файлом одного типу, а його вміст принаймні правдоподібно достовірний) набагато складніше ...
Шадур,

6
@Shadur: Це було раніше, але постійні дослідження безпеки відкрили нові способи генерування зіткнень MD5, які полегшують це. Зокрема, якщо ваш формат файлу дозволяє відрізками даних про коментарі у вільному форматі, можна встановити будь-який хеш MD5, вставивши відповідний коментар.
MSalters

17

MD5-Hash складається з 128 біт. Один перевернутий біт у джерелі відбиває (в середньому) 64 біта в хеші.

Ймовірність випадкового зіткнення двох хешів становить 1/2 ^ 128, що становить 1 на 340 undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374 quadrillion 607 трлн 431 млрд 768 мільйонів 211 тисяч 456.

Однак якщо ви збережете всі хеші, то завдяки парадоксам на день народження ймовірність трохи вище. Щоб мати 50% шансів зіткнення будь-якого хешу, вам потрібно 2 ^ 64 хеша. Це означає, що для зіткнення в середньому вам потрібно буде хешувати 6 мільярдів файлів в секунду протягом 100 років.

Джерело: porneL, /programming/201705/how-many-random-elements-before-md5-produces-collisions


8
Отже, ти кажеш, що ще є шанс? : p
Холлоуей

1
Проблема полягає в тому, що хоча вам НЕОБХІДНО хешувати 6 мільярдів файлів в секунду протягом 100 років, щоб бути впевненим, що ви зіткнетесь; це цілком може статися протягом першої секунди.
деробі

Щоправда, це могло статися першої секунди. Але, як завжди, це стосується врівноваження причин. Ther може бути військовим застосуванням, коли цей ризик неприйнятний, але я б орендував машину, не замислюючись, де датчики подушки безпеки використовують md5. Пам'ятайте, ймовірно, що вас чекає блискавка кілька разів, чекаючи зіткнення md5.
Zsolt Szilagy

Мені шкода, але половина 2 ^ 128 - це 2 ^ 127, а не 2 ^ 64.
fischi

2
@fischi, прочитайте посилання на парадокс дня народження, а також en.wikipedia.org/wiki/Birthday_attack - справа не в тому, щоб просто вдвічі зменшити загальну кількість хешей. Зважаючи на пошуковий простір H, кількість хешів, які ви повинні генерувати, перш ніж отримати 50% шанс зіткнення, становить приблизно sqrt ((pi / 2) * H). Якщо ви зробите цю математику з 2 ^ 128, ви отримаєте число приблизно 2 ^ 64
Пол Діксон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.