SHA-256 або MD5 для цілісності файлів


81

Я знаю, що SHA-256 надає перевагу MD5 для безпеки тощо, але якщо я хочу використовувати метод лише для перевірки цілісності файлів (тобто нічого спільного з шифруванням пароля тощо), чи є якась перевага за допомогою SHA-256?

Оскільки MD5 є 128-розрядною, а SHA-256 - 256-розрядною (тому вдвічі більшою) ...

  1. Чи потрібно це для шифрування вдвічі довше?

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

  3. Чи дає MD5 контрольну суму?


43
Термінологія: ні MD5, ні SHA- * нічого не шифрують. Вони є хеш-функціями.

1
@delnan Насправді, я щасливий, що ти це зробив, дякую. Але хіба хеш-подання чогось не є шифруванням?
Дейв

16
Ні. Для початківців шифрування є оборотним (за визначенням), тоді як хеш не можна змінити (за принципом голубиної ями).

1
Ну, ці два принципово різні, і, отже, різні види нападів на одного з них навіть не мають сенсу для іншого, тому "більш безпечний" не має багато сенсу в IMHO. Хочете пояснити, що ви маєте на увазі під цим?

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

Відповіді:


79

І SHA256, і MDA5 є алгоритмами хешування. Вони беруть ваші вхідні дані, в даному випадку ваш файл, і виводять 256/128-бітове число. Цей номер є контрольною сумою. Шифрування не відбувається, оскільки нескінченна кількість входів може призвести до того самого хеш-значення, хоча насправді зіткнення трапляються рідко.

Відповідно до цієї відповіді, для обчислення SHA256 потрібно трохи більше часу, ніж для MD5 .

Випадково я б сказав, що MD5, мабуть, підійде для того, що вам потрібно.


Дякуємо, але як поза темою запитання, ви хочете сказати, що шифрування має створювати унікальний "код" / "ідентифікатор", такий як GUID?
Дейв

8
@DaveRook Як би ви тоді розшифрували повідомлення?
Paul Manta

@PaulManta - Я поняття не маю, оскільки я роблю це лише заради цілісності, я ніколи не розглядав подібне шифрування, але це чудово знати. Дякую.
Дейв

5
@dave Я думаю, що в цій темі є трохи плутанини, оскільки SHA називається криптографічним хешем. Це означає (я далеко не фахівець) - це те, що ви можете використовувати його для хешування паролів. Таким чином, якщо зловмисник отримує файл вашого пароля користувача, він не може використовувати хеші для відновлення вихідних паролів. Шифрування відрізняється тим, що воно має бути оборотним.
dandan78

@ Ви згадували нижче, що шукали список хеш-функцій. Погляньте на статтю wikipedia про функції хешу: en.wikipedia.org/wiki/List_of_hash_functions
Роб

18

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

Існують алгоритми, спеціально розроблені для якнайшвидшого хешування файлів для перевірки цілісності та порівняння ( murmur, XXhash...). Очевидно, що вони не призначені для безпеки, оскільки вони не відповідають вимогам алгоритму безпечного хешування (тобто випадковість), але мають низький рівень зіткнення для великих повідомлень . Ці особливості роблять їх ідеальними, якщо ви шукаєте не безпеку, а швидкість.

Приклади цих алгоритмів та порівняння можна знайти у цій чудовій відповіді: Який алгоритм хешування найкращий для унікальності та швидкості? .

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


18

До 1): Так, на більшості процесорів SHA-256 приблизно на 40% швидше, ніж MD5.

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

До 3): MD5 - це алгоритм для обчислення контрольних сум. Потім контрольна сума, обчислена за допомогою цього алгоритму, називається контрольною сумою MD5.


10

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

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

Інший коментатор зазначив, що Ubuntu та інші використовують контрольні суми MD5. На додаток до MD5 Ubuntu перейшов на PGP та SHA256, але важче знайти документацію щодо сильніших стратегій перевірки. Докладніше див. На сторінці HowToSHA256SUM .


1
Я знаю, що запізнився на вечірку, але дякую вам за це! Якщо ви використовуєте контрольні суми, щоб переконатися, що зловмисник не псує ваші файли, MD5 - жахлива ідея. Якщо зловмисник знає, що вони роблять, він теоретично може знайти правильне зіткнення, яке дозволить їм виконати свій код, не змінюючи контрольну суму файлу, тим самим уникаючи перевірки безпеки на основі контрольної суми. SHA-алгоритми досить добре працюють на сучасних центральних процесорах і набагато краще масштабуються (оскільки розміри файлів стають більшими, це також повинні робити наші контрольні суми). Якщо ви маєте справу з великими відеофайлами HD, я б використав SHA-512.
Kris Craig

10
  1. Ні, це менш швидко, але не так повільно
  2. Для програми резервного копіювання, можливо, потрібно мати щось навіть швидше, ніж MD5

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

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


Дякую, але проблема в тому, що я не знаю, що ще я міг би використати! Я не прошу рекомендації, і я радий дослідити інші підходи, але чи можете ви запропонувати щось інше, ніж MD5 / SHA256?
Дейв

1
Залежить від мови програмування та середовища виконання, яке ви використовуєте.
Genesis Rock

6

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

Ви можете перевірити такі ресурси:


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

3
@DaveRook Окрім того, якщо ви подивитеся на такі відомі веб-сайти, як Sun, Ubuntu та інші, ви можете помітити, що вони надають контрольну суму MD5 щодо цілісності файлів. Це може підтвердити його значення для таких завдань.
SaidbakR

4
  1. Так, на більшості центральних процесорів SHA-256 в два-три рази повільніше, ніж MD5, хоча і не в першу чергу через довший хеш. Дивіться інші відповіді тут та відповіді на ці запитання щодо переповнення стека .
  2. Ось сценарій резервного копіювання, коли MD5 не підходить:
    • Ваша програма резервного копіювання хешує кожен файл, для якого створюється резервна копія. Потім він зберігає дані кожного файлу за його хешем, тому, якщо ви створюєте резервну копію одного і того ж файлу двічі, ви отримуєте лише одну його копію.
    • Зловмисник може змусити систему робити резервні копії керованих ними файлів.
    • Зловмиснику відомий хеш MD5 файлу, який вони хочуть видалити із резервної копії.
    • Потім зловмисник може використовувати відомі слабкі місця MD5 для створення нового файлу, який має такий самий хеш, що і файл для видалення. Коли для цього файлу буде створено резервну копію, він замінить файл для видалення, а резервні копії даних цього файлу будуть втрачені.
    • Цю систему резервного копіювання можна було б трохи посилити (і зробити більш ефективною), не замінюючи файли, хеш яких він раніше зустрічав, але тоді зловмисник може запобігти резервному копіюванню цільового файлу з відомим хешем, попереджаючи резервне копіювання спеціально побудованого підробленого файл із однаковим хешем.
    • Очевидно, що більшість систем, резервних та інших, не задовольняють умовам, необхідним для того, щоб ця атака була практичною, але я просто хотів навести приклад ситуації, коли SHA-256 буде кращим перед MD5. Чи буде це так для системи, яку ви створюєте, залежить не тільки від характеристик MD5 та SHA-256.
  3. Так, криптографічні хеші, подібні генерованим MD5 та SHA-256, є різновидом контрольної суми.

Щасливого хешування!

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