Хеш-функция используется для преобразования произвольного набора данных в строку фиксированной длины (хеш, или дайджест). Основные назначения:
- Проверка целостности данных: Сравнивая хеши до и после передачи/хранения, можно выявить изменения в данных.
- Безопасное хранение паролей: Вместо самих паролей хранятся их хеши. При аутентификации введенный пароль хешируется и сравнивается с сохраненным хешем.
- Цифровая подпись: Хеш документа подписывается закрытым ключом отправителя. Получатель проверяет подпись открытым ключом и сравнивает полученный хеш с хешем документа.
- Структуры данных (хеш-таблицы): Хеш ключа используется для определения индекса или адреса, где хранится соответствующее значение, обеспечивая быстрый поиск и доступ.
- Криптовалюты и блокчейн: Хеши блоков используются для связывания их в цепочку и обеспечения неизменности данных.
Ключевые свойства "хорошей" криптографической хеш-функции:
- Детерминированность: Для одних и тех же входных данных всегда получается один и тот же хеш.
- Эффективность вычисления: Хеш легко и быстро вычисляется.
- Сопротивление коллизиям (Collision Resistance): Очень сложно найти два разных входных значения, дающих одинаковый хеш.
- Сопротивление первому прообразу (Preimage Resistance): Сложно найти исходные данные по их хешу.
- Сопротивление второму прообразу (Second Preimage Resistance): Сложно найти другое входное значение, дающее тот же хеш, что и заданное входное значение.