Toolyard

Что такое хеш? MD5, SHA-1 и SHA-256 простыми словами

Отпечаток данных

Хеш-функция берёт любые входные данные (слово, документ, видео на 4 ГБ) и превращает их в короткую строку фиксированной длины — хеш, дайджест или контрольную сумму. Одни и те же данные всегда дают один и тот же хеш, а малейшее изменение даёт совершенно другой:

Входные данныеХеш SHA-256
hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Hello185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
hello!ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b

Одна заглавная буква или один восклицательный знак меняет каждый символ результата. Попробуйте сами в Генератор хешей.

Какой должна быть хорошая хеш-функция

  • Детерминированной: одни и те же данные всегда дают один и тот же хеш на любом компьютере.
  • Односторонней: по хешу нельзя восстановить исходные данные.
  • Стойкой к коллизиям: должно быть практически невозможно найти два разных входа с одинаковым хешем.
  • Быстрой для контрольных сумм — это удобно, и именно поэтому быстрые хеши не годятся для паролей (об этом ниже).

Хеширование — не шифрование

Шифрование двустороннее: с ключом вы получаете исходные данные обратно. У хеша нет ключа, и его нельзя обратить. Он позволяет только проверить совпадение. Base64 — ещё одно, третье: это просто кодировка, и раскодировать её может кто угодно.

Распространённые алгоритмы

АлгоритмДлинаСостояние
MD5128 бит (32 шестнадцатеричных символа)Взломан с 2004 года; годится только для обнаружения случайных повреждений
SHA-1160 бит (40 шестнадцатеричных символов)Взломан: первая реальная коллизия опубликована в 2017 году
SHA-256256 бит (64 шестнадцатеричных символа)Безопасен; стандартный выбор сегодня
SHA-512512 бит (128 шестнадцатеричных символов)Безопасен; на 64-битных компьютерах часто быстрее SHA-256

Вот слово hello в каждом из них:

  • MD5: 5d41402abc4b2a76b9719d911017c592
  • SHA-1: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
  • SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

Что значит «взломан» для MD5 и SHA-1

Для MD5 и SHA-1 исследователи умеют намеренно создавать два разных файла с одинаковым хешем. Злоумышленник может этим воспользоваться, чтобы подменить безобидный файл вредоносным с совпадающей контрольной суммой или подделать подписанный документ. Ни один из них не взломан в смысле обратимости, а случайное повреждение по-прежнему меняет хеш, поэтому сумма MD5 всё ещё выявит загрузку, оборвавшуюся на полпути. Она лишь не может доказать, что файл никто не подменял.

SHA-256 и SHA-512 относятся к семейству SHA-2, опубликованному в 2001 году, и практических атак на них не известно. SHA-3, стандартизованный в 2015 году, — другая конструкция, которую держат про запас.

Где используются хеши

  • Проверка загрузок: разработчики публикуют SHA-256 своих файлов; если ваш совпадает, он идентичен. См. как проверить контрольную сумму.
  • Электронные подписи и сертификаты HTTPS: документ или сертификат хешируется, и подписывается хеш.
  • Git: каждый коммит и файл определяется своим хешем. Git долго использовал SHA-1 и добавил поддержку SHA-256.
  • Биткоин и другие блокчейны: блоки связываются в цепочку с помощью SHA-256.
  • Поиск дубликатов: два файла с одинаковым SHA-256 — один и тот же файл.

Хеши и пароли

Сайты никогда не должны хранить ваш пароль — только его хеш; при входе они хешируют введённое и сравнивают. Но SHA-256 тут не подходит: он так быстр, что злоумышленник с утёкшей базой может перебирать миллиарды вариантов в секунду. Паролям нужно медленное хеширование с солью, созданное для этой задачи, например bcrypt, scrypt или Argon2. Соль — случайное значение, добавляемое к каждому паролю перед хешированием, чтобы у двух людей с одинаковым паролем получились разные хеши.

Попробуйте

Генератор хешей вычисляет MD5, SHA-1, SHA-256, SHA-384 и SHA-512 любого текста или файла сразу, в браузере, и может сравнить их с опубликованной контрольной суммой.

Инструменты из этого руководства

Другие руководства