Skip to content
Назад в блог

Как Diceware превратил случайные слова в надёжную парольную фразу

4 мин. чтения
Как Diceware превратил случайные слова в надёжную парольную фразу

Длинная парольная фраза не становится надёжной только потому, что в ней много букв и пробелов. Цитату из книги, строчку песни или красивое предложение человек выбирает по знакомым шаблонам, а такие шаблоны можно включить в словари для перебора. Сила метода Diceware заключается в другом: слова выбирает не человек, а источник случайности, поэтому атакующему приходится проверять всё пространство возможных комбинаций.

Эта идея появилась задолго до того, как четыре слова из комикса XKCD стали интернет-мемом. В середине 1990-х Арнольд Райнхолд предложил использовать обычные игральные кости как прозрачный источник случайности, которому не нужен компьютер. Метод получил название Diceware и связал понятную физическую процедуру с точным расчётом стойкости.

Как пять бросков превращаются в слово

Классический список Diceware содержит ровно 7776 позиций, потому что столько последовательностей можно получить за пять бросков шестигранной кости: 6⁵ = 7776. Результаты записывают подряд, например 43463, находят соответствующую строку в таблице и получают одно слово. Затем пять бросков повторяют для следующего слова, пока не получится фраза нужной длины.

Важно не выбирать из нескольких результатов самый приятный и не перебрасывать кости из-за странного сочетания. Повторения слов тоже допустимы. Каждый выбор должен оставаться независимым и равномерным, иначе фактическое пространство вариантов уменьшается, а привычная формула энтропии перестаёт описывать полученную фразу.

Для списка размером W и фразы из n независимо выбранных слов энтропия вычисляется так:

H = n × log₂(W)

При W = 7776 одно слово добавляет примерно 12,9 бита, пять слов дают около 64,6 бита, а шесть слов около 77,5 бита. Это не таймер, который обещает определённое число лет до взлома. Скорость подбора зависит от того, ограничивает ли сервис число попыток, каким алгоритмом хэшируется пароль и удалось ли атакующему получить базу для офлайн-перебора. Энтропия описывает количество равновероятных вариантов до того, как эти условия вступят в игру.

Пять бросков костей образуют индекс, по которому независимо выбирается слово из списка Diceware

Что изменил XKCD 936

В 2011 году Рэндалл Манро опубликовал комикс XKCD №936 «Password Strength», в котором сопоставил Tr0ub4dor&3 и correct horse battery staple. Первый пароль выглядит сложным, но построен из знакомого слова, типичной замены буквы на цифру и предсказуемого окончания. Второй легче представить и запомнить, а его слова в модели комикса выбираются независимо.

Числа 28 и 44 бита в комиксе часто повторяют как готовую оценку, хотя они имеют смысл только при заложенных Манро предположениях о способе создания обоих вариантов. Если выбрать четыре слова равномерно из полного списка Diceware, расчёт даст около 51,7 бита, но если человек самостоятельно сочинит фразу из четырёх подходящих слов, приписывать ей это значение нельзя. Более того, знаменитая строка из самого комикса давно находится в словарях атакующих и больше не содержит полезного секрета.

Главный вклад XKCD состоял не в новой формуле, а в удачном объяснении компромисса между стойкостью и запоминаемостью. Комикс показал широкой аудитории, почему сложность оформления пароля не равна случайности его происхождения.

Зачем EFF выпустил новый список

Первоначальный список Райнхолда проектировался так, чтобы слова были короткими, поэтому в нём встречались аббревиатуры и сочетания символов, которые не всегда удобно произносить. В 2016 году Electronic Frontier Foundation опубликовала длинный список из 7776 более узнаваемых английских слов. Размер пространства не изменился, следовательно, одно случайное слово сохранило те же 12,9 бита энтропии, но сами фразы стало легче читать и запоминать.

EFF рекомендует для большинства применений шесть случайных слов и отдельно подчёркивает, что такую фразу не следует повторно использовать на разных сайтах. Для обычных учётных записей удобнее генерировать уникальные пароли в менеджере, а Diceware особенно полезен там, где один секрет действительно приходится помнить: например, для мастер-пароля, шифрования диска или разблокировки приватного ключа.

Современные рекомендации NIST согласуются с общей идеей, но не объявляют любую фразу безопасной. В SP 800-63B-4 сервисам предписано разрешать длинные пароли, пробелы, вставку из менеджера и проверять новые значения по списку известных и скомпрометированных секретов. Одновременно NIST отказывается от обязательных правил вроде «одна заглавная, одна цифра и один спецсимвол», потому что пользователи выполняют их предсказуемым образом. Длина помогает, но источник выбора по-прежнему имеет решающее значение.

Почему BIP39 устроен иначе

Набор из 12 или 24 слов в криптокошельке внешне похож на Diceware, однако выполняет другую задачу. Мнемоника BIP39 кодирует от 128 до 256 бит сгенерированной компьютером энтропии и добавляет контрольную сумму, после чего разбивает результат на индексы словаря из 2048 слов. Это не парольное предложение, которое можно придумать или собрать в обычном генераторе.

