Чому цей випадковий пароль позначено, що він занадто спрощений / систематичний?


37

Яким чином випадковий рядок визначається M1uG*xgRCthKWwjIjWc*010iSthY9bucяк занадто спрощений / систематичний для пароля відповідно до passwd та cracklib-check ? Спробуйте це на своїй машині і подивіться

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

Зауважте, що це не мій пароль, а інша випадково генерована рядок з того самого генератора випадкових паролів, який дає такий же результат.


3
У ньому сказаноM1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
rici

Виявляється, лише деякі версії виявляють це як просте. Дивіться відповідь 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" є алфавітними сусідами попередніх символів.

slm з'ясував у своїй відповіді, що M1uG*xgRCthKWwjIjWc*010iSце нормально, поки M1uG*xgRCthKWwjIjWc*010iStце не так. Давайте проаналізуємо. Ось символи, на які cracklib-check вважає, є ознаками систематичного пароля:

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

що нижче максимуму чотирьох, але додаючи t:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

підштовхує його до межі, оскільки Т слідує за S (здається, тест є нечутливим до регістру).

Патч змінює максимальну межу, так що це залежить від загальної довжини пароля, щоб уникнути помилкових позитивних результатів, як це.


1
Чи не слід 010 вважати вже 3? Хоча чудова відповідь.
Івана В.

1
Відмінна відповідь і спасибі за надання точного вихідного коду. До речі, чи є причина, чому цей файл називається fascist.c?
Лоран

@ this.lau_ - я здогадуюсь: en.wikipedia.org/wiki/Fascism
slm

Дещо смішно говорити про "менших" та "більших" стосовно персонажів, ні? Хоча я знаю, що мова йде про значення ASCII, це може бути не надто очевидно. - То чому б не пояснити це більш спрощеним способом? Жоден персонаж не повинен наслідувати його прямого сусіда чи попередника. Отже, ні "ab", ні "ba" не дозволено, але "ac" або "ca" було б, оскільки b опущено.
синтаксичний помилок

Чи є причина, чому вона не може бути однієї меншої чи більшої, але може бути однаковою ( Ww)?
Jeroen Vannevel

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

ПРИМІТКА: Я б спробував це з одинарними цитатами, а не з подвійними qutoes, оскільки ви маєте справу з *ними, вони можуть на вас розширитись дивним чином.

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 згадує у своїй відповіді.

Альтернативи генератора паролів

pwgen

Додам також, що я зазвичай використовую pwgenдля генерування паролів. Це може бути корисним і для вас.

$ pwgen -1cny 32
iWu0iPh8aena9raSoh{v6me)eh:eu6Ei
урадонний

Ви також можете використовувати трохи сценаріїв магії з 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

Я працював на CentOS 5.5 з cracklib-2.8.9-3.1.src.rpm. В будь-якому випадку, хоча як така довга випадкова рядок може бути занадто простою?
BeowulfNode42

@ BeowulfNode42 - це не так. Схоже, ви виявили помилку або, принаймні, обмеження на реалізацію.
slm

Дивно. І все ж такі ж струни Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6є цілком в порядку на одній машині.
BeowulfNode42

1
Подвійні лапки роблять запобігти розширенню Глобо. Одиночні котирування все-таки є кращою ідеєю, хоча, якщо рядок містить знаки долара, задній план тощо,
Dennis

2
"Патч був введений ..." Слід також зазначити, що відповідний патч аж ніяк не є останнім (на відміну від того, як це може звучати), але він вже був відправлений ще в 2010 році :)
syntaxerror
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.