Генератор легко запоминающихся паролей / PHP Yii User Friendly Easy-To-Remember Password Generator
На днях поднялся вопрос об автоматической генерации паролей для новых пользователей. Случайные пароли типа md5(microtime()) выглядят так «7da5cfab54ae10eb6f1e4b44bf6204b9» и их невозможно запомнить. На листочек не запишешь, а тем более не передашь по телефону.
Сразу же отмечу, что сообщать свой пароль кому-бы то ни было или записывать его на листочке — это очень плохо. Пароль должен сохраняться в тайне. Но это не мешает делать пароли хорошо запоминающимися.
Мне захотелось создать более дружелюбные, легко запоминающиеся пароли. Чтобы их читали весело, задорно, с огоньком и сразу же запоминали.
Первый генератор, который я взял, был первым в Google по фразе «php userfriendly password generator» и поверьте, он не очень дружелюбен, потому что генерирует так же случайный набор букв. В комментариях к нему указана забавная картинка-комикс http://xkcd.com/936/, в которой показано, что случайный набор символов невозможно запомнить, а подобрать можно очень быстро (3 дня на пароль из 11 символов с буквами, цифрами и знаками препинания). Пароль из четырёх случайных слов общей длиной 25 символов подобрать почти невозможно (550 лет).
Примечание: если известно, что пароль содержит только слова из словаря, то он подбирается намного быстрее, чем за 550 лет, но точное время сказать не могу.
Моё решение для генератора легко запоминаемых паролей
Я взял 750 английских прилагательных из словарей и извлёк около 25000 однословных английских тегов длиной от 5 до 9 символов с instagramm, в которых используются только буквы латинского алфавита. Там правда часто встречаются аббревиатуры типа PHP, Yii, WTF.
Пароль составляется по шаблону, включающему строки «{static}», «{number}», «{dynamic}», которые соответственно заменяются на случайное слово из словаря прилагательных, случайное число и случайное слово из тегов.
Базовый шаблон для пароля: «{число}{прилагательное}{число}{тег}{число}» даёт пароль вида «16ugly29private54″, который хоть и не легко, но можно запомнить и при такой длине достаточно долго перебирать при взломе.
Вариант шаблона «{прилагательное}{тег}{тег}{тег}» как раз соответствует паролю «correct horse battery staple» из картинки http://xkcd.com/936/ который я сейчас по памяти написал (ставь лайк, если проверил по картинке 🙂 )
Код генератора удобных паролей на PHP
Получайте код PHP userfriendly password generator на gist.com (он написан под фреймворк Yii — по отдельной просьбе могу перевести на другой или написать на чистом PHP). Исключительно для разнообразия часть данных из словарей хранится в файле, часть — в базе данных. Если есть желание, можно сделать оба словаря в файлах или оба в базе данных. Также можно ввести поддержку страшных неуклюжих символов в разных регистрах и знаков препинания, но я намеренно не включал их, потому что тогда пароль будет трудным для запоминания.
попробовать
В тему этого поста хочу вспомнить вот такую забавную историю про пароль: