Подтвердить что ты не робот

Персонажи, которых следует избегать в автоматически сгенерированных паролях

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

il10o8B3Evu! [] {}

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

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

Спасибо:)

4b9b3361

Ответ 1

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

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

!#%+23456789:[email protected]
TUVWXYZabcdefghijkmnopqrstuvwxyz

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

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

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

Ответ 2

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

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

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

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

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

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

Удачи!

Ответ 3

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

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

Ответ 4

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

  • ЛМН% Рабочий стол
  • р @на & b0y32H @т

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

Ответ 5

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

Ответ 6

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

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

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

Es4tU$sA6
[email protected]

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

Ответ 7

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

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;
}

Ответ 8

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

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

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

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

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

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

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

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

Ответ 9

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

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

Ответ 10

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

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

Ответ 12

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;

}