Проверка на соответствие пароля критериям безопасности (сложности)

krafty

new Exception
Проверка на соответствие пароля критериям безопасности (сложности)

Допустим существуют такие критерии:
1. длина в определенном интервале
2. по порядку возврастания или убывания в пароле не должно быть например более 3 цифр подряд ("123456","321asd" - не подходит)
3. некоторые запрещенные символы и символы национальных алфавитов не должны присутствовать
-и т.д.

Сразу же напрашивается вариант с регулярными выражениями. В связи с этим вопрос: можно ли на регулярке замутить второй пункт.
 

krafty

new Exception
>несовсем понятно
цифры в порядке возрастания или убывания. т.е. 159 можно, 12 можно, а 456 или 654 нельзя

на мысль не натолкнешь. че здесь юзать: если квантификаторы, то как сделать чтобы не проходили строки с 123 или ааа.
не могу понять:
\d{3} - по идее три или более идущие подряд цифры. а как же сделать, чтобы искало не любые цифры, а одинаковые.....
 

sakon

П..и.н..ок
2. (.)\\1{2,}
Это если 111 или 222 или ааа

1. Регулярки здесь непричем. Получай регуляркой в строку свои цифры и проверяй последовательно они идут или в разбивку.
 

krafty

new Exception
спасибо.
вот нашел решение без использования регулярных выражений
http://forum.dklab.ru/php/advises/FunktsiyaProveryaetHoroshyEtoParolIliNet.html
 

white phoenix

Новичок
Пришла идея в голову такая:
ставим $h = 0;
берем range("a-z") и если в пароле только такие символы то останавливаемся, если нет то $h++; и берем range("a-Z") и т.д. доходим до спец. символов.
$d = pd($h,strlen($password));
$k = 3;
$t = $d/($k*pow(10,6));
Где d - максимальное число попыток нужных для подбора.
k - коэф. произоводительности подбирающей системы, у меня на машине (p4 и 512 памяти) коэф. 3 при подборе через PasswordsPro (быстрее я не видел).
t - максимальное время подбора
таким образом узнаем сколько требуется времени для подбора, и от него пляшем. но не стоит забывать и о том тесте (dklab.ru).

-~{}~ 16.11.05 06:00:

Лучше вот так:
PHP:
$password = "qwerty";
$charclasses = array();
$charclasses[] = range("a","z");
$charclasses[] = range("0","9");
$charclasses[] = range("A","Z");
$heap = array();
$h = -1;
foreach($charclasses as $i=>$charclass)
{
 $heap = array_merge($heap,$charclass);
 if (strlen(strtr($password,join(NULL,$heap),NULL)) > 0)
 {
  $h++;
 }
 else {break;}
}
function d($c,$l)
{
 $d = 0;
 while($l >= 0)
 {
  $d += pow($c,$l);
  $l--;
 }
 return $d;
}
$k = 3;
$s = $k*pow(10,6);
$d = array();
$d[0] = d(strlen(join(NULL,$charclasses[$h])),strlen($password));
$d[1] = d(strlen(join(NULL,$charclasses[$h-1])),strlen($password));
$d = round(($d[0] + $d[1]) / 2);
$t = $d/$s;
echo $t;
т.е. мы берем среднее, между временем затрачиваемым СБ (системой подбора) используя символьный класс, в который умещаются все символы пароля, и между временем затрачиваемым СБ используя символьный класс в который умещается только часть символов пароля.
 

pauk

Новичок
А не проще ли генерировать пароль?
Ведь в языке максимум 50 тыс слов. Большинство слов являются "надежным" паролем.
А при компьютерном подборе найти пароль не сложно.
 

white phoenix

Новичок
тема создана "_Проверка_ на соответствие...". У многих людей плохая память, и им сложно запомнить даже 5-6 цифр не говоря уж у латинице.. по-этому нужно дать им возможность самим придумать пароль.
Кому не лень, сделайте матрицу
[X][Y] = array("символ1","символ2")...

где [0][0] - array("~","`");

а я сделаю скрипт который будет считать дистанцию, и на всякие qwerty и qaz wsx орать матом.
 
Сверху