Что такое хеширование? Полное объяснение хеш-функций
Быстрый ответ
Hashing конвертирует любой input в output фиксированного размера (hash) через one-way функцию. Одинаковый input всегда даёт одинаковый hash; разные input дают разные hash (collision resistance). Используйте наш бесплатный Hash Generator для SHA-256, SHA-1 и MD5 в браузере.
Введение
Hashing — процесс конвертации входных данных любого размера в output фиксированного размера, называемый hash или digest. Hash-функция — алгоритм, выполняющий конвертацию. Криптографические hash-функции имеют особые свойства, полезные для целостности данных, хранения паролей и цифровых подписей. В отличие от шифрования, hashing — one-way —нельзя восстановить вход из hash.
Шаг за шагом
-
Понимать свойства хеш-функции
Криптографические хэш-функции обладают четырьмя ключевыми свойствами: (1) Детерминированность — одни и те же входные данные всегда дают одинаковый результат. (2) Быстро вычислять. (3) Односторонний — невозможно восстановить входные данные из хеша. (4) Устойчивость к коллизиям — невозможно найти два разных входа с одинаковым хешем. (5) Лавинный эффект — небольшое изменение входных данных резко меняет выпуск.
-
Изучите общие алгоритмы
SHA-256 (256-битный вывод, 64 шестнадцатеричных символа) — это современный стандарт, используемый в биткойнах, TLS и цифровых подписях. SHA-512 более безопасен, но медленнее. SHA-3 — новейшее семейство. MD5 (128-битный) и SHA-1 (160-битный) сломаны для обеспечения устойчивости к коллизиям и не должны использоваться в целях безопасности.
-
Отличие хеширования от шифрования
Хеширование является односторонним — вы не можете его отменить. Шифрование двустороннее — расшифровать можно с помощью ключа. Хеширование предназначено для целостности и проверки; шифрование предназначено для конфиденциальности. Никогда не используйте хеш для хранения данных, которые необходимо восстановить.
-
Используйте хеширование правильно
Для обеспечения целостности данных хешируйте данные и сравнивайте их с заведомо исправным хешем. Для паролей используйте хэш с медленным растяжением ключей (bcrypt, scrypt, Argon2) с уникальной солью, а не необработанный SHA-256, который слишком быстр и уязвим для грубой силы.
Примеры
SHA-256 хэш
Вход: Hello, World!
Выход: dffd6021bb2bd5b0af676290809ec008dfca50a8d29e6ac0a52c2d7e9f0a3b0c
Лавинный эффект
Вход: Привет, мир! (против Привет, мир?)
Выход: Совершенно другой хэш, несмотря на изменение одного символа
Хэш MD5 (неверный, только устаревший)
Вход: Hello, World!
Выход: ed0760733d7505e9ceacf8af225020ac
Распространенные проблемы
- Использование MD5 или SHA-1 для обеспечения безопасности — оба сломаны для устойчивости к коллизиям. Используйте SHA-256 или более мощную версию в целях безопасности.
- Хеширование паролей без соли — идентичные пароли создают идентичные хэши, что позволяет проводить атаки по радужным таблицам. Используйте bcrypt, scrypt или Argon2 с уникальной солью.
- Путаница хеширования с шифрованием — хеширование является односторонним (не может быть отменено); шифрование двустороннее (можно расшифровать ключом).
- Ожидается, что хэши будут уникальными — коллизии теоретически возможны, но практически невозможны для безопасных алгоритмов (SHA-256 имеет 2^256 возможных выходов).
Советы
- Используйте SHA-256 для проверки целостности данных, адресации контента и цифровых подписей.
- Для хранения паролей используйте bcrypt, scrypt или Argon2, а не необработанный SHA-256. Эти алгоритмы имеют ключевое растяжение, чтобы противостоять грубой силе.
- Хеширование является односторонним — никогда не используйте его для хранения данных, которые необходимо восстановить. Используйте шифрование для конфиденциальных данных.
- Используйте наш генератор хэшей для мгновенного вычисления SHA-256 и других хешей в вашем браузере.