最近,我在Twitter上看到了以下屏幕快照,描述了一个显然很糟糕的密码策略:



我不知道密码强度会更糟吗?根本没有密码策略还是密码策略不正确(如屏幕截图中所述)?

评论

评论不作进一步讨论;此对话已移至聊天。

#1 楼

问题是:更糟糕的是什么?

使用您发布的策略,可能的密码小于64⁸(〜2.8 *10¹⁴)。实际上,很多密码可能是[az] * 6 [0-9] [特殊字符](例如aabaab1!)和类似的密码。

所有可能的具有相同字符且长度短的密码比8多的只是64⁷+64⁶+64⁵+ ...,约为4.5 *10¹²。那比长度为8的密码少了很多,因此允许它们使用不会增加太多安全性。 (允许使用更长的密码显然会大大提高安全性)

毫无疑问,许多人也会使用错误的密码。但是攻击者不能确定这一点。另外,有些人会使用更好的密码。

没有任何策略,攻击者永远无法确定破解密码的难度。如果您给我一个数据库的密码哈希值,我可能会尝试破解它。但是如果没有结果,一段时间后我可能会停下来。有了该策略,我可以确定经过64 ^ 8次尝试后,我将拥有所有密码。

我会说,错误的密码策略会更糟。但这取决于攻击情况。

带有密码散列的转储,没有密码策略,很容易破解任何密码,但更难破解大多数密码。
像给定的策略一样,破解所有密码更容易,但破解第一个密码则更难,

如果您担心的是破解自己的密码有多难,没有任何密码您可以根据需要使用安全的20个字符的随机密码。实施该策略后,您将不得不使用不安全的密码。 (在实践中,密码的存储方式等等具有更重要的意义,但这不在本文的讨论范围之内)。因此,作为网站/服务的用户,错误的密码策略会更糟。

如果从组织的角度来看,错误的密码策略比没有密码的情况要糟得多。

没有密码策略就意味着,可能没有人考虑过(不是很好,他们没有考虑安全性,但是还可以...)

但是错误的密码策略就意味着:有人想到了,就来了那个废话。这意味着他们可能对安全性一无所知。

最后,如果您可以实施错误的密码策略,那么您也可以实施良好的密码策略,因此永远不会有借口使用错误的密码策略。只需将策略更改为“密码必须至少包含8个字符”就可以大大提高安全性,而且并不难。

评论


评论不作进一步讨论;此对话已移至聊天。

–Rory Alsop♦
16年7月27日在14:40

无法查看聊天记录

– Wes
18 Mar 5 '18 at 13:11

#2 楼


现在我想知道密码强度更差的是什么。根本没有密码策略或图片中的密码策略很差吗?

您提到的密码强度要求绝对弊大于利,尤其是最大长度。

他们可能正在使用非常旧的,不安全的哈希例程。 (因此为最大长度)
在某些区域,这比安全性更方便。
(以纯文本表示密码时,空格不起作用,
不区分大小写,因此没有大写字母-锁定支持呼叫)
其他项目只是愚蠢的。


详细的故障信息

您的密码必须:

正好八个字符长


我唯一能看到的合理解决方案是系统正在运行旧式哈希方案,该方案将截断除前8个字符外的所有字符。
例如,默认情况下,Solaris 10用户帐户密码使用了这种方案,因此passwordSup@rsecur☺之类的密码被截断为password! Solaris 11的默认版本没有此缺点。
在这种情况下,


开发人员应致力于向更好的哈希例程(支持密码长度超过8的哈希例程)进行迁移。 br />

直到推出这样的修复程序,最大长度才是合理的。


在任何其他情况下,这肯定是愚蠢的事情最大长度这么短。



至少包含一个字母和一个数字。


至少包含一个特殊字符以下字符组成的字符:...




这些是必须的,因为它们的最大长度很短。我确定您可以理解,使用短密码时需要使用这种原始方法来增加熵。


注意:密码不区分大小写。


尽管这对用户来说很方便(不必担心大写锁定),但从不建议这样做,因为它总是会降低密码的熵。在这种情况下,由于最大长度为8个字符,因此更不建议这样做。
应该解决此问题,但由于现有用户已经习惯了这种不安全的配置,因此这对他们来说将是一个麻烦! />
不包含任何空格

