Как защитить пароли при хранении на сервере
Новости 21.10.2026
Безопасное хранение паролей на сервере требует отказа от открытого текста и симметричного шифрования в пользу необратимого хеширования. Защитить базу данных при утечке помогают уникальная соль для каждого пользователя, секретный перец в коде приложения, использование медленных алгоритмов (Argon2, bcrypt) и пароли длиной от 12 символов.
Сайты и корпоративные сервисы взламывают регулярно. Важная цель злоумышленников при проникновении на сервер — база данных с учётными записями. Если пароли хранятся в открытом виде, последствия становятся катастрофическими. Пользователи часто используют одни и те же или похожие пароли на разных сайтах. Получив доступ к одной базе, нападающие захватывают аккаунты тех же людей на других ресурсах.
Правильно спроектированная система защищает данные даже при утечке. Если злоумышленник украдёт базу, он не должен получить из этого никакой выгоды. Разбираем, как организовать действительно безопасное хранение паролей на сервере.
Почему незащищённые пароли — это катастрофа
Хранить пароли в открытом виде (plaintext) нельзя. Помимо риска внешнего взлома, их смогут увидеть администраторы сервера. Открытые данные подвержены уязвимостям базы данных, таким как SQL-инъекции.
Шифровать пароли симметричными алгоритмами — тоже плохая идея. Для расшифровки требуется мастер-ключ. Если злоумышленник украдёт этот ключ вместе с базой, все пароли будут мгновенно раскрыты. Поэтому стандарт безопасности — хранение необратимых значений, то есть криптографических хешей.
Как работает хеширование и почему его недостаточно
Криптографическая хеш-функция превращает строку любой длины в уникальную последовательность символов фиксированного размера. Главное свойство хеш-функции — необратимость. По готовому хешу невозможно вычислить исходный документ или текст.
Однако пароли — это не случайные массивы данных. Пользователи выбирают предсказуемые комбинации, короткие слова или даты. Злоумышленник может заранее вычислить хеши для популярных слов и сравнить их с украденной базой. Это называется атакой по словарю. Если пароль состоит из 8 символов, перебор всех возможных комбинаций становится вполне выполнимой задачей.
Радужные таблицы: оптимизация перебора
Хранение всех возможных комбинаций паролей и их хешей требует огромного объёма дискового пространства. Для сжатия данных были придуманы радужные таблицы (Rainbow Tables).
Вместо хранения каждой пары «пароль — хеш» в таблицу записываются длинные цепочки:
- берётся начальное значение пароля,
- вычисляется его хеш,
- с помощью функции редукции хеш преобразуется в новый возможный пароль,
- процесс повторяется до десятков тысяч раз.
В радужную таблицу сохраняются только начало и конец цепочки. Это сокращает объём необходимой памяти в десятки тысяч раз. Готовые радужные таблицы для 8-символьных паролей занимают от пары десятков гигабайт до терабайта.
Защита с помощью соли: обесцениваем радужные таблицы
Чтобы лишить злоумышленников возможности использовать готовые радужные таблицы, к паролю добавляют соль (salt). Это случайная строка, которая генерируется индивидуально для каждого пользователя при регистрации или смене пароля.
солёный_хеш = ХЕШ-ФУНКЦИЯ(пароль + соль)
Соль хранится в базе данных в открытом виде рядом с хешем.
Схема регистрации и проверки пароля
При регистрации пользователя:
- система генерирует случайную соль (длиной от 8 байт),
- объединяет пароль с солью,
- вычисляет хеш от полученной строки,
- сохраняет в базу логин, соль и солёный хеш.
При аутентификации:
- система находит в базе запись пользователя по логину,
- считывает сохранённую соль и солёный хеш,
- прибавляет соль к введённому паролю и считает хеш,
- сравнивает полученный результат с хешем из базы данных.
Что даёт использование соли
- Защита от радужных таблиц. Из-за уникальной соли длинный хеш меняется. Построить радужную таблицу под каждую соль физически невозможно из-за нехватки памяти.
- Маскировка одинаковых паролей. Если два пользователя задали одинаковый пароль, то хеши в базе будут полностью различаться из-за разных солей.
Важно: соль не защищает от словарного перебора или подбора короткого пароля по хешу для конкретной учётной записи. Если пароль простой, злоумышленник возьмёт известную соль из базы и быстро подберёт совпадение.
Быстрые и медленные хеш-функции
Обычные криптографические функции, такие как SHA-256 или ГОСТ Р 34.11-2012 («Стрибог»), оптимизированы для максимально быстрого вычисления. Они подходят для проверки целостности файлов и электронных подписей.
Для защиты паролей высокая скорость — это минус. Современный графический процессор способен вычислять каждую секунду триллионы значений MD5 и миллиарды значений SHA-256. Этого достаточно, чтобы подобрать 8-символьный пароль по хешу MD5 за несколько минут, а по SHA-256 — в течение дня.
Чтобы «усложнить» жизнь злоумышленникам, для хранения паролей рекомендуется использовать специальный класс алгоритмов — медленные хеш-функции. Их скорость искусственно ограничена. Вычисление одного хеша занимает не больше секунды. Обычный пользователь не заметит задержки при входе, но для злоумышленника массовый перебор станет слишком долгим и дорогим.
Популярные медленные алгоритмы:
- PBKDF2 — классический стандарт, использующий многократное повторение базовой хеш-функции,
- Bcrypt — алгоритм на основе шифра Blowfish, устойчивый к параллельным вычислениям,
- Scrypt — алгоритм, требующий большого объёма оперативной памяти,
- Argon2 — победитель международной премии Password Hashing Competition, наиболее современный и стойкий алгоритм на сегодняшний день.
Argon2 позволяет настраивать не только количество итераций, но и объём используемой памяти, а также число параллельных потоков. Это делает эффективный аппаратный перебор на видеокартах или специализированных чипах (ASIC) невозможным.

