Узнайте, как работают популярные алгоритмы (MD5, SHA, bcrypt, Argon2) и почему даже «посоленные» хеши могут быть взломаны.
Хеширование с добавлением соли — один из самых распространенных способов защиты паролей в веб-приложениях и других IT-системах. Благодаря соли (случайной строке, добавляемой к паролю перед его хешированием), злоумышленникам сложнее воспользоваться радужными таблицами (rainbow tables) и массово взламывать пароли. Тем не менее, даже «посоленный» хеш далеко не всегда обеспечивает абсолютную безопасность. В этой статье мы подробно рассмотрим, почему так происходит, какие алгоритмы хеширования чаще всего используются, какие методы помогают взламывать даже «посоленные» хеши и как этому противостоять.
Хеширование — это одностороннее преобразование входных данных (пароля) в фикcированную строку символов. Добавление соли — простой и эффективный способ защититься от готовых таблиц соответствия «пароль-хеш» и массовых атак. Соль «разбавляет» исходные данные, так что два одинаковых пароля, «посоленные» разными строками, получают разные хеши.
Для наглядности рассмотрим упрощенный процесс хеширования с солью:
Злоумышленнику, получившему базу с хешами, придется для каждого хеша брать соответствующую соль и перебирать возможные пароли. Это усложняет атаку, но не делает ее невозможной — все зависит от достаточности вычислительных ресурсов и сложности самих паролей.
Существует множество алгоритмов хеширования, от устаревших до современных. Ниже представлен краткий обзор тех, что чаще всего встречаются в популярных приложениях и сервисах.
Устаревший алгоритм хеширования. Длина хеша — 128 бит (32 символа в шестнадцатеричной форме). Широко использовался в прошлом, однако в настоящее время считается небезопасным из-за возможности коллизий и быстрого перебора на современных GPU.
Тоже считается устаревшим алгоритмом, хотя и более надежным, чем MD5. Длина хеша — 160 бит (40 символов в hex). Несмотря на то, что для SHA-1 найдены практические коллизии, он все еще используется в некоторых старых системах. Однако для защиты паролей на сегодняшний день рекомендуется переходить на более надежные решения.
Более современные представители семейства SHA-2. Длина хеша может составлять 256 или 512 бит. Они более устойчивы к коллизиям, чем SHA-1 и MD5, но при этом всё ещё относительно быстрые на современных процессорах и GPU, что позволяет эффективно выполнять атаки перебором. Как правило, SHA-256 или SHA-512 применяют в сочетании с большим количеством итераций.
bcrypt — алгоритм на основе шифра Blowfish. Он был создан специально для хеширования паролей, имеет настраиваемый параметр «cost», который задаёт число раундов хеширования. Основная цель — усложнить перебор паролей, сделав процесс хеширования максимально тяжёлым для злоумышленников. bcrypt популярен в таких приложениях, как WordPress (в некоторых плагинах), Ruby on Rails и других платформах.
Password-Based Key Derivation Function 2 — стандартная криптографическая функция, использующая большое количество итераций (задается параметр «iterations») и соль для усложнения перебора. PBKDF2 поддерживают многие библиотеки по информационной безопасности, в том числе в .NET и OpenSSL. Часто применяется в корпоративных решениях, банках и правительственных организациях.
Один из самых современных и эффективных алгоритмов, победивший в конкурсе по выбору нового стандарта по хешированию паролей (Password Hashing Competition). Argon2 обладает гибкими настройками: позволяет регулировать время исполнения, объем используемой памяти и параллелизм вычислений, что делает его одним из самых сложных для перебора.
Многие крупные сервисы и платформы осознают важность безопасного хеширования и внедряют современные алгоритмы. Примеры:
Существуют как локальные приложения для перебора хешей, так и онлайн-сервисы, специализирующиеся на подборе паролей, даже с учетом соли. Ниже — самые известные решения:
Один из самых популярных инструментов. Работает под Windows, Linux и macOS. Поддерживает «гибридные» атаки, перебор по словарям, правила, маски и т.д. Умеет использовать мощности GPU (NVIDIA, AMD). Поддерживает широкий спектр алгоритмов: MD5, SHA-1, SHA-256, bcrypt, PBKDF2, Argon2 и другие.
Универсальный кроссплатформенный инструмент со множеством режимов перебора (словарная атака, brute force, гибридная атака и т.д.). John the Ripper поддерживает большинство популярных алгоритмов, включая «посоленные» хеши Unix и Windows NTLM.
Все эти сервисы и инструменты в большинстве случаев требуют либо отдельного указания соли, либо они автоматически анализируют формат, если речь идет о известных форматах (например, хеши Unix, где соль сохраняется в начале). Чем более редкий или сложный формат хранения пароля, тем сложнее автоматизировать его взлом.
Наличие соли затрудняет процесс взлома, но не делает систему неуязвимой. Причины уязвимостей:
Чтобы минимизировать риск взлома «посоленных» хешей, рекомендуется придерживаться следующих мер:
"Соленые" хеши являются неотъемлемым компонентом надежной защиты паролей, однако их эффективность зависит от комплекса мер. Использование устаревших алгоритмов, недостаточного количества итераций или слабых паролей сводит на нет преимущества соли. Для обеспечения максимальной безопасности рекомендуется применять современные криптографические алгоритмы, такие как bcrypt, PBKDF2 или Argon2, дополнять соль "перцем", устанавливать высокий параметр "cost" или число итераций, а также регулярно проводить аудит инфраструктуры и обновлять программное обеспечение. Только комплексный подход, включающий все эти меры, способен существенно усложнить задачу злоумышленнику и гарантировать сохранность конфиденциальных данных.