Что такое некриптостойкая хеш-функция?

«Что такое некриптостойкая хеш-функция?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Некриптостойкая хеш-функция — это алгоритм, который преобразует данные произвольной длины в фиксированную строку (хеш), но не предназначен для использования в криптографических целях, таких как защита паролей или цифровые подписи.

Ключевые недостатки, делающие их непригодными для безопасности:

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

Типичные примеры: MD5, SHA-1 (сейчас считается ослабленным).

Где они применимы в DevOps и безопасность не является приоритетом:

  • Контроль целостности файлов при скачивании (например, для проверки, что файл не был повреждён при передаче, но не для защиты от злоумышленника).
  • Внутренние идентификаторы в системах (хеш от содержимого файла для кэширования).
  • Проверка данных в распределённых системах (например, в консистентном хешировании).

Пример (почему НЕЛЬЗЯ использовать для паролей):

# Быстрое вычисление хеша MD5 (небезопасно)
echo -n "mySecretPassword123" | md5sum
# Результат: 1a79a4d60de6718e8e5b326e338ae533
# Такой хеш мгновенно найдётся в радужных таблицах.

Что использовать вместо для безопасности:

  • Для хеширования паролей: Специализированные, медленные алгоритмы с "солью" — bcrypt, scrypt, Argon2.
  • Для криптографической целостности и подписей: SHA-256, SHA-512 (семейство SHA-2) или SHA-3.
  • Для HMAC: В сочетании с секретным ключом.