Я являюсь автором сайта генерации случайных паролей http://passwordcreator.org . Вот что я узнал в процессе создания этого сайта о создании безопасных случайных паролей:
Случайный источник
Большинство генераторов случайных чисел на компьютерах псевдослучайны. Они основаны на алгоритмах и не подходят для генерации паролей. Как правило, они посеяны с текущим временем. Если эта часть информации известна (или может быть угадана), можно воспроизвести их вывод и увидеть пароли, которые были бы сгенерированы.
Для генерации пароля следует использовать криптографически безопасный генератор псевдослучайных чисел (CPRNG) . Из Википедии два требования этого типа генератора случайных чисел:
- учитывая первые k битов случайной последовательности, не существует алгоритма полиномиального времени, который мог бы прогнозировать (k + 1) -й бит с вероятностью успеха лучше, чем 50%.
- В случае, если часть или все его состояние было обнаружено (или угадано правильно), должно быть невозможно восстановить поток случайных чисел до открытия. Кроме того, если во время работы имеется энтропийный вход, должно быть невозможно использовать знания о состоянии входа для прогнозирования будущих условий состояния CSPRNG.
Современные веб-браузеры (за исключением Internet Explorer) теперь имеют криптографический API, доступный для JavaScript, который имеет криптографически безопасный генератор случайных чисел . Это облегчает для таких сайтов, как мой, генерирование уникальных паролей, которые невозможно угадать, основываясь на знании того, когда и где они были созданы.
Длина пароля
Распространенная атака на пароли заключается в том, что злоумышленник получает доступ к базе данных, в которой хранятся зашифрованные (хешированные) пароли. Затем злоумышленник может генерировать догадки, хэшировать их, используя тот же алгоритм хеширования, и посмотреть, получат ли они совпадения. Вот статья, которая показывает, сколько паролей уязвимо для такой атаки. Компьютеры теперь достаточно мощные, поэтому злоумышленники, как известно, используют 100 миллиардов паролей в секунду. Компьютеры секретных военных и шпионских агентств могут сделать на порядок больше.
С практической точки зрения это означает, что пароль должен быть выбран из пула квинтиллионов возможностей. 96 символов, которые можно набрать на клавиатуре, могут генерировать только четыре миллиарда возможностей с использованием восьмисимвольного пароля. Чтобы быть в безопасности, пароли сегодня должны быть длиннее, чем когда-либо в прошлом. Компьютеры станут более мощными в будущем, и вы, возможно, захотите выбрать пароли, которые даже дольше, чем те, которые вам могут понадобиться, чтобы чувствовать себя в безопасности сегодня, чтобы в будущем их тоже нельзя было легко взломать. Я бы порекомендовал как минимум длину 10 для случайных паролей, основанную на 96 возможных символах, но использование длины 12 или 14 было бы намного лучше для будущей безопасности.