Как работает Паролька
Сервис про безопасность обязан доказывать свои утверждения, а не обещать. Здесь описано устройство генератора целиком, со ссылками на источники и с указанием, что можно проверить самому.
Пароль не уходит на сервер — и это проверяется
Пароль создаётся прямо в вашем браузере. У сайта нет ни базы данных, ни серверного кода: это несколько статических файлов, которые веб-сервер просто отдаёт как есть.
Проверка за пятнадцать секунд
Откройте генератор. Отключите интернет — Wi-Fi или мобильную сеть, как удобнее. Нажмите «Другой».
Пароль появится. Значит, спрашивать сервер было не у кого: вся генерация уже была на вашем устройстве.
Есть и более строгие способы убедиться:
- Панель разработчика. Нажмите F12, вкладка «Сеть», нажмите «Другой» несколько раз. Новых запросов не будет — ни одного.
- Исходный код. Нажмите Ctrl+U или откройте
/assets/js/generate.jsнапрямую. Там нет ниfetch, ниXMLHttpRequest— отправлять пароль просто нечем. - Установите как приложение. В браузере есть пункт «Установить приложение». После установки генератор работает полностью офлайн.
Единственный запрос, который делает страница — загрузка словаря
/data/words-main.json при открытии. Он одинаков для всех
и не зависит от того, какой пароль вы создадите.
Откуда берётся случайность
Слова выбирает crypto.getRandomValues — тот же
криптографический генератор, которым браузер защищает соединение
с банком и данные вашей карты при оплате.
Мы не используем Math.random. Это принципиально:
Math.random не предназначен для криптографии, его вывод
предсказуем, и пароли на его основе восстанавливаются по нескольким
известным значениям. К сожалению, некоторые известные генераторы
паролей до сих пор построены именно на нём.
Про остаток от деления
Тонкость, которую часто упускают. Если взять случайное 32-битное число и посчитать остаток от деления на размер словаря, распределение получится неравномерным: часть слов будет выпадать чаще остальных. Для словаря на 2048 слов разница ничтожна, но для выбора двузначного числа из ста — уже заметна.
Мы решаем это отбраковкой: числа, попавшие в «неровный хвост» диапазона, выбрасываются и генерируются заново. Равномерность проверяется автоматическим тестом на четырёхсот тысячах выборок по критерию хи-квадрат.
Как собран словарь
Два списка. Основной — 2048 слов, это ровно 11 бит на слово. Короткий — 1024 слова, ровно 10 бит; он используется там, где пароль придётся вводить руками и диктовать.
Круглые числа выбраны намеренно: log₂(2048) = 11 без остатка, поэтому арифметика стойкости остаётся понятной, а не превращается в «10,87 бита на слово».
Короткий список целиком входит в основной. Благодаря этому «усилить пароль» означает «добавить слово», а не «поменять словарь».
Из чего отбирали
Источник — открытый словарь русских существительных (около 27 000 базовых форм) и частотный список словоформ, собранный по субтитрам. Частотность нужна, чтобы в словаре не оказалось слов, которые носитель языка не опознает на слух: «махизм», «онагр», «лабаз» формально существуют, но диктовать их по телефону бессмысленно.
Правила отбора
Первая группа правил отвечает за корректность. Их нельзя ослаблять, они влияют не на удобство, а на то, будет ли пароль работать вообще.
- Только латиница после транслитерации. Русские буквы негде набрать в BIOS, на телевизорах и приставках, и многие сайты их не принимают. Поэтому слова русские, а буквы латинские.
- Ни одно слово не является началом другого. Тогда пароль остаётся однозначно разбираемым даже без разделителей. Это правило взято из словарей EFF.
- Любые два слова различаются минимум в двух буквах. Опечатка в один символ не превращает одно слово словаря в другое — иначе диктовка становилась бы опасной.
- Нет двух слов с одинаковым транслитом. Иначе один пароль соответствовал бы двум разным русским словам, и подсказка для диктовки была бы неоднозначной.
Вторая группа отвечает за удобство и применяется только к короткому словарю:
- Длина транслита 4–7 символов.
- Первые три буквы уникальны — слово узнаётся по началу.
- Нет букв, спорных на слух:
ёиэзвучат каке,ыийоба даютy, мягкий и твёрдый знаки исчезают. - Минимум многобуквенных сочетаний вроде
zh,sch,ya— они удлиняют ввод.
Что мы убрали
Пароль часто приходится диктовать клиенту, вписывать в акт передачи и показывать коллегам. Поэтому словарь должен быть безопасным не только криптографически, но и социально.
| Убрали | Почему |
|---|---|
| Обсценная лексика и производные | Фильтр по корням, а не по точным словам — иначе производные проскочат |
| Смерть, болезни, насилие, оружие | Пароль вида morg-gangrena-47 нельзя отдать клиенту |
| Национальности и этнонимы | Нейтральны сами по себе, но в акте передачи читаются как высказывание |
| Религия и культ | То же соображение |
| Топонимы и личные имена | Создают ложную ассоциацию с владельцем аккаунта. Определяются по английскому переводу: если все варианты перевода с заглавной буквы — это имя собственное |
| Не существительные | «левый», «милая», «стать» помечены в словаре существительными, но в пароле читаются как обрывок фразы |
| Оценочные слова | «дура», «трус», «позор» — неуместны в пароле, который вы создаёте для другого человека |
| Алкоголь, табак, медицинские подробности | Неудобно диктовать и незачем |
Всего фильтры и ручная вычитка отбросили около 4600 слов из 27 000 кандидатов. Запас достаточный, и мы предпочитаем потерять хорошее слово, чем оставить плохое.
Словарь открыт
Оба списка лежат по адресам
/data/words-main.json и
/data/words-short.json — их можно открыть и прочитать
целиком.
Это не оплошность. Расчёт стойкости уже исходит из того, что словарь известен атакующему. Скрывать список означало бы завышать оценку — то есть врать. Подробнее об этом на странице про биты.
Алгоритм генерации
Каждый шаг сообщает, сколько бит он добавил. Поэтому цифра на странице не подогнана, а посчитана — её можно сверить с описанием.
| Шаг | Вклад в биты |
|---|---|
| Каждое слово из словаря | log₂(размер словаря): 11 или 10 |
| Две цифры, если включены | log₂(100) = 6,64 |
| Случайное место для цифр | log₂(количество мест) |
| Символ, если включён | log₂(9) = 3,17 |
| Случайное место для символа | log₂(длина − 1) |
| Заглавные буквы | 0 — правило постоянное |
| Выбор разделителя | 0 — это настройка, а не случайность |
Символ вставляется внутрь строки, а не в конец: конец строки — первое, что пробуют стандартные правила программ подбора, и там символ почти не добавляет стойкости.
Набор символов ограничен: - _ . ! # $ % @ +.
Отобраны те, что есть на всех раскладках, не ломают CSV, URL
и командную строку, и однозначно называются при диктовке.
Кавычки, обратный слэш, пробел и угловые скобки исключены.
PIN-код проверяется отдельно
Случайные цифры — этого недостаточно. Программа подбора начинает с предсказуемых комбинаций, поэтому мы отбраковываем и генерируем заново, если получилось:
- все цифры одинаковые:
0000,1111 - последовательность:
1234,9876 - повтор пары или тройки:
1212,123123 - похоже на дату:
3112,0101,1990 - известные комбинации вроде
2580— это средний столбец клавиатуры сверху вниз
Отбраковка сокращает пространство вариантов, поэтому заявленные биты мы уменьшаем на долю отброшенных комбинаций. Для PIN из четырёх цифр отбраковывается 6,8% всех значений, и стойкость выходит 13,19 бита вместо наивных 13,29. Разница мизерная, но округлять в свою пользу неправильно.
Гораздо важнее другое: PIN короткий по своей природе. Двадцать бит — это меньше, чем даёт одно слово с небольшой добавкой. PIN годится там, где после нескольких неверных попыток устройство блокируется, и не годится там, где перебор ничем не ограничен.
Откуда взяты скорости подбора
Все цифры в таблицах — из опубликованных измерений, а не оценки «на глаз». Показывать одно универсальное «время взлома» нельзя: разброс между хорошей и плохой защитой достигает шести порядков.
| Защита | Скорость подбора | Откуда цифра |
|---|---|---|
| bcrypt, стоимость 10 | 138 675 в секунду | Измерено на 16 картах RTX 5090, арендованных в облаке. Hive Systems Password Table, 2026. Стоимость 10 — наблюдаемое значение по умолчанию в OpenBSD, Auth0, Laravel |
| Wi-Fi WPA2 | 2,5 млн в секунду | hashcat, режим 22000 (PBKDF2-HMAC-SHA1, 4096 итераций), одна RTX 4090. Публичный бенчмарк |
| SHA-256 без усиления | 27,7 млрд в секунду | hashcat, одна RTX 5090, сравнение видеокарт 2026 года |
| MD5 | 219,5 млрд в секунду | Тот же источник. Устаревшая защита, но всё ещё встречается |
Время считаем до попадания в среднем: атакующий находит пароль, перебрав примерно половину вариантов.
Важно, что цифры устаревают. По данным того же исследования, скорость подбора растёт примерно на 20–25% в год: один и тот же восьмисимвольный пароль против bcrypt держался 225 лет в 2024 году, 164 года в 2025 и 132 года в 2026. Мы будем обновлять числа, а не оставлять их «навсегда верными».
Про квантовые компьютеры
Их часто упоминают как повод паниковать. Для паролей это неактуально: известный квантовый алгоритм даёт против хеш-функций только квадратичное ускорение, то есть эффективная стойкость делится на два — это компенсируется одним дополнительным словом. Квантовые компьютеры угрожают обмену ключами и цифровым подписям, а не паролю, защищённому bcrypt.
Что об этом говорят стандарты
Действующая редакция американского стандарта аутентификации NIST SP 800-63B (версия 4, действует с августа 2025 года) прямо поддерживает подход с длинными словесными паролями:
- Минимум 15 символов для пароля, который используется как единственный фактор. В предыдущей редакции было 8.
- Сервисы обязаны принимать пароли длиной хотя бы до 64 символов, все печатные символы и пробел.
- Сервисам запрещено требовать обязательного смешения типов символов — «нужна заглавная, цифра и знак». В предыдущей редакции это было рекомендацией, теперь прямой запрет.
- Сервисам запрещено требовать периодической смены пароля без признаков компрометации.
- Пароль надо сверять со списком утечек целиком, а не по отдельным словам внутри. Поэтому словесный пароль из обычных слов такую проверку проходит: значение имеет только полная строка.
Требование о минимуме 15 символов — ещё один аргумент за слова. Четыре слова с разделителями дают около 28 символов без усилий, а набрать пятнадцать случайных значков вручную почти невозможно.
Чего мы не делаем
- Не храним пароли. Хранить нечего — они не покидают браузер. В памяти браузера сохраняются только настройки: выбранный профиль и количество слов.
- Не используем кириллицу в пароле по умолчанию. Русские буквы негде набрать в BIOS, на телевизорах и в части корпоративных систем, а многие сайты их не принимают.
- Не добавляем скрытых «улучшений». Если настройка даёт ноль бит, рядом с ней написан ноль.
- Не подставляем
Math.random, если криптография в браузере недоступна. В таком случае генератор честно сообщает, что работать не может. - Не ставим счётчики и рекламу на странице генератора. Сторонний скрипт технически способен прочитать пароль из страницы, а значит обещание приватности стало бы неправдой.