В BIP39 существует и параметр с названием passphrase, но он передаётся в функцию получения seed отдельно от мнемоники. Поэтому фразой Diceware можно при необходимости защитить совместимый кошелёк как дополнительным секретом, но нельзя заменять ею слова восстановления.

Как работает генератор на сайте

Passphrase Generator позволяет выбрать один из четырёх списков. По умолчанию используется современный английский словарь EFF, кроме него доступны оригинальный список Diceware, альтернативный список Beale и русскоязычный список Diceware. В каждом файле содержится 7776 уникальных слов, поэтому при равномерном выборе любое из них добавляет те же 12,9 бита энтропии. Список влияет на язык, состав слов и удобство запоминания, но не меняет размер пространства комбинаций.

Каждое слово выбирается независимо с помощью crypto.getRandomValues. Равномерность сохраняется благодаря rejection sampling: генератор отбрасывает значения, которые могли бы внести небольшое смещение при делении случайного числа по модулю размера списка. Перед использованием загруженный файл также проверяется на точное количество уникальных слов, поэтому неполный или повреждённый список не участвует в генерации.

В инструменте можно выбрать 6, 12, 15, 18 или 24 слова, изменить регистр и соединить слова пробелом, дефисом, подчёркиванием либо собственным разделителем. Регистр и разделитель не добавляют энтропии, поскольку эти параметры задаёт пользователь и атакующий может их предположить. Опциональная случайная цифра в конце добавляет log₂(10), то есть примерно 3,32 бита.

Индикатор показывает расчёт для равномерного выбора из полного списка, а подписи уровня стойкости служат ориентиром, но не гарантией. Генерация выполняется локально в браузере, и сам инструмент не отправляет полученную фразу на сервер. Для важного секрета всё равно стоит использовать доверенное устройство, не сохранять фразу в истории буфера обмена и не исправлять вручную «неподходящие» слова, иначе преимущества случайного выбора легко потерять.

Похожие инструменты

Частые вопросы

Что такое Diceware?

Diceware представляет собой способ создания парольной фразы с помощью игральных костей и нумерованного списка слов. Пять результатов образуют индекс от 11111 до 66666, по которому выбирается одно из 7776 слов; процесс повторяют для каждого следующего слова.

Любая длинная фраза надёжнее короткого пароля?

Нет. Цитата, строка из песни или придуманное человеком предложение остаются предсказуемыми, даже если они длинные. Расчёт Diceware применим только тогда, когда каждое слово выбирается независимо и равномерно случайным образом из известного списка.

Сколько энтропии даёт парольная фраза Diceware?

В списке из 7776 слов одно случайно выбранное слово даёт около 12,9 бита энтропии. Пять независимых слов дают около 64,6 бита, а шесть слов около 77,5 бита. Эти числа описывают пространство вариантов, но не обещают конкретное время взлома без учёта способа хранения пароля и модели атаки.

Чему на самом деле учит комикс XKCD 936?

Комикс показывает, что внешне сложные замены символов часто следуют знакомым атакующему шаблонам, тогда как независимо выбранные слова могут одновременно увеличить пространство поиска и упростить запоминание. Приведённые в комиксе 28 и 44 бита являются иллюстрацией при заданных предположениях, а не универсальной оценкой любых паролей.

Можно ли использовать такую фразу как seed-фразу BIP39?

Нет. Мнемоника BIP39 кодирует машинно сгенерированную энтропию вместе с контрольной суммой и использует собственный список из 2048 слов. Дополнительная passphrase в BIP39 является отдельным параметром, поэтому обычную фразу Diceware нельзя подставлять вместо мнемоники кошелька.

Автор

Fullstack Engineer

В коммерческой разработке с 2011 года — больше 15 лет. Автор двух SaaS-продуктов: TeleGo.io и LingvoHabit.com. Статьи здесь выросли из реальной клиентской и продуктовой работы.

Подробнее об автореНаписать в Telegram

Похожие статьи

NUMBER BASE CONVERTER
NUMBER BASE CONVERTER · '26

Как компьютер представляет числа: биты, hex и IEEE 754

Почему одно число записывают как 45, 101101 и 2D, откуда взялись двоичная, восьмеричная и hex-системы и чем IEEE 754 отличается от них.

#Number Base Converter #IEEE 754 #двоичная система #шестнадцатеричная система #дополнительный код #римские цифры #ивритская гематрия #греческие цифры #история математики
5 мин. чтения
ИСТОРИЯ ФОРМАТИРОВАНИЯ КОДА
ИСТОРИЯ ФОРМАТИРОВАНИЯ КОДА · '26

Почему разработчики до сих пор спорят о форматировании

Краткая история соглашений о форматировании и точные границы beautify/minify для HTML и CSS в нашем локальном браузерном инструменте.

#история форматирования кода #Prettier #indent style #K&R vs Allman #код-стайл #табы против пробелов
2 мин. чтения
GZIP VS BROTLI
GZIP VS BROTLI · '26

Как патенты на LZW привели к gzip, а веб к Brotli

История gzip, DEFLATE и Brotli, устройство двух форматов сжатия и практический выбор между размером результата, скоростью кодирования и совместимостью.

#GZip vs Brotli #история сжатия данных #Jean-loup Gailly #Brotli Google #Deflate алгоритм #LZ77 Huffman
5 мин. чтения