2008-09-11 3 views
21

Мне нужно сгенерировать несколько паролей, я хочу избежать символов, которые могут быть смущены друг для друга. Есть ли окончательный список символов, которых я должен избегать? мой текущий списокСимволы, которых следует избегать в автоматически сгенерированных паролях

il10o8B3Evu! [] {}

Есть ли другие пары символов, которые легко спутать? для специальных персонажей я собирался ограничиться теми, у кого есть числовые клавиши, хотя я знаю, что это зависит от вашей национальности на клавиатуре!

Как вопрос наездника, я хотел бы, чтобы мои пароли были «wordlike», у вас есть предпочтительный алгоритм для этого?

Спасибо :)

+4

Отличный пост. "il10o8B3Evu! [] {}" тоже! :-) – 2008-10-28 05:05:55

+0

Вы хотите, чтобы пароль был текстовым и получил 18 голосов. Людям, которых вы понимаете, концепция безопасности - это сделать пароль, который трудно догадаться. – Paparazzi 2013-07-23 02:14:49

+0

FWIW, я заканчиваю произносить все мои пароли, независимо от того, как они начинаются с начала. Только что сгенерированный `PJLUB7Cy` -« PJ »(например, то, что вы носите, чтобы спать),« LUB »(« lub my kitteh »),« 7 »,« Sigh ». Если вы заставите их набирать их снова и снова, они придерживаются. – Amanda 2014-04-10 12:02:09

ответ

34

Вот персонажи, которые использует Стив Гибсон для своей системы "Perfect Paper Password".Они «символы, чтобы позволить», а не «символов, чтобы избежать», но они, кажется довольно разумным для того, что вы хотите:

Стандартный набор из 64 символов

!#%+23456789:[email protected] 
TUVWXYZabcdefghijkmnopqrstuvwxyz 

Больший набор из 88 символов

!"#$%&'()*+,-./23456789:;<=>[email protected] 
PRSTUVWXYZ[\]^_abcdefghijkmnopqrstuvwxyz{|}~ 

Для произносимых паролей я не знаком с алгоритмами, но вы можете взглянуть на APG и pwgen в качестве отправной точки.

9

