Безпека · 3 хв читання ·

MD5, SHA-1 чи SHA-256: який хеш обрати?

Контрольним сумам, перевірці файлів, паролям і підписам потрібне різне. Короткий посібник із вибору хеш-функції та одна помилка, якої треба уникати.

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

"hello"  MD5      5d41402abc4b2a76b9719d911017c592
"hello"  SHA-256  2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

MD5 і SHA-1: зламані з погляду безпеки

Два різні входи з однаковим хешем MD5 можна отримати за секунди, а практичні колізії SHA-1 оприлюднено ще 2017 року. Не використовуйте їх для підписів, сертифікатів і всього, що може підробити зловмисник. Для швидких контрольних сум вони й досі придатні — наприклад, щоб знайти дублікати файлів чи побудувати ключі кешу.

SHA-256: безпечний вибір за замовчуванням

Для перевірки цілісності, перевірки завантажень, цифрових підписів і адресації за вмістом стандартний вибір — SHA-256 із сімейства SHA-2. SHA-3 і BLAKE2 — сучасні альтернативи з порівнянним рівнем безпеки.

CRC32: від випадковостей, а не від атак

CRC32 і Adler-32 — швидкі контрольні суми, які виявляють випадкові пошкодження під час передавання та в архівах. Навмисно підібрати збіжне значення може будь-хто, тож від підробки вони не захищають.

Ніколи не зберігайте паролі зі швидким хешем

Це найпоширеніша помилка. Швидкість — саме те, що не потрібно для паролів: відеокарта перебирає мільярди хешів SHA-256 на секунду. Використовуйте повільний алгоритм із сіллю, створений для паролів, — Argon2, bcrypt чи scrypt — через бібліотеку паролів вашого фреймворку.

Хешування, шифрування й кодування — різні речі

Кодування   Base64, hex, URL   оборотне для всіх, без ключа
Шифрування  AES, RSA           оборотне лише з ключем
Хешування   SHA-256, MD5       в один бік, обернути неможливо

Хеш неможливо «розшифрувати». Сайти, які обіцяють обернути MD5, просто шукають хеш у величезних таблицях відомих вхідних даних. Це спрацьовує для поширених слів і коротких паролів та не спрацьовує для всього довгого й випадкового.

Перевірка завантаженого файлу

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

Linux        sha256sum file.iso
macOS        shasum -a 256 file.iso
Windows      certutil -hashfile file.iso SHA256
PowerShell   Get-FileHash file.iso -Algorithm SHA256

Довжина хешів

MD5 дає 128 бітів (32 шістнадцяткові символи), SHA-1 — 160 бітів (40), SHA-256 — 256 бітів (64), SHA-512 — 512 бітів (128). Якщо потрібно довести, хто створив повідомлення, а не лише те, що воно не змінювалося, використовуйте HMAC або цифровий підпис: звичайний хеш може переобчислити будь-хто, хто змінив вміст.

Що обрати — по одному рядку

  • Перевірка завантаженого файлу чи резервної копії: SHA-256.
  • Підписи, сертифікати й усе, що стосується безпеки: SHA-256 або надійніше, ніколи MD5 чи SHA-1.
  • Пошук дублікатів файлів або ключі кешу: MD5 чи SHA-1 підійдуть, і вони швидкі.
  • Виявлення помилок передавання в протоколі чи архіві: CRC32.
  • Зберігання паролів: жоден із них; використовуйте Argon2, bcrypt або scrypt.

Чому хеші не збігаються

Якщо два інструменти дають різні хеші для «того самого» тексту, вхідні дані майже ніколи не однакові: перенесення рядка в кінці, закінчення рядків Windows чи інше кодування змінюють увесь результат. Генератор хешів від 4Dev хешує текст як байти UTF-8, як md5sum, sha256sum і hashlib у Python, і підтримує 17 алгоритмів, зокрема MD5, SHA-1, SHA-2, SHA-3, BLAKE2 і CRC32.

Відкрити генератор хешів

LinkedInXFacebook