Безопасность паролей: Как генерировать, хранить и аудировать сильные пароли
Быстрый ответ
Генерируйте 16+ символьные случайные пароли нашим Password Generator, никогда не повторно используйте и храните в password manager. На server хешируйте с bcrypt (work factor 12+), scrypt или Argon2id —никогда MD5 или SHA-256. Аудит через Have I Been Pwned API.
Введение
Слабые, повторно используемые и неправильно хранимые пароли вызывают большинство захватов аккаунтов. Этот гайд решает четыре конкретные проблемы: (1) генерация паролей с достаточной entropy для сопротивления brute force, (2) хеширование паролей медленным KDF вместо быстрого hash, (3) избегание повторного использования и (4) аудит утёкших credentials.
Шаг за шагом
-
Создайте пароль с высокой энтропией
Используйте генератор паролей, чтобы создать пароль длиной более 16 символов, сочетающий верхние, нижние буквы, цифры и символы. Энтропия = log2(charsetSize^length); 16-символьный алфавит из 94 символов дает ~ 105 бит, что невозможно перебрать даже при скорости 10 ^ 12 предположений в секунду.
-
Никогда не используйте повторно пароли в разных сервисах
Повторное использование одного пароля означает, что одно нарушение скомпрометирует каждую учетную запись, использующую его. Создайте уникальный пароль для каждой службы и сохраните его в менеджере паролей (Bitwarden, 1Password, KeePassXC). Единственный пароль, который вам нужно запомнить, — это длинная парольная фраза.
-
Хешируйте пароли с помощью медленного KDF на сервере
Никогда не храните пароли с помощью MD5, SHA-1 или необработанного SHA-256 — они слишком быстрые, а графические процессоры могут выполнять миллиарды попыток в секунду. Используйте bcrypt с рабочим коэффициентом 12+, scrypt с N=2^17 или Argon2id с памятью 64 МБ. Эти KDF намеренно медленны и требовательны к памяти, чтобы противостоять атакам на GPU/ASIC.
-
Используйте соль, чтобы победить радужные столы
Соль — это уникальное случайное значение для каждого пароля, добавляемое или объединенное перед хешированием. Это гарантирует, что одинаковые пароли создают разные хэши, что делает бесполезными заранее рассчитанные радужные таблицы. bcrypt и Argon2 автоматически генерируют и внедряют соль — не создавайте свою собственную.
-
Аудит на предмет взлома паролей
Прежде чем принять пароль, проверьте его на соответствие Have I Been Pwned API с помощью протокола k-anonymity: отправьте только первые 5 символов хеша SHA-1, получите список совпадающих суффиксов и сравните локально. При этом полный пароль к API никогда не раскрывается.
Примеры
Надежный сгенерированный пароль (16 символов, энтропия ~105 бит)
Вход: Длина 16, все классы символов.
Выход: K9$mP2#vL7@nQ4!x (случайный, уникальный, никогда не используется повторно)
Парольная фраза для мастер-пароля (запоминающийся + надежный)
Вход: 4 случайных общих слова
Выход: correct-horse-battery-staple (~44 bits but easy to remember; use 5-6 words for ~60+ bits)
bcrypt хеш пароля (коэффициент работы 12)
Вход: пароль 123 со стоимостью bcrypt 12
Выход: $2b$12$N9qo8uLOickgx2ZMRZoMy.MrqKQp7vqB4V1e5sTq7vqB4V1e5sTq (соль + стоимость + встроенный хэш)
Распространенные проблемы
- Использование MD5 или SHA-256 для хеширования паролей: оба являются быстрыми хэшами. Современный графический процессор вычисляет около 10 миллиардов SHA-256/с, взламывая 8-значный пароль за считанные минуты. Всегда используйте bcrypt, scrypt или Argon2id.
- Повторное использование одного пароля на разных сайтах: взлом на самом слабом сайте приводит к утечке пароля для каждого сайта. Генерируйте уникальные пароли и сохраняйте их в менеджере.
- Хранение паролей в виде открытого текста или обратимое шифрование: в случае утечки базы данных каждая учетная запись будет мгновенно скомпрометирована. Хеширование является односторонним и необратимым — даже сервер не может восстановить оригинал.
- Низкий коэффициент работы в bcrypt: стоимость 4 была нормальной в 2002 году; в 2026 году стоимость использования 12+ (примерно 4096 итераций). Повторно хешируйте при входе в систему, чтобы обновить старые хэши без принудительного сброса пароля.
Советы
- Стремитесь к минимуму 100 бит энтропии для учетных записей с высокой стоимостью — это 16 случайных символов из 94-символьного алфавита или 6 случайных игровых слов.
- Включите двухфакторную аутентификацию (TOTP или аппаратный ключ) для каждой учетной записи, которая ее поддерживает — одного надежного пароля недостаточно, если пароль является фишинговым.
- Используйте опцию «исключить неоднозначные символы» нашего генератора паролей (0/O, 1/l/I), когда пароли будут читаться вслух или вводиться в печатном виде.
- Меняйте пароли только после подтвержденного нарушения, а не по фиксированному графику — принудительная ротация приводит пользователей к предсказуемым шаблонам, таким как Spring2026!.