Чи безпечно ігнорувати можливість зіткнення SHA на практиці?


209

Скажімо, у нас є мільярд унікальних зображень, один мегабайт кожен. Ми обчислюємо хеш SHA-256 для вмісту кожного файлу. Можливість зіткнення залежить від:

  • кількість файлів
  • розмір одного файлу

Як далеко ми можемо ігнорувати цю можливість, вважаючи, що вона дорівнює нулю?


1
Це залежить від того, для чого ви використовуєте хеш-ключі. Якщо це якась ідентифікація файлу, то зіткнення може означати, що файли ідентичні, і тому вам потрібно порівнювати файли також у випадках зіткнення. Я б сказав, що було б досить безпечно порівняти розміри файлів.
mojuba

Так, у цьому випадку, якщо порівнювати розміри файлів, можливість різко зменшується. Ви також можете використовувати два алгоритми хешування і об'єднати результати. Тоді можливість зіткнення обох одночасно зменшується більше. Але питання полягає в тому, наскільки "досить" безпечно? Можливо, нам потрібна формула та числа.
Христо Христов

2
@ Христо Христов: якщо припустити, що хеш-ключ є псевдо випадковим числом (що теоретично є правильним), то один мільярд 128-бітних ключів дає ймовірність зіткнення 2,9 * 10 ^ -30. Ви навіть не можете назвати це "дрібницею", це менше ніж;)
mojuba

3
@mojuba: ще краще, він запитує про 256-бітний хеш.
Майкл Боргвардт

FWIW: система управління версіями GIT ідентифікує файли за їхнім вмістом SHA.
snemarch

Відповіді:


385

Звичайна відповідь випливає так: яка ймовірність того, що шахрайський астероїд зазнає аварії на Землі протягом наступної секунди, знищивши цивілізацію, як ми це знаємо, і вбивши кілька мільярдів людей? Можна стверджувати, що будь-яка нещасна подія з ймовірністю нижчою, ніж насправді, не є дуже важливою.

Якщо у нас є «ідеальна» хеш - функція з вихідними розміром п , і ми маємо р повідомлення в хеш (індивідуальна довжина повідомлення не має значення), то ймовірність зіткнення становить близько р 2 /2 п + 1 (це наближення , яке справедливо для "малого" р , тобто істотно менше 2 n / 2 ). Наприклад, для SHA-256 ( n = 256 ) та одного мільярда повідомлень ( p = 10 9 ) тоді ймовірність становить приблизно 4,3 * 10 -60 .

Космічна порода масових вбивць трапляється в середньому приблизно кожні 30 мільйонів років. Це призводить до того, що ймовірність виникнення такої події відбудеться в найближчі секунди приблизно до 10 -15 . Це на 45 порядків імовірніше, ніж зіткнення SHA-256. Якщо коротко сказано, якщо зіткнення SHA-256 є страшними, то ваші пріоритети неправильні.

У налаштуваннях безпеки, коли зловмисник змушений обирати повідомлення, які будуть хешовані, зловмисник може використовувати значно більше мільярда повідомлень; однак, ви побачите, що ймовірність успіху нападника все одно буде зникає невеликою. У цьому вся суть використання хеш-функції з 256-бітовим виходом: щоб ризики зіткнення нехтували.

Звичайно, все вищесказане передбачає, що SHA-256 - це "ідеальна" хеш-функція, що далеко не доведено. Проте SHA-256 здається досить надійним.


12
Це дуже гарна відповідь, дякую! Але, якщо у випадку зіткнення атомна електростанція вибухне, і це залежить від вас, ви ризикуєте? Якщо ви абсолютно праві, то ми можемо взяти на себе ризик, адже це на 45 порядків більше ймовірність знищення цивілізації. Правильно?
Христо Христов

46
@Hristo Я думаю, що так, можна було б ризикувати. Атомна електростанція вже має набагато більше шансів вибухнути через інші речі, такі як механічна несправність, помилка людини в її будівництві або помилка оператора під час роботи, і ми вже ризикуємо. Якби зіткнення SHA-256 були єдиними речами, що спричиняли ядерні інциденти, ми майже напевно мали б досі їх точно нуль.
Роман Старков

