Что такое хеш
Криптографическая хеш-функция принимает вход любого размера, слово, файл, многогигабайтный образ диска, и выдаёт выход фиксированного размера, называемый дайджестом. всегда возвращает 256 бит (32 байта), независимо от того, дали вы ему один символ или миллион. Один и тот же вход всегда даёт один и тот же дайджест, и даже изменение одного бита на входе даёт совершенно другой.
Этот отпечаток фиксированного размера и детерминированный — вся суть. Дайджест — компактный заместитель данных: если два дайджеста совпадают, можно быть уверенным, что входы были идентичны; если различаются, входы где-то различались.
Свойства, делающие её криптографической
Многие функции сжимают данные до фиксированного размера. Функция заслуживает слова криптографическая, соблюдая три жёстких гарантии:
- Стойкость к прообразу (односторонность). По дайджесту вычислительно невыполнимо найти вход, который его порождает. Нельзя прокрутить функцию назад.
- Стойкость ко второму прообразу и к коллизиям. Невыполнимо найти два разных входа, хеширующихся в один дайджест. Без этого дайджест был бы слабым отпечатком.
- Лавинный эффект. Переворот одного бита входа меняет примерно половину битов выхода, без видимого узора, связывающего вход с выходом.
Это верно лишь для функций, выдержавших проверку. SHA-1, некогда стандарт, теперь взломан в отношении стойкости к коллизиям (практическая коллизия была продемонстрирована в 2017 году) и не должен использоваться там, где от него зависит безопасность. Семейство SHA-2, SHA-256, SHA-384 и SHA-512, остаётся надёжным и сегодня является безопасным выбором по умолчанию.
Хеш — не шифрование
Это самая частая путаница, поэтому стоит сказать прямо. Шифрование обратимо с ключом: вы шифруете, чтобы сохранить данные в тайне, и расшифровываете, чтобы вернуть их. У хеша нет ключа и нет обратной операции. Нельзя «расхешировать» дайджест, чтобы восстановить вход, потому что выход намного меньше возможных входов и информация намеренно уничтожается. Хеширование — для проверки, а не для секретности.
Где хеширование оправдывает себя
- Целостность и контрольные суммы. Опубликуйте SHA-256 файла рядом с ним; тот, кто скачивает и пересчитывает дайджест, может подтвердить, что при передаче ничего не изменилось и не повредилось.
- Адресация по содержимому. Системы вроде Git именуют объекты по их хешу, так что идентичное содержимое автоматически попадает по одному адресу.
- Цифровые подписи. Схемы подписи подписывают хеш сообщения вместо всего сообщения, потому что дайджест мал и фиксированного размера.
Одна важная оговорка: пароли — особый случай. Обычный быстрый хеш вроде SHA-256 — неподходящий инструмент для хранения паролей именно потому, что он быстр, атакующий может пробовать миллиарды догадок в секунду. Хранение паролей требует намеренно медленного, посоленного алгоритма, такого как bcrypt, scrypt или Argon2. Используйте SHA-2 для целостности; используйте хеш паролей для паролей.
Как инструмент его вычисляет
Инструмент хеширования использует встроенную реализацию Web Crypto браузера для SHA-1, SHA-256, SHA-384 и SHA-512, тот же проверенный код, который ваш браузер использует для TLS, и показывает каждый дайджест в шестнадцатеричном виде и Base64. Ничего не загружается; вычисление происходит локально.