Хеш-функция
Хеш-функция преобразует входные данные практически любой длины в дайджест фиксированного размера.
Определение
Хеш-функция принимает данные и вычисляет значение фиксированного размера: хеш, дайджест или отпечаток. Одни и те же входные байты всегда дают один и тот же результат, а даже небольшое изменение входа обычно меняет дайджест.
Хеширование не является шифрованием. Дайджест не предназначен для декодирования или расшифровки в исходное сообщение; его используют для сравнения, идентификации, проверки целостности и как часть более крупных криптографических схем.
Криптографические свойства
Криптографическая хеш-функция должна противостоять поиску прообраза, второго прообраза и коллизий. Проще говоря, должно быть трудно подобрать вход по заданному дайджесту, трудно найти другой вход с тем же дайджестом для выбранного сообщения и трудно найти любые два входа с одинаковым дайджестом.
В современных системах применяют SHA-256, SHA-512, SHA-3 и BLAKE2. MD5 и SHA-1 всё ещё встречаются в старых контрольных суммах, но их стойкость к коллизиям нарушена, поэтому ими нельзя защищать чувствительные данные.
Применение и частая путаница
Хеши часто показывают в шестнадцатеричной записи. Например, SHA-256 выдаёт 32 байта, которые обычно записывают как 64 hex-символа. Сравнение заново вычисленного дайджеста с доверенным опубликованным значением показывает, изменились ли данные.
Обычный хеш не подтверждает, кто создал данные. Если злоумышленник может намеренно менять содержимое, нужны HMAC или цифровая подпись, а для хранения паролей используют Argon2id или bcrypt, а не быстрый сырой хеш.
Нет. Хеш — односторонний дайджест, а не шифротекст. Можно только угадывать возможные входы, хешировать их и сравнивать результаты.
Области применения пересекаются, но требования к безопасности разные. Контрольная сумма обнаруживает случайные изменения, а криптографический хеш проектируют с учётом намеренных атак, таких как поиск коллизий.
Они могут использовать разные алгоритмы или хешировать разные байты. Пробелы, переводы строк, нормализация Unicode, кодировка текста и режим файл/текст влияют на результат.