Ethical Hacking Academy · Урок

Хеширование

MD5, SHA и bcrypt

Урок 2 из 413 шагов

«Хеширование» — бесплатный урок Ethical Hacking Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ethical Hacking Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ethical Hacking Academy содержит 4 уроков всего.

Что такое хеш

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

Важно, что хеширование — это односторонняя операция. Математически обратить дайджест и получить исходные данные невозможно. Именно этим хеши отличаются и от кодирования, и от шифрования.

Свойства хорошего хеша

Криптографическая хеш-функция должна быть:

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

MD5

MD5 создает 128-битный дайджест (32 шестнадцатеричных символа). Он быстр и исторически широко применялся, но криптографически взломан: существуют практические атаки на коллизии.

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

echo -n 'password' | md5sum
# 5f4dcc3b5aa765d61d8327deb882cf99

Семейство SHA

Семейство SHA (безопасный алгоритм хеширования) надежнее:

  • SHA-1: 160 бит. Теперь считается взломанным (атака на коллизии «SHADOW HAMMER» / Shattered). Не используйте его.
  • SHA-2: включает SHA-256 и SHA-512. Широко используется и в настоящее время считается безопасным.
  • SHA-3: более новый вариант на основе Keccak, альтернативный SHA-2.
echo -n 'password' | sha256sum
# 5e884898da28047151d0e56f8dc629...

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

Шифрование обратимо с помощью ключа. Хеширование вообще необратимо. Именно поэтому хеширование используют для хранения паролей: серверу никогда не требуется исходный пароль.

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

Проблема: радужные таблицы

Поскольку хеширование детерминировано, дайджест строки «password» одинаков для каждого пользователя. Злоумышленники заранее вычисляют огромные таблицы соответствий между дайджестами и исходными текстами, которые называются радужными таблицами.

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

Соль

Соль — это уникальное случайное значение, добавляемое к каждому паролю перед хешированием. Это означает следующее:

  • Одинаковые пароли дают разные хеши.
  • Заранее вычисленные радужные таблицы становятся бесполезными.

Соль хранится вместе с хешем и не является секретом. Её задача — сделать каждый хеш уникальным, заставив злоумышленников взламывать их по отдельности.

stored = salt + hash(salt + password)
# salt is random and unique per user

bcrypt: создан для паролей

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

Хеш bcrypt содержит алгоритм, стоимость и соль в одной строке. Медленная работа — это преимущество: она ограничивает скорость, с которой злоумышленники могут перебирать варианты.

$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
# $2b$ = bcrypt, 12 = cost factor, then salt + hash

Другие медленные хеши

Помимо bcrypt, современные варианты хеширования паролей включают:

  • scrypt: требует большого объёма памяти и устойчив к атакам с использованием GPU и ASIC.
  • Argon2: победитель конкурса Password Hashing Competition, настраиваемый по времени и объёму памяти. Рекомендуемый современный вариант.
  • PBKDF2: применяет быстрый хеш много тысяч раз; приемлемый, но более слабый вариант по сравнению с перечисленными выше.

HMAC и целостность

Хеши применяются не только для паролей, но и для проверки целостности. HMAC (код аутентификации сообщения на основе хеша) объединяет хеш с секретным ключом, чтобы проверить целостность и подлинность сообщения.

Контрольные суммы файлов (часто SHA-256) позволяют убедиться, что загруженные данные не были изменены. В роли хакера Вы можете обнаружить изменённые или вредоносные файлы по несовпадению контрольных сумм.

Хеши в реальных системах

В роли хакера Вы постоянно встречаетесь с хешами:

  • /etc/shadow в Linux хранит хеши паролей с солью; их начало выглядит, например, как $6$ (SHA-512) или $2b$ (bcrypt).
  • Windows хранит хеши NTLM в базе данных SAM.
  • Веб-приложения хранят хешированные пароли в таблицах пользователей.

Распознав префикс, Вы сразу определяете алгоритм и стратегию взлома.

$6$rounds=5000$salt$hash   # SHA-512 crypt
$2b$12$saltandhash...      # bcrypt

Быстрая проверка

Выберите наиболее безопасный вариант хранения паролей пользователей.

Итоги

Теперь Вы понимаете, как работает хеширование:

  • Хеширование — это одностороннее, детерминированное преобразование фиксированного размера, отличающееся от кодирования и шифрования.
  • MD5 и SHA-1 взломаны; для общей проверки целостности используйте SHA-256.
  • Для паролей используйте медленные алгоритмы с солью: bcrypt, scrypt или Argon2.
  • Соли нейтрализуют радужные таблицы, а HMAC добавляет проверку целостности с ключом.

Далее Вы изучите симметричное и асимметричное шифрование с помощью AES и RSA.

Можно начать бесплатно

Изучай Ethical Hacking Academy с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
31
Уроки
111

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

Урок «Хеширование» бесплатный?

Да — полный текст урока «Хеширование» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ethical Hacking Academy, подпишись на CoddyKit PRO. Курс Ethical Hacking Academy содержит 4 уроков всего.

Чему я научусь в уроке «Хеширование»?

MD5, SHA и bcrypt Ты практикуешь Ethical Hacking Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Ethical Hacking Academy?

Предыдущий опыт не требуется. Ethical Hacking Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Хеширование»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Ethical Hacking Academy?

Да. Каждый урок Ethical Hacking Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Кодирование и шифрование
  2. Хеширование
  3. Симметричное и асимметричное шифрование
  4. Взлом хешей
← Назад к Ethical Hacking Academy