Безпека · 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.