为什么这个随机密码被标记为过于简单/系统?

为什么这个随机密码被标记为过于简单/系统?

根据以下内容,随机字符串如何M1uG*xgRCthKWwjIjWc*010iSthY9buc被检测为对于密码来说过于简单/系统密码破解库检查?在你的机器上试试看

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

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

答案1

由于cracklib是开源的,答案可以在源代码

“过于简单化/系统化”意味着有太多字符前面是其字母顺序邻居之一。因此“ab”或“ba”被认为是坏的,但“ac”或“ca”是可以的,因为省略了b。

此补丁来自 2010-03-02,它最多允许四个字符表现出这种特征的。例如,“bar12345”将失败,因为字符“a”、“2”、“3”、“4”和“5”是前面字符的字母邻居。

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

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

它低于四个最大值,但添加了 t:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

将其推至极限之上,因为 T 跟随 S(看起来测试不区分大小写)。

该补丁更改了最大限制,使其取决于密码总长度,以避免此类误报。

答案2

在 Fedora 19 上

当我运行它时,我就OK了。我使用的是 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

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

CentOS 5 和 6

在 CentOS 6 上尝试你的示例很好,得到了 OK,但它确实失败了,正如你在 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如果我将最后一个字符从 a 更改为表示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

基于 @太平鸟的非常好的侦查,我们现在知道,如果超过 4 个字符彼此太相邻,那么所使用的启发式就会出错。 A补丁被引入这改变了这种启发式方法,以便考虑所考虑的密码的整体长度来消除这些误报。

结论?

根据我的一些有限的测试,似乎这里有一些奇怪的启发法在起作用。某些看似正常的字符串却会出现问题。

如果您尝试对此进行编码,我建议包装密码的生成和评估,然后在生成安抚密码后跳出循环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

相关内容