2009-01-19 39 views
7

不止一次,我被要求为我正在开发的软件选择密码选择规则。典型的建议包括了诸如:密码复杂性策略 - 他们的任何证据?

  • 密码必须至少N久字符;
  • 密码必须包含小写,大写和数字;
  • 没有重复使用最后的M密码(或在P天内使用的密码)。

依此类推。

虽然通过限制可用密码,可以减小所有可用密码空间的大小,但有些东西总是会对我的任何限制进行密码限制。这难道不会让更容易猜测吗?同样,通过让用户创建复杂且经常变化的密码,写入它们的诱惑力增加,同时也降低了安全性。

是否有任何量化证据表明密码限制规则会使系统更安全?

如果有,那么使用哪种“最安全”的密码限制策略?


编辑奥拉维尔Waage欣然指出了Coding Horror article on dictionary attacks其中有很多有用的分析,但它给我的印象是字典攻击可以大量减少(杰夫建议)通过简单地添加延迟认证尝试失败后。

考虑到这一点,有什么证据表明强制复杂密码更安全?

回答

5

东西一直窃听我关于 穿上密码 任何限制,虽然 - 通过限制可用的 密码,可以减少所有允许密码的 空间的大小。 这难道不会让密码更容易猜到 吗?

理论上,是的。在实践中,您拒绝的“弱”密码代表所有可能密码的一小部分,在没有限制的情况下通常会选择不成比例的密码,并且哪些攻击者知道先攻击。

同样,通过使用户创建 复杂的,经常变化的 密码,诱惑写 下来的增加,也减少了 安全。

正确。强迫用户每月更改密码是一个非常非常糟糕的主意,除非在每个人都真正理解安全需求的极端高安全性环境中。

3

这些类型的规则文章绝对有帮助,因为它停止愚蠢的用户使用的密码,如“输入mypassword”,不幸的是常有发生。

所以实际上,你迫使用户输入一大组潜在的密码。不要紧,你只用小写字母来排除所有密码的集合,因为剩下的集合仍然大几个数量级。

但我的宠大的眼中钉是我在各大网站上遇到密码限制,像

  • 没有特殊字符
  • 最大长度

为什么会有人这样做?为什么。????

+0

I *允许密码讨厌*最大密码长度。 GRRRR! – Dana 2009-01-19 13:13:44

0

虽然这并不能直接回答你的问题,但我个人发现我遇到过的最激烈的规则之一,因为你不能重复使用以前使用过的任何密码。在同一地点工作多年后,每2/3个月不得不更改密码,使用我在一年前选择的密码的能力似乎并不特别不安全或不安全。如果我以前使用过“安全”密码(字母数字和大小写更改),那么在一年或2年之后(取决于您经常更改密码的频率),确定重新使用它们似乎对我来说是可以接受的。这也意味着我不太可能使用“更简单”的密码,如果我想不出任何容易记住和难以猜测的事情,可能会发生这种情况!

+0

“以前的密码”限制更多的是入侵检测,而不是密码安全。如果攻击者设法重置您的密码,那么他们可以将其重新设置为之前的值,然后您不会知道他们曾经通过重置进入。然后,如果他们没有将其设置恢复到之前的值,但您又设法返回到您的帐户,那么如果他们知道由于入侵事先设置的内容,您仍可以保留访问权限。 – 2015-02-08 15:04:47

1

人们也可能会指出最近在Twitter上的失败,其中一个管理员的密码竟然是“快乐”,而后者却被字典攻击所困扰。

1

对于这样的问题,我问自己what Bruce Schneier would do - 链接的文章是关于如何选择难以用典型攻击进行猜测的密码。

另请注意,如果您在尝试失败后添加延迟,则可能还需要在成功尝试后添加延迟,否则延迟只是一个信号,表明攻击失败后应该启动其他尝试。

+1

成功尝试后的延迟对用户来说是一个很大的烦恼,并且不会隐藏任何更多的信息,因为还有其他方法来测试失败。 – 2011-09-05 19:40:40

2
  1. 决不防止用户做他们真正想要的,除非有这样做的技术限制。
  2. 你可能因为使用字典单词或3字符密码或仅使用数字来做愚蠢的事情而唠叨用户,但请参阅上面的#1。
  3. 没有好的技术理由要求只有字母数字或至少一个大写字母或至少一个数字;见上面的#1。

