Перейти к содержимому
LeedyBox
Поддержать

Что такое хеш-функции

Хеш-функция превращает любые входные данные в короткий «отпечаток» фиксированной длины. В этом руководстве объясняется, для чего полезны MD5, SHA-1 и SHA-256, где их возможностей недостаточно и как сравнить файл с опубликованной контрольной суммой.

Что такое хеш

Криптографическая хеш-функция читает данные любого размера и выдаёт дайджест фиксированной длины: 128 бит для MD5, 160 бит для SHA-1 и 256 бит для SHA-256; обычно он отображается как шестнадцатеричный текст. Одинаковые входные данные всегда дают одинаковый дайджест, а изменение даже одного бита входных данных даёт совсем другой дайджест. Хеш однонаправлен: восстановить входные данные по дайджесту нельзя — разве что подбирать варианты входных данных и сравнивать результаты.

Это руководство содержит общую информацию. Принимая решения в области безопасности, следуйте требованиям вашей организации или сервиса, с которым вы работаете.

Контрольные суммы и целостность

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

Контрольная сумма помогает, только если самому опубликованному значению можно доверять. Если злоумышленник может изменить и файл, и контрольную сумму на одной и той же странице, совпадение хешей мало что доказывает. Эту проблему решают цифровые подписи.

Почему MD5 и SHA-1 не подходят для безопасности

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

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

Алгоритм Длина дайджеста Статус безопасности
MD5 128 бит (32 шестнадцатеричных символа) Взломан (коллизии); только для устаревших контрольных сумм
SHA-1 160 бит (40 шестнадцатеричных символов) Взломан (коллизии); устаревшее применение
SHA-256 256 бит (64 шестнадцатеричных символа) Широко используется и рекомендуется
SHA-384 / SHA-512 384 / 512 бит Широко используется и рекомендуется

Хеширование — не шифрование, а паролям нужно большее

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

Поэтому быстрые хеши вроде MD5 или SHA-256 сами по себе не подходят для хранения паролей. Они рассчитаны на скорость, что позволяет злоумышленнику быстро проверить очень большое число вариантов. Для хранения паролей используют медленные алгоритмы с солью, созданные специально для этой цели, например Argon2, scrypt или bcrypt. Если вы создаёте систему входа, используйте поддерживаемую библиотеку и актуальные рекомендации для своей платформы, а не хеш общего назначения.

HMAC для аутентификации сообщений

Простой хеш показывает, изменились ли данные, но пересчитать его может кто угодно. HMAC (код аутентификации сообщений на основе хеша) объединяет данные с секретным ключом, например HMAC-SHA256. Правильное значение может получить только тот, кто знает ключ, поэтому получатель может проверить, что сообщение пришло от владельца ключа и не было изменено. HMAC часто применяют в вебхуках и для подписи запросов к API. Храните ключ в секрете: любой, у кого он есть, может создавать корректные коды.

Почему один и тот же текст даёт разный хеш

Хеш вычисляется по байтам, а не по видимому тексту. Результат меняют следующие различия:

  • Окончания строк: Windows использует CR LF, а Linux и macOS — LF.
  • Кодировка символов: «é» представляется разными байтами в UTF-8 и в старых кодировках.
  • Перенос строки или пробел в конце либо метка порядка байтов (BOM) в начале файла.
  • Заглавные или строчные буквы во входных данных.

Если хеш не совпадает, сначала проверьте эти моменты. Хешировать исходный файл обычно надёжнее, чем скопированный из него текст. Сам шестнадцатеричный результат не зависит от регистра: A1B2 и a1b2 — одно и то же значение.

Часто задаваемые вопросы

Можно ли расшифровать хеш MD5 или SHA-256?

Нет. Хеш — это не зашифрованные данные. Онлайн-сервисы «расшифровки» ищут заранее вычисленные хеши распространённых входных данных, поэтому хеши простых значений почти не дают защиты.

Какой алгоритм использовать для проверки загруженного файла?

Тот, который предоставляет издатель. Если предлагается несколько, SHA-256 или SHA-512 — лучший выбор, чем MD5 или SHA-1.

Загружает ли генератор хешей мой файл на сервер?

Генератор хешей LeedyBox вычисляет хеши в вашем браузере, поэтому выбранные текст или файл обрабатываются на вашем устройстве.