Хеширование
MD5, SHA и bcrypt
«Хеширование» — бесплатный урок 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 userbcrypt: создан для паролей
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 — локальная установка не требуется.