我看到的唯一原因是他们是否以纯文本形式显示密码。 (例如,忘记密码电子邮件或技术支持查询)按照大多数标准(糟糕的(不安全的)软件设计)。
更好的策略是禁止查询并仅允许对其进行更改。实际上,强烈建议使用强(慢)密码哈希,例如BCrypt,它本质上禁止将查找作为其核心设计的一部分。


不要以?!开头/>


很奇怪,但不是密码熵的重要杀手。


不是以三个相同的字符开头

/>
嗯,我不太担心这个问题,但是我想知道为什么他们只从头开始。 8个字符的任何地方的3个相同/相邻字符都比它的弱。


该密码必须与您之前的5个密码不同。


对于这个问题,可能有一个专门的安全堆栈交换问题。这是网上银行和某些其他身份验证系统的常见做法。
我认为这还与强制性的计划密码更改结合在一起。可能的结果是:

用户将写下他们的密码而不是使用他们的内存,或者,用户将选择一个简单的模式。

但是,如果密码更改不是强制性的,那么唯一的问题是

必须继续存储未使用密码的哈希值以进行比较。

尽管这不是一个严重的问题,但人们对此并不满意。

评论


评论不作进一步讨论;此对话已移至聊天。

–Rory Alsop♦
16年8月2日在13:46

#3 楼

像这样的坏策略总比没有坏。

此策略意味着通常使用'123'的用户现在将拥有更安全的密码,但是仍然很弱。
它也表示使用“ fzFEZ#5 $ 3rt4564ezezRTyht”(随机生成)或“ cat j_umps over the brown paint wall412”(强熵)之类的人现在的密码要弱得多。

无论如何,使用弱密码的人在这种情况下也将遭到黑客攻击(因为此限制性和弱策略,并且攻击者能够设置特定的攻击规则)。但是通常使用强密码的人也会这样做。

,换句话说,它的安全性要差得多。
没有任何政策,只有使用弱密码的人才容易受到攻击。现在每个人都很脆弱。

#4 楼

在我看来,最好不要使用任何原因。

这些策略使人们倾向于在此处写下密码,并将其粘贴到监视器等上。 (密码比提供的密码有什么安全性?)
这些规则很容易推论,并且(通过使用此类类型的密码盒)甚至可以通知任何潜在的入侵者。 (就像给我们想要的人提供密码规则的“规则”,这样他们只需要进行有限的设置即可。)
通过延长密码的熵,可以显着提高密码的熵。在如今的8中,攻击很容易使攻击者可以使用移动设备对密码进行暴力破解。
不区分大小写但不检查大小写的规则表明密码以纯文本格式显示(即使存储是经过加密的,大多数情况下,加密密钥与数据一起存储,这实际上意味着以明文形式存储数据。)
对于大多数应用程序,不同的架构可以提供更高的安全性,而根本不需要密码,例如:


2因素身份验证。次级设备身份验证。
智能卡身份验证。



这些策略似乎是由不完全了解密码威胁如何影响您的系统的人想到的。相反,他们只是出于某种原因在“所有框子”中打勾。

被说成是他们这样做的真实原因。有些认证和使用要求其中一些认证和实施(例如卫生部门或某些政府使用)。

评论


如果您需要在显示器上张贴一些东西:从一个容易记住的东西(只有您自己知道)和随机序列中创建一个密码。发布到监视器上的随机序列。外面的黑客看不到该笔记。希望您内心没有黑客能够弄清楚您容易记住的部分。这不是一个好的解决方案,但是比您的同事可以使用的完整密码要好得多。

– gnasher729
16年8月3日在15:11

这是个坏建议。最好不要写下密码永远。并且,如果将它们记下来,请勿将其与使用过的机器一起存储。 (就像贴在屏幕上一样)。外部黑客与内部黑客之间没有区别,社交工程是获取密码的首选方法(因为它几乎没有痕迹)

– LvB
16年8月4日在7:29

#5 楼

没有一个比显示的更好,特别是由于8个字符的限制。

