Что такое хеш

Криптографическая хеш-функция принимает вход любого размера, слово, файл, многогигабайтный образ диска, и выдаёт выход фиксированного размера, называемый дайджестом. всегда возвращает 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. Ничего не загружается; вычисление происходит локально.