Что такое хеш
Криптографический хеш превращает любые входные данные в отпечаток фиксированного размера. Измените один бит входа — и весь результат изменится; по результату нет практического способа вернуться ко входу; и невозможно найти два входа с одинаковым хешем (для алгоритмов, которые всё ещё безопасны). Это делает хеши полезными для проверки загрузок, обнаружения изменений, дедупликации данных и, с солью и медленным алгоритмом, для хранения паролей.
| Алгоритм | Результат | Статус | Применение сегодня |
|---|---|---|---|
| MD5 | 128 бит (32 hex) | Взломан: коллизии тривиальны | Устаревшие контрольные суммы, ключи кеша. Никогда для безопасности. |
| SHA-1 | 160 бит (40 hex) | Взломан: коллизии продемонстрированы (2017) | Идентификаторы объектов Git (заменяются). Не для подписей. |
| SHA-256 | 256 бит (64 hex) | Безопасен | Вариант по умолчанию: TLS, подпись кода, контрольные суммы загрузок, Bitcoin. |
| SHA-384 | 384 бит (96 hex) | Безопасен | Где нужен больший запас; subresource integrity. |
| SHA-512 | 512 бит (128 hex) | Безопасен | Быстрее SHA-256 на 64-битных CPU; хеши паролей Linux (sha512crypt). |
HMAC
HMAC подмешивает секретный ключ в хеш особым образом (RFC 2104), так что только обладатель ключа может создать или проверить значение. Это механизм, стоящий за JWT HS256, подписями вебхуков (GitHub, Stripe), подписью запросов AWS и кодами TOTP. Простой hash(key + message) для этого не безопасен; HMAC существует, чтобы устранить уязвимость к length-extension у такой конструкции.
Проверка загруженного файла
- Найдите опубликованную контрольную сумму на странице загрузки (часто это файл
SHA256SUMS). - Перетащите сюда загруженный файл или выполните
sha256sum fileв shell. - Вставьте опубликованное значение в поле сравнения. Совпадение означает, что файл байт в байт соответствует опубликованному.
Совпадающий хеш доказывает целостность, а не подлинность: если злоумышленник может подменить файл, он может подменить и контрольную сумму рядом с ним. Для подлинности нужна подпись (GPG, Sigstore, minisign).
Пароли
Не храните пароли в виде хешей SHA-256. Быстрые хеши перебираются на GPU миллиардами в секунду. Используйте медленную, солёную, требовательную к памяти функцию, созданную для этой задачи: Argon2id, scrypt или bcrypt.
Вопросы
Какой хеш использовать?
SHA-256, если нет конкретной причины выбрать другой. Он безопасен, поддерживается повсеместно и быстр. SHA-512 немного быстрее на 64-битном оборудовании. MD5 и SHA-1 годятся только для задач, не связанных с безопасностью, например для ключей кеша.
Можно ли расшифровать хеш?
Нет. Хеш — не шифрование; нет ни ключа, ни обратной функции. Вместо этого злоумышленники перебирают входные данные и сравнивают хеши, что работает для коротких или распространённых входов (отсюда радужные таблицы) — поэтому паролям нужны соль и медленные хеши.
Почему мой MD5 отличается от указанного на сайте?
Обычно дело в концах строк (CRLF против LF), завершающем переводе строки или другой кодировке текста. Хешируйте точные байты: для файла используйте область перетаскивания, а не вставку его содержимого.
SHA-256, вычисленный здесь, совпадает с sha256sum?
Да, байт в байт. Инструмент использует реализацию WebCrypto браузера для семейства SHA. Для текстового ввода байты — это UTF-8 кодировка введённого.
Мой файл или пароль куда-то отправляется?
Нет. Хеширование выполняется локально на JavaScript. У сайта нет серверного компонента, который мог бы их получить.