Мой предпочтительный метод, чтобы получить список слов из 3, 4 и 5 букв слова. Затем выберите по крайней мере 2 из них и поместите произвольное 2-значное число или специальный символ (% & * @ # $) между каждым словом. Если вы хотите, чтобы вы могли зарабатывать до одного символа на одно слово в случайном порядке.

В зависимости от требований к прочности вы в конечном итоге с легко запоминающимися и общаться пароли, как:

  • лимон% стол
  • бумаги & boy32hat

Имейте в виду, вы иногда получаете интересные или несоответствующие комбинации слов (я позволю вам использовать свое воображение). У меня обычно есть кнопка, позволяющая генерировать новый пароль, если представленный не нравится.

Как правило, используются только символы, которые люди обычно знают для имени. На стандартной клавиатуре США я бы избегал ~ `'/ \^

Думаю, это больше отвечало на ваш вопрос всадника, чем на ваш главный вопрос. ..

Удачи вам!

+1

Это также крайне неуверенно, так как инструменты для взлома паролей точно используют комбинацию словарных слов и случайных специальных символов для угадывания пароля. – Laurent 2008-10-02 03:43:36

3

Чтобы добавить к ответу Джима, вы также можете использовать список слов и случайно заменить определенные символы символами (@ для A, 0 (ноль) для O или 5 для S) и/или удалить гласные от слов.

  • ЛМН% Стол
  • р @ на & b0y32H @ т

Тем не менее в основном для чтения человеком.

3

В качестве другого варианта вы можете использовать моноширинный/терминальный шрифт, например курьер, для печати паролей. Подобные символы должны быть гораздо более различимыми.

6

Прочитано Choosing Secure Passwords.

Один интересный лакомый кусочек оттуда: для более надежных паролей, убедитесь, что некоторые цифры и специальные символы появляются посередине. Программы крекинга проверяются на них в начале и заканчиваются раньше.

1

Мне не нравится подход, основанный на словах. Например, в/usr/share/dict/words на OSX есть 5110 4-символьных слов. Использование двух из них с символом seperator дает ~ 600M комбинаций. Но если вы использовали набор символов непосредственно с сильным генератором случайных чисел, у вас было бы 88^9 возможных паролей, 3.16e + 17 комбинаций.

В любом случае вероятная атака на эту систему будет против генератора случайных чисел, поэтому убедитесь, что вы используете криптографически сильную. Если вы используете стандартную функцию rand PHP, она будет атакована путем регистрации и сброса тысяч паролей, чтобы пробовать состояние RNG, а затем предсказать оставшееся состояние RNG, что уменьшит количество возможных паролей, которые должен испытывать атакующий.

2

Для человекочитаемых паролей я недавно использовал скрипт PHP, очень похожий на приведенный ниже. Он работал хорошо. Конечно, пароли не будут невероятно безопасными (поскольку они подвержены атакам со словарем), но для запоминаемых или, по крайней мере, удобочитаемых паролей это работает хорошо. Однако эту функцию нельзя использовать как-есть, это больше для иллюстрации, чем что-либо еще.

function generatePassword($syllables = 2, $use_prefix = true) 
{ 

    // Define function unless it is already exists 
    if (!function_exists('arr')) 
    { 
     // This function returns random array element 
     function arr(&$arr) 
     { 
      return $arr[rand(0, sizeof($arr)-1)]; 
     } 
    } 

    // Random prefixes 
    $prefix = array('aero', 'anti', 'auto', 'bi', 'bio', 
        'cine', 'deca', 'demo', 'dyna', 'eco', 
        'ergo', 'geo', 'gyno', 'hypo', 'kilo', 
        'mega', 'tera', 'mini', 'nano', 'duo', 
        'an', 'arch', 'auto', 'be', 'co', 
        'counter', 'de', 'dis', 'ex', 'fore', 
        'in', 'infra', 'inter', 'mal', 
        'mis', 'neo', 'non', 'out', 'pan', 
        'post', 'pre', 'pseudo', 'semi', 
        'super', 'trans', 'twi', 'vice'); 

    // Random suffixes 
    $suffix = array('dom', 'ity', 'ment', 'sion', 'ness', 
        'ence', 'er', 'ist', 'tion', 'or', 
        'ance', 'ive', 'en', 'ic', 'al', 
        'able', 'y', 'ous', 'ful', 'less', 
        'ise', 'ize', 'ate', 'ify', 'fy', 'ly'); 

    // Vowel sounds 
    $vowels = array('a', 'o', 'e', 'i', 'y', 'u', 'ou', 'oo', 'ae', 'ea', 'ie'); 

    // Consonants 
    $consonants = array('w', 'r', 't', 'p', 's', 'd', 'f', 'g', 'h', 'j', 
         'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'qu'); 

    $password = $use_prefix?arr($prefix):''; 
    $password_suffix = arr($suffix); 

    for($i=0; $i<$syllables; $i++) 
    { 
     // selecting random consonant 
     $doubles = array('n', 'm', 't', 's'); 
     $c = arr($consonants); 
     if (in_array($c, $doubles)&&($i!=0)) { // maybe double it 
      if (rand(0, 2) == 1) // 33% probability 
       $c .= $c; 
     } 
     $password .= $c; 
     // 

     // selecting random vowel 
     $password .= arr($vowels); 

     if ($i == $syllables - 1) // if suffix begin with vovel 
      if (in_array($password_suffix[0], $vowels)) // add one more consonant 
       $password .= arr($consonants); 

    } 

    // selecting random suffix 
    $password .= $password_suffix; 

    return $password; 
} 
3

Для международного клиента несколько лет назад, я должен был генерировать случайные, безопасные пароли, которые затем были отправить-слиты в документы моего клиента и отправленные по почте получателям в 40 странах мира. Не зная, какой шрифт должен использоваться в документах, я использовал список персонажей, таких как Steve Gibson 64-character, чтобы устранить путаницу между похожими глифами.

Чтобы сделать результирующие пароли выполнимыми и, следовательно, легче запомнить, я сочетал согласные и гласные вместе с некоторыми согласными орграфами (sh, th, wh и т. Д.), Добавленными в микс.

Чтобы уменьшить вероятность неуместных или оскорбительные слова от формирования (на английском языке или языках получателей), я ограничил пробеги последовательных альфа-символов до двух, с цифрами или знаками пунктуации betwee:

Es4tU$sA6 
[email protected] 

Оглядываясь назад на мой метод, я понимаю, что есть место для улучшения алгоритма неадекватности. Используя только что приведенные выше правила, некоторые оскорбительные слова теперь возможны, когда вместо цифр используются цифры и пунктуация.

1

Исходный подход может состоять в том, чтобы генерировать в основном действующие английские слоги, смешивать их, а затем вводить преобразование text-> l33t. Проделана работа над грамматиками естественного языка поколений, поэтому один из них может помочь.

E.g. ah ul ing - все действующие слоги или близко к ним ... смешайте их -> Ингулах ... l33t it -> 1ngu4h. Это лучше всего там? Неа. Но, по крайней мере, это полупроницаемость (если вы говорите l33t) и более безопасно.

2

В моей (электротехнической, технической) аспирантуре все учетные записи компьютеров были инициализированы паролями, которые, я полагаю, были сгенерированы стандартной утилитой linux. Они состояли из трех случайных слогов с тремя строчными буквами в каждом слоге. Результат был достаточно безопасным (порядка миллиардов возможных комбинаций), но таким образом произносил, что я все еще использую некоторые из этих паролей более десятилетия спустя. Пример Джеймса - отличная демонстрация этого.

Комментарий к паролям в целом, от профессиональной сети безопасности: они ужасны, по нескольким причинам, в том числе:

  • Вообще легко ломаются, либо через социальную инженерию или с помощью программного обеспечения атаки, особенно если вы знаете что-нибудь о вашей цели.

    Пример 1: Мне недавно потребовалось пересмотреть технический документ, защищенный паролем. Глядя на дату, я знал, кто наш технический писатель в то время находился, набрал первое слово, которое вошло мне в голову, и сразу же разблокировал документ.

    Пример 2: Стандартные программы для взлома паролей позволяют взлому указывать набор правил, которые действуют в пользовательском словаре. Трудно заменить некоторые буквы на $ ymb01 $ или перевести на 1337 и т. Д.

  • «Безопасные» пароли - нет. Учитывая огромное количество паролей, которые нужно запомнить большинству людей, наиболее распространенный способ «запомнить» «сильный» пароль, такой как «a4 $ N! 8_q», - это записать его на листе бумаги (или, что еще хуже, сохранить его в текстовый файл). 'Достаточно.

Если вам нужна действительно безопасной аутентификации, многофакторный (или два-фактора) является механизмом отрасли принято. «Два фактора» обычно имеют то, что у вас есть (например, карта доступа) и что-то, что вам знает, что позволяет ему (например, PIN-код). Ни один из них не работает без другого - вам нужны оба.

С другой стороны, обратите внимание на уровень безопасности, который вам действительно нужен. Что вы защищаете? Как плохо «плохие парни» хотят его получить, и каковы последствия, если они это сделают? Скорее всего, «Его @ Секрет!» более чем достаточно. :-)

1
function random_readable_pwd($length=12){ 
    // special characters 
    $sym="!\"§$%&/()={[]}\,.-_:;@>|"; 

    // read words from text file to array 
    $filename="special.txt"; 
    if (!file_exists($filename)) { die('File "'.$filename.'" is not exists!'); } 
    $lines = file($filename); 
    foreach ($lines as $line_num => $line) { 
     $line=substr($line, 0, -2); 
     $words[].=$line; 
    } 

    // Add words while password is smaller than the given length 
    $pwd = ''; 
    $ran_date=date("s"); 
    while (strlen($pwd) < $length){ 
     $r = mt_rand(0, count($words)-1); 
     // randomly upercare word but not all in one time 
     if ($ran_date % 3 == 0) $words[$r]=ucwords($words[$r]); 
     $pwd .= $words[$r]; 
     //randomly add symbol 
     if ($ran_date % 2 == 0) $pwd .= $sym{mt_rand(0,strlen($sym))}; 
     $ran_date++; 
    } 

    // append a number at the end if length > 2 and 
    // reduce the password size to $length 
    $num = mt_rand(1, 99); 
    if ($length > 2){ 
     $pwd = substr($pwd,0,$length-strlen($num)).$num; 
    } else { 
     $pwd = substr($pwd, 0, $length); 
    } 

    return $pwd; 

}