Почему этот случайный пароль помечен, говоря, что он слишком упрощенный / систематический?

37

Как случайная строка M1uG*xgRCthKWwjIjWc*010iSthY9bucопределяется как слишком упрощенная / систематическая для пароля в соответствии с passwd и cracklib-check ? Попробуйте на своей машине и посмотрите

echo "M1uG*xgRCthKWwjIjWc*010iSthY9buc" | cracklib-check

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

BeowulfNode42
источник
3
Это говоритM1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
Ричи
Оказывается, только некоторые версии обнаруживают это как простое. Смотрите ответ slm для получения дополнительной информации по этому вопросу.
BeowulfNode42
Почему бы вам не использовать вместо этого /dev/urandomпароль?
devnull
@devnull - не уверен, что вы имели в виду, но добавил 2 метода в мой A о том, как генерировать пароли.
SLM

Ответы:

59

Поскольку cracklib является открытым исходным кодом, ответ можно найти в исходном коде .

«Слишком упрощенный / систематический» означает, что существует слишком много символов, которым предшествует один из их алфавитных соседей. Следовательно, "ab" или "ba" считаются плохими, но "ac" или "ca" в порядке, поскольку b опущено.

До этого патча от 2010-03-02 , он допускает не более четырех персонажей, которые проявляют эту черту. Например, «bar12345» потерпит неудачу, потому что символы «a», «2», «3», «4» и «5» являются алфавитными соседями предыдущих символов.

Слм узнал в своем ответе, что M1uG*xgRCthKWwjIjWc*010iSвсе в порядке, а M1uG*xgRCthKWwjIjWc*010iStпока нет. Давайте проанализируем. Вот символы, которые считает cracklib-check указанием на системный пароль:

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

который ниже максимума четырех, но добавив т:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

толкает его выше предела, так как T следует за S (кажется, что тест нечувствителен к регистру).

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

свиристель
источник
1
Не должно ли 010 считаться уже 3? Отличный ответ, хотя.
Джон В.
1
Отличный ответ и спасибо за предоставление точного исходного кода diff. Кстати, есть ли причина, по которой этот файл называется fasist.c?
Лоран
@ this.lau_ - я думаю: en.wikipedia.org/wiki/Fascism
slm
Несколько забавно говорить о «меньших» и «больших» по отношению к персонажам, нет? Ну, хотя я знаю, что это о значениях ASCII, это может быть не слишком очевидно. - Так почему бы не объяснить это более упрощенным способом? Ни один персонаж не должен следовать его непосредственному соседу или предшественнику. Следовательно, ни «ab», ни «ba» не допускаются, но «ac» или «ca» могут быть, поскольку «b» опущен.
syntaxerror
Есть ли причина, по которой он не может быть меньше или выше, но может быть одинаковым ( Ww)?
Йерун Ванневел
31

На Fedora 19

Когда я запускаю его, я в порядке. Я на Fedora 19.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK

Вот информация о версии:

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.22
Release     : 3.fc19

ПРИМЕЧАНИЕ: я бы попробовал сделать это с одинарными кавычками, а не с двойными, так как вы имеете дело с ними *, они могут быть странным образом расширены для вас.

CentOS 5 & 6

Попробовать ваш пример на CentOS 6 было хорошо, получил ОК, но он потерпел неудачу, как вы описали на CentOS 5.9.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: it is too simplistic/systematic

Информация о версии:

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.9                  
Release     : 3.3

Жук?

То, с чем вы столкнулись, может показаться ошибкой. Если вы возьмете свою строку и введете в cracklib-checkнее все больше и больше строк, вы заметите, что когда вы доберетесь до 26-го символа, он начнет давать сбой:

# 25    
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iS"
M1uG*xgRCthKWwjIjWc*010iS: OK

# 26
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSt"
M1uG*xgRCthKWwjIjWc*010iSt: it is too simplistic/systematic

Более подробно об этом, если я заменю последний символ с, tчтобы сказать, что vон продолжает работать.

$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSvhY9b"
M1uG*xgRCthKWwjIjWc*010iSvhY9b: OK

Так что казалось бы, что в версии cracklib-checkзацикливается на подстроке Sth.

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

$ cracklib-check <<<"jIjc*010Sth"
jIjc*010Sth: it is too simplistic/systematic

Эта же строка вызывает проблемы в Fedora 19 и CentOS 6!

ОБНОВЛЕНИЕ № 1

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

Выводы?

Основываясь на некоторых моих ограниченных тестах, может показаться, что здесь есть какая-то странная эвристика. Определенные строки, которые, казалось бы, были бы в порядке, приводят в действие его.

Если вы пытаетесь систематизировать это, я бы предложил обернуть процесс генерации и оценки пароля, а затем выйти из цикла после того, как был сгенерирован пароль, который убывает cracklib-check.

Или, по крайней мере, я бы предложил перейти на более новую версию, которая включает исправления, которые @maxwing упоминает в своем ответе.

Пароль Gen Альтернативы

PWGen

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

$ pwgen -1cny 32
iWu0iPh8aena9raSoh{v6me)eh:eu6Ei
urandom

Вы также можете использовать небольшую магию сценариев tr, /dev/urandomи foldполучить очень качественный случайный пароль.

$ tr -dc '[:graph:]' </dev/urandom | fold -w 32 | head -n 1
;>$7\`Hl$=zn}R.b3h/uf7mY54xp}zSF

Команда foldможет контролировать длину. В качестве альтернативы вы можете сделать это тоже:

$ echo $(tr -dc '[:graph:]' </dev/urandom | head -c 32)
/_U>s[#_eLKAl(mrE@oo%X~/pcg$6-kr
SLM
источник
Я запускал его на CentOS 5.5 с cracklib-2.8.9-3.1.src.rpm. В любом случае, как такая длинная случайная строка может быть слишком простой?
BeowulfNode42
@ BeowulfNode42 - это не так. Похоже, вы нашли ошибку или, по крайней мере, ограничение реализации.
SLM
Странный. Тем не менее, строка вроде Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6отлично на той же машине.
BeowulfNode42
1
Двойные кавычки делают предотвратить расширение Глобо. Одиночные кавычки - все еще лучшая идея, если строка содержит знаки доллара, обратные кавычки и т. Д.
Деннис
2
«Патч был представлен ...» Следует также отметить, что данный патч ни в коем случае не является недавним (в отличие от его звучания), но уже был отправлен еще в 2010 году :)
syntaxerror