Что такое биты стойкости и почему они важнее длины
Надёжность пароля — это не то, сколько в нём разных значков. Это сколько разных паролей могла выдать та же кнопка. Если генератор умеет выдать миллион вариантов, миллион и переберут. Если 36 квадриллионов — не переберут.
Эту величину принято измерять в битах. Один бит — это удвоение количества вариантов. Отсюда всё остальное.
Один бит — это удвоение
| Бит | Вариантов | Это как |
|---|---|---|
| 1 | 2 | монетка |
| 3 | 8 | три монетки |
| 10 | 1 024 | одно слово из нашего короткого словаря |
| 11 | 2 048 | одно слово из основного словаря |
| 22 | 4 194 304 | два слова |
| 33 | 8,6 миллиарда | три слова |
| 44 | 17,6 триллиона | четыре слова |
| 55 | 36 квадриллионов | пять слов |
| 66 | 74 квинтиллиона | шесть слов |
Обратите внимание на скорость роста. Каждое новое слово умножает количество вариантов на 2048 — это прибавка сразу в 11 бит. Ни один добавленный значок так не работает.
Что добавляет биты, а что только кажется
Возьмём пароль из четырёх слов и посмотрим, что даёт каждое «улучшение», которое обычно предлагают генераторы.
| Что делаем | Прибавка | Почему именно столько |
|---|---|---|
| Добавить пятое случайное слово | +11 бит | Генератор выбирает из 2048 слов: log₂(2048) = 11 |
| Две случайные цифры в случайном месте | +9 бит | 100 вариантов числа (6,6 бита) и 5 мест, куда его вставить (2,3 бита) |
| Символ в случайном месте внутри | +8 бит | 9 символов (3,2 бита) и около 25 позиций (4,6 бита) |
| Тот же символ, но всегда в конце | +3 бита | Место известно, остаётся только выбор символа. И это первое, что пробуют правила подбора |
| Заглавная в начале каждого слова | 0 бит | Правило постоянное. Новых вариантов не появляется — подбор применит то же правило |
| Выбрать разделитель: дефис или подчёркивание | 0 бит | Это ваша настройка. Случайности в ней нет |
Заменить o на 0, a на @ |
0 бит | Стандартное правило в любой программе подбора. Ввод при этом усложняется |
| Восклицательный знак в конце | 0 бит | Если он там всегда — это часть схемы, а не случайный выбор |
| Вставить имя клиента вместо случайного слова | −11 бит | Место случайного слова занято известным. Тот, кто знает клиента, попробует его имя первым |
Убрать похожие символы l 1 I O 0 |
небольшой минус | Алфавит сокращается. Осознанная плата за то, что пароль не перепутают при чтении с листка |
Главный вывод
Если хочется надёжнее — добавьте слово, а не значок.
Одно слово даёт больше, чем заглавные буквы, спецсимвол и leet-замены
вместе взятые. При этом набирать его проще, чем искать #
на экранной клавиатуре телевизора.
Сколько бит достаточно
Зависит от того, как хранит ваш пароль тот сервис, которому вы его доверили. Разброс огромный: между хорошей защитой и плохой — шесть порядков по скорости подбора.
| Слов | Бит | bcrypt хорошая защита |
Wi-Fi 8 видеокарт |
MD5 устаревшая защита |
|---|---|---|---|---|
| 3 | 33 | 9 часов | 4 минуты | 20 мс |
| 4 | 44 | 2 года | 5 дней | 40 секунд |
| 5 | 55 | 4 тыс. лет | 28 лет | 23 часа |
| 6 | 66 | 8 млн лет | 58 тыс. лет | 5 лет |
| 7 | 77 | 17 млрд лет | 118 млн лет | 11 тыс. лет |
Время до попадания в среднем: перебрать надо примерно половину вариантов. Скорости взяты из опубликованных измерений — откуда именно.
Из этой таблицы следуют три вещи, которые стоит запомнить.
Четыре слова — это мало. Против современной защиты держится два года, против устаревшей — сорок секунд. А вы не можете знать, какая защита у сервиса: об этом не пишут.
Пять слов — рабочий минимум. Против bcrypt это четыре тысячи лет. Даже против MD5 — почти сутки, чего хватит, чтобы утечка стала известна и пароль успели сменить.
Wi-Fi — особый случай, и он хуже, чем кажется. Смотрите на средний столбец: он строже, чем bcrypt. Перехватив обмен с точкой доступа, пароль подбирают локально, никто не мешает и не ограничивает попытки. Поэтому пароль от Wi-Fi нужен сильнее обычного — хотя вводить его труднее всего.
Почему Password1! — это почти ноль бит
Посчитаем формально. Десять символов, есть заглавная, строчные, цифра и знак. Алфавит около 94 символов, значит 10 × log₂(94) ≈ 66 бит. Больше, чем у пароля из пяти слов.
И это неверно. Формула работает только для случайной строки.
Password1! случайной не является: она стоит в первых строках
каждого словаря утечек, и подбор начинается именно с неё. Реальная
стойкость измеряется не длиной, а тем, на каком месте пароль окажется
в списке перебора. У Password1! это место — первая тысяча.
То же касается всего похожего:
Qwerty2024!— клавиатурная последовательность плюс годIvan1985— имя плюс дата рожденияP@ssw0rd— замены букв на похожие символы, первое правило в любой программе подбораЛето2024— слово плюс год, только в другой раскладке
Все эти пароли выглядят сложными для глаза и не являются сложными для компьютера. Это ключевая разница, из-за которой мы вообще показываем биты, а не звёздочки: звёздочки оценивают внешний вид, биты — количество вариантов.
Как это формулирует 1Password
«Стойкость системы создания паролей — не в том, сколько в итоге получилось букв, цифр и символов, а в том, сколькими способами эта же система могла бы дать другой результат».
Почему мы показываем биты честно, а не оптимистично
Одно и то же число бит можно посчитать двумя способами, и разница между ними в разы.
Первый способ: атакующий знает, что пароль сделан нашим генератором, знает словарь и схему. Тогда для пяти слов и двух цифр это 59 бит.
Второй способ: атакующий видит только строку
morkov-lampa-tuchka-veslo-47 и перебирает символы
по алфавиту, который в ней видит. Тогда получается около 145 бит.
На главной мы показываем первое число — то, которое меньше. Потому что предполагать, будто атакующий не знает про существование словарных паролей, наивно: словари для подбора passphrase существуют давно и доступны всем. Второе число тоже показываем, но подписью и вторым, а не главной цифрой.
Это же соображение объясняет, почему мы спокойно публикуем словарь целиком. Расчёт бит уже исходит из того, что словарь известен. Скрывать его — значит завышать оценку стойкости, то есть врать.
Как мы считаем риск ошибки при передаче
Пароль почти никогда не набирают из головы. Его читают с листка, слышат по телефону, переписывают из письма. На каждом шаге можно ошибиться, и цена ошибки всегда одна: «пароль не подходит», без указания, где именно опечатка.
Мы считаем не символы, а части передачи — то, что человек называет и воспринимает как одно целое.
| Часть | Шанс ошибки | Почему |
|---|---|---|
| Слово из словаря | 0,5 % | Слово узнаётся целиком. В нашем словаре нет пар, отличающихся одной буквой — «морковь» невозможно услышать как другое слово из списка |
| Двузначное число | 1 % | Называется одним словом: «сорок семь» |
| Обычный символ | 2 % | Приходится называть по алфавиту связи |
| Путаемый символ | 6 % | l и 1, O и 0, s и 5, m и n — на слух и в рукописи различаются плохо |
Вероятности — оценка, а не измеренная статистика. Мы не проводили исследование на людях. Но соотношение между способами эта оценка передаёт верно, и именно соотношение важно для выбора.
Считаем вероятность передать всё без единой ошибки, перемножая шансы по частям. Получается так:
| Пароль | Бит | Частей | Риск ошибки |
|---|---|---|---|
morkov-lampa-tuchka-veslo-47 |
49 | 5 | 3 % |
Kj7#pQ2$vL9 |
72 | 11 | 32 % |
PIN 739284 |
20 | 6 | 25 % |
Обратите внимание: это единственное, в чём словесный пароль выигрывает. По количеству нажатий он проигрывает — 49 бит за 28 символов против 72 бит за 11. Обещать «меньше нажатий» было бы неправдой, и мы этого не обещаем.
Но если пароль нужно продиктовать клиенту по телефону, записать в акт передачи или набрать пультом на телевизоре — выигрыш в надёжности передачи важнее нескольких лишних нажатий. Если пароль вставляется через буфер обмена — берите случайные символы, они короче и стойче.