我忘记了哪个网站有关于密码的建议:“选择一个非常容易记住的密码,但是很难让其他人猜测。”但随后他们开始要求至少有一个大写字母和一个数字。

密码的问题在于,它们如此无处不在,以至于没有摄影记忆的任何人在没有写下它们的情况下实际记住它们,因此如果有人可以访问此列表,就会留下严重的安全漏洞写下密码。

我能够自己管理这个的唯一方法就是分割我的大部分密码 - 而且我只查看了我的列表,到目前为止我已经达到了130个! - 分成两部分,一部分在所有情况下都是一样的,另一部分是独特而简单的。 (对于需要像银行账户那样的高安全性的网站,我违反了此规则。)

通过要求“复杂性”定义为多种类型的字符都存在,是它迫使人们针对不同站点采用不同的约定集,这使得难以记住有问题的密码。

我将承认限制允许的密码字符集的网站的唯一原因是它需要在键盘上键入。如果您必须假设该帐户需要从多个国家/地区访问,则键盘可能不会始终支持用户家用键盘上的相同字符。

其中一天,我将不得不在这个问题上发表博文。 :(

2

我的老极限定理:

作为密码的安全性足够接近,这将是在连接到电脑或显示器便条的概率接近1

0

首先让我。说最小长度,区分大小写以及所需特殊字符等细节应该取决于谁有权访问以及密码允许他们做什么,如果是启动核导弹的代码,那么它应该比密码更严格以便登录发挥你付费的在线版愤怒的小鸟

但我有一个SPE CIFIC牛肉与大小写敏感。

对于初学者,用户讨厌它。人脑认为“A = a”。当然,开发人员的脑子通常并不典型。 ;-)但是开发人员也会因区分大小写而感到不便。

其次,CapsLock键太容易被误操作。它正好在Tab和Shift键之间,但它应该高于Esc键。它的位置早在打字机的日子就建立起来了,它没有备用字体。在那些日子里,有它在那里是有用的。

所有密码都有风险...您将风险与易用性平衡,是的,可用性很重要。

我的理论: 是的,区分大小写对给定的密码长度更安全。但除非有人让我这样做,否则我会选择更长的密码长度。即使我们假定只允许字母和数字,每个添加的字符都会将可能的密码的数量乘以36.

有些人比我数学懒惰可以告诉您组合之间的组合数量的差异,例如最少8 - 特征区分大小写密码,以及12个字符的不区分大小写的密码。我认为大多数用户会喜欢后者。另外,并非所有应用都向其他用户提供用户名,所以黑客有可能需要找到两个字段。

我也喜欢,允许在密码空间,只要广大的密码是不空格。

在我正在开发的项目中,我的管理屏幕允许管理员更改适用于所有未来密码的密码要求。他还可以强制所有用户在下次登录后随时更新密码(以满足新的要求)。我这样做是因为我觉得我的东西不需要区分大小写,但管理员(可能为我支付软件费用)可能不同意,所以我让这个人决定。

我的银行卡的PIN只有4个数字。由于它只是数字,因此不区分大小写。而且,这是我的钱!如果你不考虑其他什么,这听起来很不安全,是不是因为黑客必须偷我的卡才能拿到我的钱。 (并且拍下他的照片。)

另一个牛肉:开发人员来到StackOverflow并反刍他们在某篇文章中读到的硬性规则。 “从不硬编码任何东西。” (好像这是可能的。)“所有查询都必须参数化”(如果用户不参与查询)。等等。

请原谅咆哮。 ;-)我保证我尊重分歧。

0

对于这个问题,我倾向于根据输入文本的特征为密码提供'分数',并拒绝不符合分数的密码。

例如:

Contains Lower Case Letter +1 

Contains different Lower Case Letter +1 

Contains Upper Case Letter +1 

Contains different Upper Case Letter +1 

Contains Non-Alphanumeric character: +1 

Contains different Non-Alphanumeric character: +1 

Contains Number: +1 

Contains Non Consecutive or repeated Second Number: +1 

Length less than 8: -10 

Length Greater than 12: +1 

Contains Dictionary word: -4 

那么只有具有大于4的得分,(当他们通过javascript创建他们的密码为用户提供反馈)