Простому пользователю от пароля хочется двух вещей — надежности и легкости запоминания.
В случае произвольно создаваемых паролей, желаемая надежность достигается очень легко (увеличили длину генерируемого пароля или расширили набор символов, из которого он генерируется). Но запомнить такой пароль очень сложно. Во-первых, сочетание произвольных букв и цифр получается не читаемым для членораздельного произношения. Во-вторых, цифры, буквы, их регистры — все это перемешано в одной куче и, конечно же создавая нужную надежность, никак не помогают их запомнить своему владельцу.
Если вы администратор какого то проекта, то вы можете возложить все тяготы и ответственность по созданию пароля на пользователя, существо сколько беспечное столько же и халатное. С другой стороны, в случае взлома учетной записи, пользователь поспешит за помощью к вам, и расхлебывать результаты несанкционированного доступа придется вам же.
Потому, лучше выдать пользователю изначально довольно надежный пароль, а не пускать все на волю случая. Как показывает практика, пользователи ленятся менять выданные им пароли, так что выданный однажды пароль, может прослужить верой и правдой долгие-долгие дни.
Что такое удобный пароль?
Дальше я предлагаю код функции генератора «удобных» паролей. Идея не придумана мной, здесь я даю лишь свою реализацию на php. В «удобном пароле» должны чередоваться гласные и согласные буквы, а для пущей красоты в середину вставим какое-нибудь число, чтобы разбить длинную последовательность букв.
Регистр букв тоже можно как то использовать, но силы пароля и так достаточно, а для пользователя не очень удобно запоминать регистр каждой буквы, потому от игры с регистром мы откажемся. В итоге пользователю нужно запомнить два коротких тарабарских слова и цифру.
Как работает функция генерации паролей?
На выходе мы получим готовый пароль, в том виде как мы его только что задумали. А на входе вы можете указать только длину пароля. Функция использует 3 словаря для генерации комбинации:
- словарь гласных букв — 5 симв
- словарь согласных букв (тут убрали l — слишком похожа на единицу) — 20 симв.
- и словарь цифр (я исключил ноль, который можно спутать с буквой О) — 9 симв.
Дальше генератор создаёт число для середины пароля, а к нему уже пристраивает случайные буквы, чередуя словари согласных и гласных букв.
В итоге получаются вот такие парольчики:
1 |
numax6fufaw, qewus2yufin, kiquw6ruyad ... |
Посчитаем число комбинаций, (силу) данного пароля. 6 согл. букв, 4 гласных и цифра, дают — 360 миллиардов комбинаций. Вполне приличное число. Можно добавить блокировку по ip после нескольких неудачных попыток, к примеру, на 30 мин. Тогда пароль станет проще украсть, чем угадать. И такой пароль не подобрать по словарю — только brute force.
Функция генерации пароля на php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function user_password($length = 11) { //объявим словари $ac[0] = 'bcdfghjkmnpqrstvwxyz'; $ac[1] = 'aeiou'; $ac[2] = '123456789'; //выберем цифирку для затравки $pass = $ac[2][mt_rand(0, 8)]; $length--; //для признака четности (чтобы выбрать нужный словарь) $n = 0; //пока не достигнем нужной длины, будем наращивать пароль while ($length > 0) { $dict = $ac[$n++ % 2]; $d_len = strlen($dict) - 1; $pass = $dict[mt_rand(0, $d_len)] . $pass . $dict[mt_rand(0, $d_len)]; $length -= 2; } //пароль готов! return $pass; } |
Ещё пара слов в заключении …
Функция простая, как видите. Да и идея довольно простая. Самое важное — это удобство пользователя. Пусть часть из них поменяет пароль на какой то свой, это уже говорит о том, что пользователю пароль важен, и у него достаточно терпения, чтобы позаботиться о своей безопасности. Большинство же из них доверяет свои пароли различным системам запоминания реквизитов, браузерам и т.п. Но даже если они введут этот пароль всего один раз (да и то перенесут его через буфер обмена), думаю, они оценят вашу заботу о них.