27
foxnews.com/science/2013/02/11/… Я почав би думати про SHA512.
Дастін Опреа

37
Тепер я можу легко відпочити, знаючи, що я, швидше за все, зітреш астероїд задовго до того, як житиму, щоб пережити зіткнення SHA-256.
AaronLS

10
Вибачте, вас не вистачає на так званому "парадоксі від дня народження". Подивіться краще на «приємний стіл», він працює не так, як ви думаєте. Для наведених цифр у цій таблиці було б значення "10 ^ 9" у стовпці з позначкою "4.3 * 10 ^ -60" та рядком "128 біт" (але таблиця не йде нижче 10 ^ -18 ).
Томас Порнін

47

Можливість зіткнення не залежить від розміру файлів, лише від їх кількості.

Це приклад парадокса іменинника . Сторінка Вікіпедії дає оцінку ймовірності зіткнення. Якщо запустити цифри, ви побачите, що всі жорсткі диски, коли-небудь виготовлені на Землі, не можуть вмістити достатньо 1 МБ файлів, щоб отримати ймовірність зіткнення навіть 0,01% для SHA-256.

В основному, ви можете просто проігнорувати можливість.


5
Я не можу погодитися з висновком. Так, жодні жорсткі диски не можуть зберігати таку кількість файлів, але ви IMO неправильно трактуєте ситуацію. Для отримання зіткнення потрібні лише два файли. Хоча ймовірність дуже мала, все ж може статися.
гострий зуб

11
@sharptooth: ні, я неправильно представляю ситуацію. Можливість того, що ви і всі, кого ви знаєте, загинули від дорожньо-транспортної пригоди в один і той же день, дуже низька, але це все одно може статися (і це набагато вище, ніж у випадку зіткнення SHA-256). Але ви нехтуєте цією можливістю.
Майкл Боргвардт

11
@sharptooth: Я говорив про окремі , одночасні ДТП кількох сотень конкретних людей. Ви дійсно не можете вжити жодних кроків, щоб зробити це нижчим. Це було б безглуздо, оскільки це вже дивно низько. Але все-таки набагато більше шансів, ніж зіткнення SHA-256, що ви навіть не уявляєте, скільки. Це той самий аргумент, який висловив Томас.
Майкл Боргвардт

12
@sharptooth: Ні, шанси значно не зростають, оскільки кількість все ще абсолютно карликів за розміром хеш-простору SHA-256. Це одне, що ви не приймаєте до уваги належним чином - всі фактори повинні бути зважені за їх фактичною величиною, а не однаково. Якщо ви генерували один мільярд хешів в секунду для кожної людини на Землі, і робили це протягом тисячі років, у вас все одно буде менше 1% шансів зіткнення.
Майкл Боргвардт

3
Якщо ви не перевірите наявність непоправленої помилки кожного завантаження з пам'яті або зчитування з диска (які мають набагато більшу ймовірність, ніж зіткнення SHA-256), ви можете не повністю зрозуміти ймовірності.
Крістоф

17

Перш за все, це не нуль, а дуже близький до нуля .

Ключове питання - що станеться, якщо насправді відбудеться зіткнення ? Якщо відповідь "атомна електростанція вибухне", то, швидше за все, ви не повинні ігнорувати можливість зіткнення. У більшості випадків наслідки не такі страшні, тому ви можете ігнорувати можливість зіткнення.

Також не забувайте, що ваше програмне забезпечення (або його крихітна його частина) може бути розгорнуто і одночасно використане в газільйоні комп’ютерів (деякі крихітні вбудовані мікрокомп'ютери, які майже сьогодні є скрізь). У такому випадку вам потрібно помножити оцінку, яку ви отримали, на максимально можливу кількість примірників.


... не за кількістю примірників, а за кількістю даних даних, що засвоюються # наборами даних.
Андреас Шпіндлер

1
Це неправильно, кількість копій запущеного програмного забезпечення не має значення. Важливо лише кількість унікальних файлів, які обробляються, і парадокс дня народження - це математика для обчислення.
Дірк Бестер

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


@GreenTree Те, з чим ви пов’язані, - це навмисне майстерне зіткнення.
гострий зуб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.