Количество скомпрометированных паролей (независимо от источника), распределенных по типу хеша. Данные с сайта hivesystems.com.
Но и медленные алгоритмы — не гарантия, что пароль будет в безопасности. Hive Systems (американская компания в сфере информационной безопасности) в своём исследовании 2025 года показала, что с оборудованием, которое использовалось для обучения ChatGPT (графические ускорители NVIDIA A100) злоумышленникам потребуется от 3 до 5 месяцев для взлома 8-символьного пароля, захешированного по алгоритму bcrypt и состоящего из цифр, символов, заглавных и строчных букв. Но для этого хакерам потребуется доступ к 10 000-20 000 ускорителям.
Секретный ингредиент: добавляем перец
Для усиления защиты применяют концепцию перца (pepper). Это секретная строка, которая добавляется к паролю вместе с солью перед хешированием.
Главное отличие перца от соли: перец не хранится в базе данных. Его вшивают в код приложения или хранят в отдельном секретном хранилище (например, в аппаратном модуле безопасности HSM).
хеш = ХЕШ-ФУНКЦИЯ(пароль + соль + перец)
Если злоумышленник украдёт базу данных, но не получит доступ к исходному коду сервера, он не сможет начать перебор. Ему будет неизвестен обязательный параметр для вычисления хеша.
Иногда в системе используют набор из нескольких фиксированных значений перца. При регистрации случайным образом выбирается один из них, а при проверке сервер последовательно пробует варианты.
Требования к длине паролей: рекомендация регуляторов
Каждый год графические ускорители становятся быстрее и доступнее для злоумышленников, поэтому время, необходимое для взлома, сокращается примерно на 20-25% ежегодно по данным Hive Systems. Например, чтобы взломать 8-символьный пароль, включающий цифры, строчные и заглавные буквы, а также специальные символы, в 2024 году требовалось 225 лет, в 2025 году — 164, в 2026 году — 132. С ростом вычислительных мощностей это время будет сокращаться.
Главный фактор стойкости — длина:
- Приказ ФСТЭК России № 117 рекомендует устанавливать минимальную длину пароля не менее 12 символов.
- Американский стандарт NIST рекомендует ориентироваться на минимальную длину от 15 символов.
Несловарный пароль длиной 12-15 символов с использованием соли и медленной хеш-функции Argon2 делает подбор практически нереализуемым.
Выводы
Безопасное хранение паролей требует комплексного подхода:
- Никакого открытого текста и симметричного шифрования. Только необратимое хеширование.
- Обязательное использование соли. Случайная строка объёмом от 8 байт защитит от применения радужных таблиц.
- Переход на медленные хеш-функции. Алгоритмы Argon2 или bcrypt усложняют массовый перебор.
- Дополнительная защита перцем. Хранение секретного ключа отдельно от базы данных остановит злоумышленников при утечке таблицы.
- Политика длинных паролей. Минимальный порог в 12 символов защитит от прямого перебора.
Грамотная реализация этих механизмов позволяет свести к минимуму риски компрометации данных и обезопасить учётные записи пользователей даже в случае прямого похищения базы с сервера.
Используемые термины
Argon2 — современный криптографический алгоритм хеширования паролей и формирования ключей.
Bcrypt — адаптивный криптографический алгоритм хеширования, который используется для безопасного хранения паролей.
Plaintext — неформатированный текст, который содержит только символы, буквы и цифры без графики, шрифтов, таблиц и HTML-разметки.
SQL — специальный язык программирования, который используют для создания, поиска, изменения и управления данными в реляционных базах данных.
SHA-256 — криптографическая хеш-функция, которая преобразует входные данные любого размера в уникальный цифровой отпечаток фиксированной длины — 256 бит.
MD5 — криптографический алгоритм хеширования, который преобразует входные данные любой длины в уникальную последовательность из 128 бит.
PBKDF2 — стандарт формирования криптографического ключа на основе обычного пароля.
Scrypt — адаптивная криптографическая функция формирования ключа и хеширования, которая требует много оперативной памяти для защиты от взлома.
ASIC — специализированная интегральная схема или устройство на её основе, созданное для выполнения одной конкретной задачи.
Hive Systems — американская консалтинговая и технологическая компания в сфере информационной безопасности.
NVIDIA — американская технологическая компания, крупнейший в мире разработчик графических процессоров (видеокарт) и платформ для искусственного интеллекта.
ChatGPT — чат-бот с искусственным интеллектом от компании OpenAI, работающий на базе больших языковых моделей.
HSM — специализированное физическое устройство или защищённая плата, которые генерируют, хранят криптографические ключи и выполняют операции шифрования и дешифрования внутри изолированного периметра.
NIST — Национальный институт стандартов и технологии США.