Почему это надёжно
Пароль защищают случайность и длина, а не замысловатость. Придуманное человеком подбирают по человеческим же привычкам: Masha1985! только кажется сложным. Здесь каждое слово случайно выбирает компьютер.
В словаре 3 685 слов, и каждое новое слово умножает число вариантов примерно во столько же раз. Весь словарь открыт, и расчёт ниже исходит из того, что взломщик знает его целиком и знает, как устроен пароль. Секрет только в том, какие слова выпали именно вам.
Заглавные буквы здесь просто отделяют слова друг от друга вместо дефисов, поэтому пароль короче. Надёжности они не прибавляют, и в расчёте не учтены.
Какая надёжность нужна
Надёжность считают в битах. Каждый бит вдвое увеличивает число вариантов, которые придётся перебрать взломщику. Одно слово из словаря даёт почти 12 бит, цифра и символ вместе со своими местами ещё около 10. Надёжность вашего пароля написана прямо под ним, а в таблице подсвечена её строка.
| Надёжность | Если у почты, магазина или соцсети украдут базу, подбирать пароль | Для чего | |
|---|---|---|---|
| при современной защите | при устаревшей защите | ||
Что будет, если базу паролей украдут
Базы паролей утекают постоянно: у интернет-магазинов, форумов, служб доставки, а иногда и у очень крупных компаний. Время в таблице как раз про этот случай. Чтобы понять, откуда оно берётся, нужно знать, как сервисы хранят пароли.
Сервис хранит не пароль, а его отпечаток
Почта, магазин или соцсеть не должны записывать ваш пароль в базу как есть. При регистрации они пропускают его через особую формулу, и получается набор знаков, отпечаток пароля. В базу записывается только он. Когда вы входите, сервис снова пропускает введённый пароль через ту же формулу и сравнивает результат с записанным. Совпало, значит, пароль верный.
Reka7TableGorod!c153…ca3cОбратно, от отпечатка к паролю, формула не ведёт.
Изменим один знак: Reka7TableGorod? даёт e650…f2b0. Отпечаток совсем другой, поэтому по нему не понять даже, близко ли угадал взломщик.
Формула работает только в одну сторону: из пароля отпечаток получается мгновенно, а способа вычислить пароль по отпечатку никто не знает, хотя ищут его десятилетиями. Поэтому тот, кто украл базу, получает не пароли, а отпечатки.
Взломщику остаётся угадывать
Он берёт вариант пароля, пропускает его через ту же формулу и сравнивает с украденным отпечатком. Не совпало, берёт следующий. Ограничения «пять неверных попыток, и вход закрыт», как на странице входа, здесь нет: база лежит у него на компьютере, и он перебирает сколько угодно и с той скоростью, какую выдаёт его техника.
Украден отпечаток c153…ca3c. Взломщик перебирает:
Adres2BokKit! | 0e88…8ebc | не то |
Adres2BokKod! | a310…358a | не то |
Adres2BokKot! | 4615…6a41 | не то |
| и так миллиарды вариантов | ||
Reka7TableGorod! | c153…ca3c | совпало |
Взломщик знает, как устроены пароли с этой страницы, и перебирает именно наборы слов из словаря, а не все буквы подряд. Поэтому и надёжность здесь считается по числу таких наборов.
Всё решает скорость формулы
«Современная» и «устаревшая» защита в таблице отличаются только тем, какую формулу выбрал сервис.
- Устаревшая быстрая формула (MD5, SHA-1). Её придумывали для других задач, например чтобы быстро проверить, не испортился ли файл при скачивании, и считается она мгновенно. Одна игровая видеокарта проверяет десятки миллиардов вариантов в секунду, несколько карт — около триллиона.
- Современная медленная формула (bcrypt, scrypt, Argon2). Её сделали медленной нарочно. Вам при входе всё равно, считает сервис отпечаток миллионную долю секунды или десятую. А взломщику нужны миллиарды попыток, и каждая теперь обходится в миллионы раз дороже.
Что из этого следует
Как хранит пароли конкретный сервис, снаружи не видно. Крупные почтовые сервисы и банки обычно защищают их современной формулой. У небольших сайтов, старых форумов и самописных магазинов бывает и устаревшая, а иногда пароли там лежат вовсе открыто, и тогда не спасёт никакая длина.
- Длинный случайный пароль выдержит утечку даже там, где пароли хранят устаревшей формулой.
- На каждом сайте свой пароль. Если какой-то пароль всё же украдут или подберут, взломщик попадёт на один сайт, а не на все сразу.
Через страницу входа подбирать намного медленнее: после нескольких ошибок вход закрывают или просят доказать, что вы не робот. Поэтому таблица и считает худший случай, кражу базы.
Если пароль не принимают
Сразу после открытия страницы в пароле уже есть цифра и специальный символ, а длина не больше 24 знаков. Такой пароль принимает большинство сайтов.
- Цифра. Она стоит после случайного слова. Пароль всегда начинается с буквы, потому что некоторые сайты требуют именно этого.
- Специальный символ. Оставьте включёнными только разрешённые, сайты часто пишут их список рядом с полем. Если списка нет, а пароль не приняли, оставьте один символ, например
!, и попробуйте снова. - Ограничивает длину. Передвиньте ручку линейки на нужное число знаков. Генератор возьмёт слова покороче, а счётчик знаков и оценка надёжности сразу это покажут.
- Поле совсем короткое. Меньше 16 знаков словам тесно, поэтому ниже линейка не опускается. Возьмите пароль, который предлагает браузер или менеджер паролей: он сам создаст случайные знаки и сам их запомнит.
Цифра и символ не только успокаивают придирчивый сайт, но и немного повышают надёжность: цифра, символ и их случайное место вместе дают почти столько же, сколько ещё одно слово, а занимают всего 2 знака. Оценка надёжности это учитывает.
Как этим пользоваться
- На каждый сайт свой пароль. Тогда утечка на одном сайте не откроет остальные.
- Храните пароли в менеджере паролей, например встроенном в браузер или телефон. Запомнить нужно один или два: от менеджера и от главной почты.
- На почте и в банке включите ещё и второй шаг входа: код из приложения или ключ.
- Набирайте в английской раскладке. В словаре простые английские слова и русские слова латиницей, причём только такие, что пишутся однозначно: без ж, ш, щ, ч, ц, х, ю, я, которые каждый передаёт латиницей по-своему.
Откуда берётся случайность
Весь расчёт выше держится на одном условии: слова выбраны действительно случайно. Получить случайность от компьютера труднее, чем кажется.
Компьютер слишком предсказуем
Компьютер — машина предсказуемая: одни и те же действия всегда дают один и тот же результат. Обычная функция «случайного числа» в браузере (Math.random) на деле формула: она берёт предыдущее число и вычисляет из него следующее. Для игр этого хватает, а для паролей нет: по нескольким её числам подряд можно рассчитать все следующие. Эта страница её не использует.
Настоящая случайность приходит из физического мира
Операционная система (Windows, macOS, Android, iOS) всё время собирает шум, который никто не может предсказать: точное время сигналов от клавиатуры, мыши, диска и сети с точностью до миллиардных долей секунды и, главное, показания аппаратного генератора внутри процессора. У Intel и AMD он ловит электрический шум в самой схеме, у Apple для этого есть отдельный блок в чипе. Всё это система смешивает в общий запас случайности.
Шума мало, а чисел нужно много. Поэтому система берёт из запаса случайное начальное значение, «зерно», и разворачивает его в поток чисел шифровальным алгоритмом (ChaCha20 или AES). Даже если видеть миллиарды чисел этого потока, нельзя угадать следующее и нельзя восстановить предыдущие. Зерно регулярно обновляется свежим шумом. Так же создаются ключи шифрования для банков и защищённых соединений, тех, что с замком в адресной строке.
Операционная система вашего устройства
- ШумЭлектрический шум в схеме процессора, точное время сигналов от клавиатуры, мыши, диска и сети.
- Запас случайностиСистема смешивает весь шум в общий запас.
- Поток чиселИз запаса берётся зерно, шифровальный алгоритм разворачивает его в поток:
2871903591 · 194003127 · 3360558012 …
Браузер и эта страница
crypto.getRandomValuesСтраница просит число, браузер берёт его из потока:2871903591.- СловоЧисло становится номером слова в словаре:
2871903591→ номер2526→reka.
Как число становится словом
crypto.getRandomValues — стандартная команда браузера, она есть во всех современных браузерах. Страница просит у неё случайное число и получает число от 0 до 4 294 967 295. А нужно от 0 до 3 684, по номеру слова в словаре. Проще всего взять остаток от деления на 3 685, но он даёт небольшой перекос. Его легко увидеть на маленьких числах: если раскладывать числа от 0 до 255 по остатку от деления на 10, остатки 0–5 получат по 26 чисел, а 6–9 только по 25.
Лишние числа 250–255: из-за них остатки 0–5 выпадают чаще остальных.
Поэтому страница выбрасывает такой хвост: если выпало число из него, она просит новое. Для словаря хвост совсем крошечный, 301 число из четырёх с лишним миллиардов, но страница убирает и его, и каждое слово выпадает с одинаковой вероятностью. Так же выбираются цифра, символ, их места и набор слов под предел длины. Перед каждой выкладкой проверка создаёт 300 000 паролей и сверяет, что ни одно слово не выпадает чаще положенного.
Можно ли доверять этой странице
Пароль создаёт ваш браузер тем самым генератором, прямо на вашем устройстве. Страница не отправляет пароль на сервер и нигде не сохраняет. Здесь нет счётчиков, файлов cookie и чужих скриптов, а её настройки безопасности запрещают браузеру любые запросы из кода страницы.
Проверить это может каждый: весь код находится в этом одном файле. Для самого важного пароля сохраните страницу на компьютер, отключите интернет и откройте её. Но если устройство заражено, никакой генератор не поможет.