所有这8个字符的组合都可以使用Titan系列GPU和Ripper在一秒钟内进行测试。尽管并非所有密码策略都是有害的(最小长度是好的,一个或多个特殊字符会强制使用更大的破解字母,没有字典单词等),但显示的一个笑话并不是很有趣。总之,是的,这总比没有要糟,因为它不允许密码管理器或智能用户比默认策略更好地保护自己。

策略永远都不要停止良好的密码,只有可怕的密码。

评论


泰坦族GPU?考虑到这些天新的14 / 16nm GPU,我怀疑您是否甚至需要它。价值200美元的Radeon RX 480(带有5.8 GFLOPS!)可能会烧掉密码,就像没有东西一样。

–bwDraco
16年7月26日在19:59



要求一个特殊字符实际上并不会强制使用更大的破解字母:在现实世界中,将恰好有一个特殊字符,并且几乎总是在密码末尾出现(有时会出现在开头)。另外,在现实世界中,一个符号通常是“!”,其余的则是从“?@#$%&*”中选择的,这实际上减小了字母的大小,因为攻击者知道只有八个最后一个字符的选项。

–马克
16年7月26日在22:25

#6 楼


对于密码强度,较差的密码策略或根本没有密码策略来说,更糟的是什么?


,这取决于较差的密码策略是什么。


“您的密码必须为'letmein'”是一个较差的密码策略,绝对比没有策略更糟糕,因为它会阻止任何人输入正确的密码。
”您的密码必须为至少两个字符”是一种较差的密码策略,绝对比根本没有策略要好,因为它允许任何人使用一个好的密码,并防止某些错误的密码。


#7 楼

已经有很多好的答案,但是我总是喜欢从稍微不同的角度来看这个问题。当您考虑某些因素将如何影响破解密码的尝试时,您必须查看一下它们将如何尝试进行上述破解。基本上,这可以归结为两种方法。蛮力和“智能”猜测让我们看一下这两个。

1)蛮力。

听起来就是这样。他们尝试所有可能的密码。这是尝试在4位数数字锁上尝试从0000到9999的每个引脚的经典方法。此处的关键因素是可能的密码数量以及尝试每次猜测所需的时间。在这里,密码规则可能很棒,由于8位数字的要求,完全可以避免使用暴力破解。如果使用足够弱的散列,也可能完全是灾难性的,并且可以保证在合理的时间内将每个可能的密码破解给拥有足够资源的攻击者。

鉴于这种情况下的规则似乎要强烈建议后端使用相当古老的内容,完全有可能(即使不太可能)使用诸如MD5或SHA1之类的较弱内容对密码进行散列处理,并且可能不加盐,并且规则可能是灾难性的。主要是长度,但也不区分大小写,这将可能的字符减少了约30%。他们目前有26个字符+ 10个数字+ 28个符号,用于密码中的64个不同字符。如果它们区分大小写,则将有90个字符。

根据一些快速搜索,似乎如果我们假设攻击者拥有合理数量的资源,并且他们使用的是弱哈希值之一,则规则很有可能确实是灾难性的,如果现在不是,则肯定处于由于计算能力提高了破解速度,因此在不久的将来有灾难性的危险。长度超过8个字符的密码可能是安全的,但实际上却不允许。

是否可以在离线攻击中强行强制使用所有8个字符的密码?

2)“聪明”的猜测

在某些时候,蛮力方法变得不切实际,要花费数月的时间来测试所有密码,或者不可能,要花上千年的时间来测试所有密码,并且“智能”的猜测接管了。在这里,您可以看到字典攻击,字典中的文字或先前使用的密码列表以及基于规则的攻击。基于规则的攻击会使用字典,并开始添加或更改内容以对这些密码进行不同的更改。在一个六个字母的单词的末尾添加一个数字和一个特殊字符,以获得符合密码要求的8位密码。通过将密码转换为p @ ssw0rd来使密码“ leet”,这在该系统中将是有效但很快就会被破解的密码,等等。这些规则几乎是您可以梦想得到的任何东西,您认为这是合理的,并且随着我们的了解而不断发展关于人们通常如何根据过去的泄漏来选择密码。

