Главный принцип безопасной проверки пароля — он никогда не должен покидать ваше устройство в открытом виде. Любой онлайн-сервис, просящий ввести пароль для оценки его сложности, создаёт риск: данные могут быть записаны в логи, перехвачены при передаче или использованы владельцем сервиса. В этой статье рассматриваются способы оценки стойкости, которые работают полностью локально, и критерии, по которым стоит судить о качестве пароля.
- Почему онлайн-проверка — плохая идея
- Что такое энтропия пароля и почему она важнее «сложности»
- Локальные инструменты оценки: zxcvbn и его порты
- Проверка пароля по базам утечек без передачи пароля (k-анонимность)
- Генерация стойких паролей локально
- Пошаговый алгоритм проверки нового пароля
- Типичные ошибки, которые снижают реальную стойкость
- Сценарии: что делать в конкретных ситуациях
- Ограничения локальной проверки и что она не даёт
- Практический чек-лист перед использованием пароля
- Ответы на частые вопросы
- Можно ли проверить пароль в браузере без интернета?
- Безопасно ли использовать pwned-cli / скрипты к HIBP API?
- Что если zxcvbn даёт высокую оценку, но пароль в утечке?
- Нужно ли проверять пароли, сгенерированные менеджером паролей?
- Как проверить пароль на телефоне без компьютера?
- Главный вывод: локальная проверка — это гигиена, а не паранойя
Почему онлайн-проверка — плохая идея
Сервисы вроде «проверьте стойкость пароля» удобны, но нарушают базовое правило гигиены паролей: секрет не должен становиться известен третьей стороне. Даже если сайт использует HTTPS и заявляет о том, что данные не сохраняются, вы не контролируете серверный код, логи веб-сервера, промежуточные прокси или возможные уязвимости. История знает случаи, когда популярные чекеры паролей попадали в утечки вместе с введёнными пользователями значениями.
Кроме того, многие онлайн-инструменты используют упрощённые эвристики (длина, наличие цифр и спецсимволов), которые плохо коррелируют с реальной устойчивостью к современным атакам. Локальные инструменты дают более точную оценку, основанную на энтропии и паттернах, без передачи секрета куда-либо.
Что такое энтропия пароля и почему она важнее «сложности»
Энтропия — мера непредсказуемости пароля в битах. Она показывает, сколько попыток в среднем потребуется атакующему для подбора методом полного перебора. Формула для равновероятных символов: E = L × log₂(N), где L — длина пароля, N — размер алфавита (например, 26 для строчных латинских, 95 для всех печатных ASCII).
Однако люди редко выбирают символы равновероятно. Реальная энтропия человеческого пароля почти всегда ниже теоретической. Поэтому современные оценщики (zxcvbn, Dropbox) моделируют поведение атакующего: они учитывают словари, частые паттерны (leetspeak, последовательности клавиатуры, даты, повторы) и дают оценку «угадываемости» в попытках.
Ориентиры энтропии для разных угроз:
- 30–40 бит — защита от онлайн-подбора (ограничение попыток входа), но уязвима для офлайн-атак по утечке хеша.
- 50–60 бит — минимально приемлемо для мастер-пароля менеджера паролей или шифрования диска при использовании медленного KDF (Argon2, PBKDF2 с высоким числом итераций).
- 70+ бит — комфортный запас на годы вперёд даже при офлайн-атаке на быстром железе.
Локальные инструменты оценки: zxcvbn и его порты
Алгоритм zxcvbn (разработан Dropbox) — де-факто стандарт оценки стойкости на клиенте. Он работает в браузере и на сервере, но для наших целей важны офлайн-версии:
- Браузерная консоль: откройте инструменты разработчика (F12) на любой странице, загрузите zxcvbn через CDN или локально сохранённый файл, и вызовите zxcvbn(‘ваш_пароль’). Пароль не уходит в сеть — выполнение происходит в вашем процессе браузера.
- Командная строка (Node.js): npm install -g zxcvbn, затем zxcvbn «пароль». Работает полностью офлайн.
- Python: пакет zxcvbn (pip install zxcvbn) или zxcvbn-python.
- Go, Rust, C# — есть нативные порты для встраивания в свои скрипты.
Результат содержит: score (0–4), guesses_log10 (логарифм количества попыток), crack_times_seconds (оценка времени взлома на разных сценариях), feedback (конкретные советы: «добавьте слово не из словаря», «избегайте последовательностей»). Это действие руководства, а не абстрактная оценка.
Проверка пароля по базам утечек без передачи пароля (k-анонимность)
Сервис Have I Been Pwned (HIBP) предоставляет API «Pwned Passwords» на основе модели k-анонимности. Вычисляется SHA-1 пароля, отправляются только первые 5 символов хеша (префикс). Сервер возвращает список суффиксов хешей, начинающихся с этого префикса, и счётчики их встречаемости. Клиент завершает хеш локально и проверяет точное совпадение. Сам пароль и полный хеш никогда не покидают устройство.
Локальные клиенты для этой проверки:
- pwned-cli (Node): npx pwned-cli «пароль» — делает запрос к API HIBP по префиксу, проверяет совпадение локально.
- pass (Unix password manager) с расширением pass-pwned.
- Bitwarden CLI / 1Password CLI — встроенная проверка хранилища по HIBP.
- Скрипт на Python/Bash: 10 строк кода: sha1sum, curl префикса, grep суффикса.
Если пароль найден в базе — он скомпрометирован и не может использоваться нигде. Даже если вы «уверены, что это был только тестовый аккаунт», атакующие используют словари из утечек для распараллеливания подбора на других сервисах.
Генерация стойких паролей локально
Лучший пароль — тот, который вы не придумываете сами. Людям свойственно повторять паттерны. Используйте генераторы с криптографически стойкой случайностью (CSPRNG):
- Менеджеры паролей (Bitwarden, 1Password, KeePassXC, pass) — встроенные генераторы, работающие офлайн.
- Командная строка:
- openssl rand -base64 32 — 256 бит энтропии, base64.
- gpg —gen-random —armor 1 32.
- python -c «import secrets; print(secrets.token_urlsafe(32))».
После генерации сразу проверяйте zxcvbn и HIBP. Если score < 3 или есть совпадение в утечках — генерируйте новый.
Пошаговый алгоритм проверки нового пароля
- Сгенерируйте кандидата локальным CSPRNG (менеджер паролей, openssl, secrets).
- Оцените через zxcvbn (консоль браузера или CLI). Цель: score >= 3 и guesses_log10 >= 10 (≈ 33 бита) для обычных аккаунтов, guesses_log10 >= 14 (≈ 46 бит) для мастер-паролей.
- Проверьте по HIBP через локальный клиент (pwned-cli, скрипт). Совпадений быть не должно.
- Если пароль предназначен для менеджера паролей / шифрования диска — убедитесь, что KDF настроен на высокие параметры (Argon2id, memory ≥ 64 MB, iterations ≥ 3; PBKDF2 ≥ 600 000 итераций SHA-256). Энтропия пароля складывается с затратами KDF.
- Сохраните только в менеджере паролей. Не записывайте в заметки, не отправляйте в чаты, не копируйте в буфер обмена дольше необходимого.
Типичные ошибки, которые снижают реальную стойкость
- Доверие «политике сложности» сайта: требование «1 заглавная, 1 цифра, 1 спецсимвол» не гарантирует энтропию. Password1! формально проходит, но ломается за миллисекунды.
- Использование личной информации: имена, даты, номера телефонов, названия компаний — всё это есть в словарях атакующих и в открытых источниках (OSINT).
- Leetspeak и простые замены: p@ssw0rd, admin123! — зxcvbn и хешкэт знают эти паттерны и проверяют их в первую очередь.
- Повтор паролей: даже стойкий пароль, использованный на двух ресурсах, становится слабым, если один из них утек в открытом виде или слабом хеше.
- Короткие мастер-пароли: мастер-пароль менеджера защищает всё хранилище. Он должен быть самым стойким (цель 70+ бит или 6+ слов Diceware).
- Проверка пароля на сайте «для теста»: вы скомпрометировали его сами. Считайте его сгоревшим и генерируйте новый.
Сценарии: что делать в конкретных ситуациях
| Ситуация | Действие | Инструменты |
|---|---|---|
| Создание нового аккаунта | Сгенерировать в менеджере паролей → проверить zxcvbn + HIBP → сохранить | Bitwarden / KeePassXC + pwned-cli |
| Проверка существующего пароля, который вы помните | Ввести в локальном zxcvbn (консоль браузера) → проверить HIBP через pwned-cli → если слабый или в утечке — сменить | zxcvbn (Node/браузер), pwned-cli |
| Мастер-пароль от менеджера / шифрование диска | Diceware 6–7 слов или 20+ случайных символов → zxcvbn score 4 → HIBP чисто → запомнить / безопасно записать | Diceware список, shuf, zxcvbn |
| Аудит всего хранилища паролей | Экспорт зашифрованного хранилища → скрипт проверки каждого пароля zxcvbn + HIBP (пакетно) → отчёт по слабым/утечкам | Bitwarden CLI / 1Password CLI (встроенный аудит), или Python-скрипт |
| Корпоративная политика: запрет на онлайн-чекеры | Развернуть внутренний зеркало HIBP (доступен дамп хешей) или использовать локальный zxcvbn в CI/CD для проверки секретов в коде | HIBP торрент дамп, zxcvbn библиотеки |
Ограничения локальной проверки и что она не даёт
- Не защищает от фишинга и кейлоггеров. Если вы ввели пароль на фейковом сайте или на заражённой машине — локальная проверка бессмысленна. Нужен 2FA (аппаратный ключ / WebAuthn) и чистая ОС.
- Не учитывает контекст утечки. HIBP говорит «пароль встречался», но не знает, был ли это ваш аккаунт или чужой. В любом случае — пароль сгорел.
- zxcvbn — эвристика, не доказательство. Он моделирует известные паттерны атак. Новые методы (нейросети для генерации паролей) могут снизить реальную стойкость. Запас энтропии — лучшая страховка.
- Энтропия генератора. Если CSPRNG сломан или засеян (редко, но бывает на встроенных системах без энтропии) — пароль предсказуем. Используйте ОС с рабочим /dev/urandom / getrandom() / CryptGenRandom.
Практический чек-лист перед использованием пароля
- Пароль сгенерирован CSPRNG (менеджер паролей, secrets, openssl, Diceware).
- zxcvbn: score >= 3, guesses_log10 >= 10 (обычный аккаунт) или = 14 (мастер-пароль).
- HIBP (k-анонимность): 0 совпадений.
- Пароль уникален — не используется нигде ещё.
- Сохранён только в зашифрованном хранилище менеджера паролей.
- Для мастер-пароля: настроен сильный KDF (Argon2id / PBKDF2 высокие итерации).
- Включён 2FA (предпочтительно WebAuthn / FIDO2) на всех критичных аккаунтах.
Ответы на частые вопросы
Можно ли проверить пароль в браузере без интернета?
Да. Сохраните HTML-файл с zxcvbn (одна библиотека ~ 800 КБ) локально, откройте в браузере с отключённой сетью — работает полностью офлайн. Пароль не покидает вкладку.
Безопасно ли использовать pwned-cli / скрипты к HIBP API?
Да, если вы доверяете коду клиента (он открыт, короток, проверяем). Передаётся только 5-символьный префикс SHA-1. Полный хеш и пароль остаются у вас. Для параноидального режима можно скачать полный дамп хешей HIBP (торрент, ~ 30 ГБ распакованных) и проверять полностью локально без запросов в сеть.
Что если zxcvbn даёт высокую оценку, но пароль в утечке?
Утечка приоритетнее. Любой пароль, найденный в HIBP, считается скомпрометированным независимо от энтропии. Атакующие пробуют известные пароли первыми. Генерируйте новый.
Нужно ли проверять пароли, сгенерированные менеджером паролей?
Теоретически — хорошие менеджеры дают высокую энтропию. На практике — проверка zxcvbn + HIBP занимает секунды и исключает баги генератора или коллизии. Делайте это всегда для мастер-пароля и критичных учёток.
Как проверить пароль на телефоне без компьютера?
Установите менеджер паролей с открытым кодом (Bitwarden, KeePassDX) — в них есть встроенная проверка zxcvbn и HIBP. Или используйте Termux (Android) с python -c «import zxcvbn; print(zxcvbn.zxcvbn(‘пароль’))» и curl к HIBP API.
Главный вывод: локальная проверка — это гигиена, а не паранойя
Проверка стойкости пароля без передачи третьим лицам — не излишняя мера, а базовый стандарт. Современные инструменты (zxcvbn, HIBP k-анонимность, CSPRNG генераторы) бесплатны, открыты, работают офлайн и дают объективную оценку вместо субъективного «кажется сложным». Внедрите в привычку: сгенерировал → проверил локально → сохранил в менеджер. Это устраняет класс рисков, связанных с утечками через чекеры, повторным использованием и низкой энтропией.
Материал носит информационный характер. Инструменты и методики описаны в общих терминах; конкретные версии ПО, параметры KDF и API могут меняться. Для защиты критически важных активов (корпоративные секреты, криптовалютные кошельки, медицинские данные) проконсультируйтесь со специалистом по информационной безопасности и проведите аудит модели угроз.
