Введение

Программа, генерирующая пароль из генератора случайных чисел.

Генератор случайных паролей – это программное обеспечение или аппаратное устройство, которое принимает данные от генератора случайных или псевдослучайных чисел и автоматически генерирует пароль. Случайные пароли можно создавать вручную, используя простые источники случайности, такие как игральные кости или монеты, или с помощью компьютера. Хотя в интернете доступно множество программ генераторов "случайных" паролей, генерация случайности может быть сложной задачей, и многие программы не генерируют случайные символы таким образом, чтобы обеспечить надежную безопасность. Рекомендуется использовать инструменты безопасности с открытым исходным кодом, когда это возможно, поскольку они позволяют проводить независимую оценку качества используемых методов. Простое случайное создание пароля не гарантирует его надежность, поскольку существует (хотя и крайне малая) вероятность сгенерировать легко угадываемый или взламываемый пароль. Фактически, пароль не обязательно должен быть создан идеально случайным процессом – он должен быть достаточно сложным для подбора. Генератор паролей может быть частью менеджера паролей. Если политика паролей требует соблюдения сложных правил, использовать генератор паролей, основанный на этих правилах, может быть проще, чем создавать пароли вручную. Длинные последовательности случайных символов трудно запомнить большинству людей. Мнемонические хэши, которые обратимо преобразуют случайные строки в более запоминающиеся пароли, могут значительно облегчить запоминание. Поскольку хэш может быть обработан компьютером для восстановления исходной 60-битной строки, он содержит не меньше информации, чем исходная строка. Аналогичные методы используются в спортивной мнемонике.

Тип пароля и его сила

Случайные генераторы паролей обычно выдают строку символов заданной длины. Это могут быть отдельные символы из определенного набора, слоги, предназначенные для создания легко произносимых паролей, или слова из списка слов для формирования парольной фразы. Программу можно настроить для обеспечения соответствия сгенерированного пароля локальной политике безопасности, например, всегда создавая комбинацию букв, цифр и специальных символов. Такие политики обычно немного снижают надежность пароля по сравнению с теоретической формулой, поскольку символы больше не генерируются независимо друг от друга. Надежность случайного пароля против конкретной атаки (например, перебора) можно оценить, вычислив информационную энтропию случайного процесса, который его создал. Если каждый символ пароля генерируется независимо и с равномерной вероятностью, энтропия в битах вычисляется по формуле , где N – количество возможных символов, а L – количество символов в пароле. Функция log2 – это логарифм по основанию 2. H обычно измеряется в битах. Любой генератор паролей ограничен пространством состояний используемого генератора псевдослучайных чисел, если он его использует. Следовательно, пароль, сгенерированный с помощью 32-битного генератора, имеет максимальную энтропию 32 бита, независимо от количества символов в пароле.

Сайты

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

Web-криптографический API

Web Cryptography API — это рекомендация Консорциума Всемирной паутины (W3C) по созданию низкоуровневого интерфейса, который повысит безопасность веб-приложений, позволяя им выполнять криптографические функции без доступа к необработанному ключевому материалу. Web Crypto API предоставляет надежный способ генерации паролей с использованием метода `crypto.getRandomValues`. Вот простой код на Javascript, который генерирует надежный пароль, используя Web Crypto API.

Стандарт FIPS 181

Многие компьютерные системы уже имеют приложение (обычно называемое "apg") для реализации стандарта FIPS 181 по генерации паролей. FIPS 181 — Automated Password Generator — описывает стандартный процесс преобразования случайных битов (из аппаратного генератора случайных чисел) в относительно произносимые "слова", подходящие для использования в качестве парольной фразы. Однако в 1994 году была обнаружена уязвимость в алгоритме FIPS 181, позволяющая злоумышленнику, в среднем, взломать 1% учетных записей с паролями, созданными на его основе, после перебора всего 1,6 миллиона паролей. Это связано с неравномерностью распределения генерируемых паролей, которую можно решить, используя более длинные пароли или модифицировав алгоритм.