假设破解到此为止,他们给出的密码规则最终将被合并到攻击者用来生成其可能的密码的规则中。在这里,他们的规则虽然不会带来灾难性的后果,但是仍然会导致有效密码的有效性大大降低,因此会加快破解速度。这也可能会导致一些非常可预测的密码,在密码的开头/结尾添加符号/数字,或者作为非常可预测的替换的一部分。

#8 楼

到目前为止,我要走的路与其他所有答案都不同……并且说在某个时候,这没关系。该算法对FAR的影响远大于密码规则。
例如,有人可能会使用ROT13,这很糟糕。
或者,使用MD5会更好一些。 -1。
然后可能会加盐。
也许会使用crypt()。
然后可能会加胡椒粉。
仍然,GPGUP可以在一秒钟内烧掉数十亿个密码哈希。那还有什么呢?
SHA-2-512带128位盐。更好的是,GPGPU可以做很多事情。
更改为bcrypt。好多了。现在,我们已经超越了单个GPGPU可以快速将它们全部烧毁的地步。
换成PBKDF2,加满盐和胡椒粉并进行10,000发。
要加密,现在很短密码是“无法破解的”,因为该算法是如此缓慢。

下面的表格可能会帮助解释它:

    Tries/sec
NTLM    350,000,000,000  
MD5     180,000,000,000  
SHA1     63,000,000,000  
SHA512Crypt     364,000  
Bcrypt           71,000    


因此,用bcrypt散列的cr脚密码要好于使用bcrypt散列的密码。 MD5。

#9 楼

最终归结为最终用户。我的看法是,如果您作为公司/网站的用户如果某人的帐户被盗用,不承担责任,那么最好放弃正式的密码政策,至少是限制性的密码政策。

我一直认为,用户应该对自己的安全负责,因为他们了解弱密码之类的含义。

最后保证部分是关键,就好像用户不知道该怎么做一样,您应该强制他们使用比他们想要使用的密码更安全的密码。但是,如您的示例所示,密码策略仅应鼓励使用更安全的密码,而不应限制密码强度。

我在我的大学网站上碰到过这个问题。我相当长的字母数字密码不满足那里的密码政策,因此不鼓励使用某些(但不是全部:/)特殊字符。结果是一个故意较弱的密码,因为对我来说,记住一个我没有故意记入内存的密码更加困难。

特别是在那种情况下,我怀疑“密码策略”更多是避免在后端进行某些字符串解析/清理的借口,而不是鼓励更好的安全性的合法方法。 />
最后,如果实施了密码策略,则该密码策略会随着时间而改变。就是说,在1990年代被视为安全密码的东西不再如此,到了2016年,那时普通消费者可以利用云计算或GPU集群为您的密码提供数量巨大且不断增长的计算机功能。

#10 楼

如果用户随机选择密码,则密码策略将通过限制可能的密码选择而使安全性更差,但用户不会随机选择密码。好的密码策略的目的应该是促使用户做出更多选择,从而在不过度限制密码空间的情况下选择更强的密码。

此策略有好有坏。


正好是8个字符长。


最小长度是好的,最大长度是不好的。


至少包含一个字母和至少一个数字。


这很好,它促使用户选择基于字母的组件和一个基于数字的组件。


密码不区分大小写。


这样可以大大减小密码集的大小。另一方面,大多数人除非有强制手段,否则不会使用大写字母,当他们使用大写字母时,往往会以可预见的方式使用大写字母。


至少包含一个特殊字符


还是很好,它迫使密码创建者做出另一种选择。


禁止使用空格和规则?和!


我怀疑这些区别是否很大。


禁止在开始时重复字符


好东西,这意味着用户不能只用一个字母的重复填充密码。

总体而言,我想说的是,如果您对用户一无所知,则此策略可能总比没有好,但如果您的用户有一个密码,有关体面的密码的线索可能弊大于利。

评论


空间/?!规则本身并不坏,但其含义令人恐惧。强烈建议他们使用应用程序内部的明文密码执行某些操作,这些密码会破坏某些字符。它比“一定不能包含撇号”更使我感到恐惧,但不多。不区分大小写和最大长度也可能建议使用明文存储。

–Random832
16 Jul 28 '19:00



“最大长度不好”->“最大长度不好”?

–user2943160
16年7月31日在3:30