MD5 проти SHA-1 проти SHA-2 - який є найбільш безпечним хешем шифрування та як їх перевірити

Що таке хеш-функція?

Хеш-функція приймає вхідне значення (наприклад, рядок) і повертає значення фіксованої довжини. Ідеальна хеш - функція має такі властивості:

  • це дуже швидко
  • він може повернути величезний діапазон хеш-значень
  • він генерує унікальний хеш для кожного унікального входу (без зіткнень)
  • він генерує різнорідні хеш-значення для подібних вхідних значень
  • генеровані хеш-значення не мають помітного шаблону у своєму розподілі

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

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

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

1. "The quick brown fox." 2. "The quick brown fax." 

Ми можемо порівняти хеш-значення MD5, що генеруються з кожного з двох речень:

1. 2e87284d245c2aae1c74fa4c50a74c77 2. c17b6e9b160cda0cf583e89ec7b7fc22 

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

Загальні хеш-функції

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

MD5

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

SHA-1

SHA означає алгоритм Secure Hash. Першою версією алгоритму був SHA-1, а пізніше пішов SHA-2 (див. Нижче).

Тоді як MD5 виробляє 128-бітовий хеш, SHA1 генерує 160-бітний хеш (20 байт). У шістнадцятковому форматі це ціле число 40 цифр. Як і MD5, він був розроблений для криптологічних програм, але незабаром виявилося, що він також має вразливі місця. На сьогодні він вже не вважається менш стійким до атак, ніж MD5.

ША-2

Друга версія SHA, яка називається SHA-2, має безліч варіантів. Ймовірно, найчастіше використовується SHA-256, який Національний інститут стандартів і технологій (NIST) рекомендує використовувати замість MD5 або SHA-1.

Алгоритм SHA-256 повертає хеш-значення 256 біт або 64 шістнадцяткові цифри. Хоча і не зовсім досконалі, сучасні дослідження показують, що вони набагато безпечніші, ніж MD5 або SHA-1.

З точки зору продуктивності хеш SHA-256 обчислюється приблизно на 20-30% повільніше, ніж хеш MD5 або SHA-1.

ША-3

Цей хеш-метод був розроблений наприкінці 2015 року і досі не бачив широкого застосування. Його алгоритм не пов'язаний з алгоритмом, який використовував його попередник, SHA-2.

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

Використання хеш-значень для перевірки

Типовим використанням хеш-функцій є проведення перевірок перевірки. Часте використання - перевірка стиснених колекцій файлів, таких як архівні файли .zip або .tar.

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

Наприклад, я можу сформувати контрольну суму MD5 для файлу tar у Unix, використовуючи такі команди:

tar cf - files | tee tarfile.tar | md5sum - 

Щоб отримати хеш MD5 для файлу в Windows, використовуйте команду Get-FileHash PowerShell:

Get-FileHash tarfile.tar -Algorithm MD5 

Сформована контрольна сума може бути розміщена на сайті завантаження поруч із посиланням для завантаження архіву. Після завантаження архіву приймач може підтвердити, що він потрапив правильно, виконавши таку команду:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -c 

де 2e87284d245c2aae1c74fa4c50a74c77 - сформована контрольна сума, яка була опублікована. Успішне виконання вищезазначеної команди призведе до стану ОК, такого як:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -ctarfile.tar: OK