Безопасность · 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