2017-01-20 4 views
1

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

function generatePassword() { 
    let password; 
    do { 
    password = generateRandomString(); 
    } while (!checkPasswordComplexity(password)); 
    return password; 
} 

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

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

Первый вопрос:

Является ли это на самом деле более безопасным, чем просто возвращает первый результат generateRandomString?

Второй вопрос:

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

ответ

0

Чтобы начать отвечать на мои собственные вопросы:

Первый вопрос:

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

Второй вопрос:

Если вам требуется, скажем, 2 специальные символы в пароле длиной 10, затем случайным образом выбрать 2 символов из специального набора символов, а затем поместить их в случайных позициях в конечном пароль. Затем заполните оставшиеся 8 позиций случайными символами из всего набора символов.