Как создать действительно случайный и доказуемо безопасный пароль

Менеджеры паролей, такие как KeePass, 1Password и множество других, в значительной степени решают эту проблему. С их помощью вы можете генерировать уникальный и безопасный пароль для каждого сайта, который вы посещаете. Но такой менеджер защищен ровно настолько, насколько безопасен главный пароль, который вы используете для доступа к нему. Вы должны быть уверены, что его достаточная случайность и неугадываемость подтверждена количественными измерениями, а не только тем, что вы воспринимаете его случайным по причине наличия нескольких цифр или восклицательных знаков. Если нам требуется истинная случайность, нам понадобится кое-что специальное.

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

Бросание игральной кости позволяет получить случайное число от 1 до 6, которое даёт нам 2,58 бита информации.

Основоположник теории информации Клод Шеннон определил информацию, как снятую неопределенность. Точнее сказать, получение информации — необходимое условие для снятия неопределенности. Неопределенность возникает в ситуации выбора. Задача, которая решается в ходе снятия неопределенности — уменьшение количества рассматриваемых вариантов (уменьшение разнообразия), и в итоге выбор одного соответствующего ситуации варианта из числа возможных. Снятие неопределенности дает возможность принимать обоснованные решения и действовать. В этом управляющая роль информации.

Энтропия — мера неопределенности, выраженная в битах. Так же энтропию можно рассматривать как меру равномерности распределения случайной величины.

В действительности нет нецелых, поэтому мы всегда округляем до ближайшего бита. В этом случае нам нужно 3 бита для хранения числа от 1 до 6, но на самом деле мы можем хранить и от 0 и до 7:

000 - 0
001 - 1
010 - 2
011 - 3
100 - 4
101 - 5
110 - 6
111 - 7

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

По сути, переменная с n-ным количеством битов может иметь 2^n (2 в степени n) возможных значений. Поскольку байт состоит из 8 битов, то он может иметь 2^8 (256) возможных значений.

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

Компьютеры имеют ограниченное количество свободной памяти. Каждый раз, когда мы объявляем переменную, небольшая часть этой свободной памяти выделяется до тех пор, пока переменная существует. Поскольку современные компьютеры имеют много памяти, то в большинстве случаев – это не проблема, особенно когда в программе всего лишь несколько переменных. Тем не менее, для программ, которые требуют большого количества переменных (например, 100 000), разница между использованием 1-байтовых или 8-байтовых переменных может быть значительной.


Так видеоигра The Legend of Zelda, выпущенная в 1987 году была 8-битной и имела ограничение для значений переменных равное 255.

Я хотел бы, чтобы энтропия для подбора моего пароля была по крайне мере 128 бит. По большинству исследований, взлом 128-битного шифрования практически невозможен с использованием методов грубой силы менее чем за несколько миллиардов лет. Используя уравнение 2^n, мы можем хранить одно из 3.4*10³⁸ различных значений, используя 128 бит. Если бы вы могли протестировать 100 миллиардов возможных значений в секунду, все равно потребовались бы десятки триллионов лет, чтобы угадать правильный пароль. Я считаю это достаточно хорошо. 128-битный пароль почти наверняка не будет слабым звеном в цепочке вашей онлайн-безопасности.

Если каждый из наших кубиков вырабатывает 2,58 бита энтропии за один бросок, то подбрасывание пяти даст нам 12,9 бита. Если мы используем 5 игральных костей 10 раз, то мы получим 129 бит информации, а для тех кто не знает результатов создадим неопределенность или энтропию равную 129 битам.

Но как превратить эти результаты в безопасный, но запоминающийся пароль?

Я использую Diceware, который является словарем слов, индексированных с помощью результатов подбрасывания пяти игральных костей. Каждый раз, когда вы бросаете 5 кубиков (или один 5 раз), числа, которые получаются, соответствуют слову в списке. Например, если на 5 кубиках выпало 1-4-2-6-3, нужно перейти на страницу со всеми словами 14xxx и обнаружить, что 14263 соответвтует «blab». Сделайте это десять раз, и вы получите строку из десяти слов. Эти десять слов — потенциальный пароль.

Далее нам поможет мнемотехника — совокупность специальных приёмов и способов, облегчающих запоминание нужной информации и увеличивающих объём памяти путём образования ассоциаций (связей). Например, можно использовать «принцип сюжета» — сочинить рассказ (сюжет), в котором задействованы запоминаемые слова. Например, чтобы запомнить последовательность слов: «Слон, домик, телевизор», — придумываем: «Слон шёл к себе в домик смотреть телевизор». Возможно, вы будете чувствовать себя глупо, но это работает, и вы будете удивлены, как быстро вы можете запомнить вещи таким образом.

В PDF формате одна из версий словаря доступна по ссылке тут, а тут версия на русском языке.

Если все это кажется излишним, помните, что это пароль, за которым хранится вся ваша финансовая и онлайн-жизнь. Если считаете, что этого того стоит, спуститесь в магазин комиксов и купите кубики. Зайдите в комнату, где нет камер, телефонов или компьютеров, бросьте кубики и напишите соответствующие слова из словаря (я бы выбрал 15 слов, чтобы убрать несколько, которых бы не знал). Затем выберите десять слов и запомните их. Это ваш пароль. Храните запись в течение нескольких дней, пока не убедитесь, что запомнили пароль, который предложено использовать для входа в менеджер паролей.

Теперь вы знаете как получить пароль, который действительно и доказуемо случайный, который не контролировался или не генерировался для вас третьей стороной и который безопасно хранится в вашем уме. Вы можете использовать его в течение нескольких лет, и это единственный пароль, который вам нужно будет знать. Даже если кто-то знает, что вы использовали 10 слов, и знаете, какой словарь вы использовали, им все равно придется «пробиваться» через 129 изнурительных бит энтропии.

Снимите шапочку из фольги и продолжайте свою жизнь. Надевать её время от времени — это нормально.

Комментарий Cloud4Y

Ранее этот вопрос поднимался на Хабрахабре в постах «Ликбез по псевдослучайным генераторам» и «Практические рекомендации по выбору паролей по результатам взлома antichat.ru«.

Основные выводы, полученные автором:

1. Не столь важно, каким образом программа генератор получает пароли, сколь — откуда берет начальные данные. Если не происходит никакого интерактива вообще, следует усомниться.
2. Человек едва ли может уследить за отсутствием статистически популярных комбинаций в пароле, что подтверждается подбором 31790 паролей из 41037 MD5 хешей за 8 часов.

В связи с этим метод описанный Charlie Hoey может быть полезным особенно при отсутствии двухфакторной аутентификации.

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

1 2 3 4 5 6
1 ~! # $% ^
2 & * ( ) — =
3 + [ ] \ { }
4:; » < >
5? / 0 1 2 3
6 4 5 6 7 8 9

Вставка буквы в случайном порядке добавит около 10 бит энтропии. Всё это, конечно, предполагает секретность кодовой фразы.

P.S.
Также рекомендую статью Charlie Hoey «A Eulogy for the Headphone Jack» (Хвала «джеку»), в которой он описывает то, как, не имея страховки, сэкономил 1000 долларов на проверке собственного здоровья, собрав аппарат ЭКГ, и почему нам важно сохранить разъем для наушников и не потерять доступ к почти универсальному и свободному от лицензий порту ввода-вывода.

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

FavoriteLoadingДобавить в избранное

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *