为什么将此随机密码标记为过于简单/系统化?


37

M1uG*xgRCthKWwjIjWc*010iSthY9buc根据passwdcracklib-check,如何将随机字符串检测为过于简单/系统化而不适合密码?在您的机器上尝试一下,看看

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

请注意,这不是我的密码,而是来自同一随机密码生成器的另一个随机生成的字符串,该字符串产生相同的结果。


3
它说M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
rici

原来只有某些版本将其检测为简单。有关更多信息,请参见slm的答案。
BeowulfNode42 2014年

您为什么不使用它/dev/urandom来生成密码?
devnull 2014年

@devnull-不确定您的想法,但是在我的A中添加了两种方法来生成密码。
slm

Answers:


59

由于cracklib是开源的,因此可以在源代码中找到答案。

“过于简单化/系统化”表示太多的字符以其字母邻居之一开头。因此,“ ab”或“ ba”被认为是不好的,但是“ ac”或“ ca”是可以的,因为省略了b。

2010年3月2日发布此补丁之前,它最多允许四个字符展现此特征。例如,“ bar12345”将失败,因为字符“ a”,“ 2”,“ 3”,“ 4”和“ 5”是前面字符的字母邻居。

slm在他的回答中发现M1uG*xgRCthKWwjIjWc*010iS可以,但M1uG*xgRCthKWwjIjWc*010iSt不能。让我们分析一下。这是cracklib-check认为是系统密码的指示的字符:

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

低于最大值4,但加上了t:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

由于T跟随S(似乎测试不区分大小写),因此将其推到极限之上。

补丁程序会更改最大限制,因此它取决于密码的总长度,以避免类似这样的误报。


1
010不应该算作3吗?很好的答案。
约翰五世

1
很好的答案,感谢您提供确切的源代码差异。顺便说一句,有什么理由将该文件称为fascist.c?
劳伦特2014年

@ this.lau_-我猜:en.wikipedia.org/wiki/Fascism
slm

谈论关于字符的“较小”和“较大”有点有趣,不是吗?好吧,尽管我知道这与ASCII值有关,但可能不太明显。-那么为什么不以更简单的方式解释它呢?角色的直接邻居或前任不得跟随其后。因此,既不允许“ ab”也不允许“ ba”,但是由于省略了b,所以“ ac”或“ ca”将是不允许的。
语法错误2014年

是否有一个原因不能使它小于或大于一个,但可以相同(Ww)?
Jeroen Vannevel 2014年

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

注意:我也尝试使用单引号而不是双quto,因为您正在使用*,它们可能会以奇怪的方式在您身上扩展。

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

根据@wingwing的非常好侦听,我们现在知道,如果> 4个字符彼此相邻,则使用的启发式方法就会被触发。引入了一个修补程序,该修补程序更改了该启发式方法,因此考虑了所考虑的密码的总长度,以消除这些误报。

结论?

根据我的一些有限测试,似乎这里有些奇怪的启发式方法在起作用。某些看起来不错的字符串正在将其绊倒。

如果您要对此进行整理,我建议您包装密码的生成和评估,然后在生成令人安心的密码后打破循环cracklib-check

或者至少我建议升级到较新的版本,其中包括@maxwing在其答案中提到的修复程序。

密码生成方式

普根

我还要补充一点,我通常会使用它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

我在带有Cracklib-2.8.9-3.1.src.rpm的CentOS 5.5上运行它。在任何一种情况下,这么长的随机字符串怎么可能太简单了?
BeowulfNode42 2014年

@ BeowulfNode42-不是。看起来您已经发现一个错误,或者至少是对实现的限制。
slm

奇怪。但是Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6在同一台机器上,像这样的字符串完全可以。
BeowulfNode42 2014年

1
双引号确实可以防止全局扩展。但是,如果字符串中包含美元符号,反引号等,则单引号仍然是一个更好的主意。–
Dennis

2
“引入了补丁...”还应该指出的是,所讨论的补丁绝不是最新的补丁(不同于听起来的方式),但是已经在2010
寄回了
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.