Символы, которых следует избегать в автоматически сгенерированных паролях - PullRequest
21 голосов
/ 11 сентября 2008

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

il10o8B3Evu! [] {}

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

В качестве вопроса для гонщика я бы хотел, чтобы мои пароли были "словными", у вас есть для этого предпочтительный алгоритм?

Спасибо:)

Ответы [ 12 ]

38 голосов
/ 11 сентября 2008

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

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

!#%+23456789:=?@ABCDEFGHJKLMNPRS
TUVWXYZabcdefghijkmnopqrstuvwxyz

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

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

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

9 голосов
/ 11 сентября 2008

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

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

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

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

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

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

Удачи!

6 голосов
/ 11 сентября 2008

Чтение Выбор безопасных паролей .

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

3 голосов
/ 15 сентября 2008

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

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

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

Es4tU$sA6
wH@cY8Go2

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

3 голосов
/ 11 сентября 2008

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

3 голосов
/ 11 сентября 2008

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

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

Все еще в основном читабельно для человека.

2 голосов
/ 28 октября 2008

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

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

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

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

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

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

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

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

2 голосов
/ 11 сентября 2008

Для удобочитаемых паролей я недавно использовал скрипт 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;
}
1 голос
/ 11 марта 2012
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;

}
1 голос
/ 13 мая 2010

Если вы заинтересованы в создании произносимых паролей, есть порт C # по адресу http://www.hoogervorst.ca/arthur/?attachment_id=1708

В коде вы найдете полезные ссылки, чтобы узнать больше. http://www.multicians.org/thvv/gpw.html

Удачи. Джеймс

...