在后端,我存储了PBKDF2散列的密码,这些密码在每个用户的基础上添加了盐迭代,因此针对更强密码的强行哈希攻击是不现实的(当前),并且网站在五次错误尝试后将用户锁定了10分钟,因此您也不能以这种方式进行强行。
我从客户/合作伙伴那里得到了一些有关我实施的密码规则的严重性的回击。
很显然,我希望人们使用16-20个以上的字符密码,但这很慢-官僚主义。因此,除了允许/鼓励使用这些好的密码之外,我还必须允许一些较短的“硬”密码。我只是想限制我们的接触范围。
特别地,“无字典词”的要求使人们感到沮丧,因为我不允许使用经典的Leetspeak密码,例如XKCD著名的Tr0ub4dor&3。 (对于那些好奇的人,我通过leetspeak排列转换器(包括删除字符)运行建议的密码,然后将每个排列与字典进行比较)
我太严厉了吗?我是“ Avids可用性规则”的坚定支持者-安全以牺牲可用性为代价,安全是以牺牲安全为代价的。但是在这种情况下,我认为这更多是习惯/教育问题。我允许没有限制的骰子/可读密码短语密码,只有“普通”密码才有更严格的要求。 XKCD#936:复杂的短密码或字典的长密码?
我应该尝试使用更好的UI帮助解决此问题吗?我应该坚持我的枪吗?最近发生的多起引人注目的骇客,尤其是那些暴露了密码的骇客,使我觉得自己是对的,但我也不想无缘无故地使事情变得愚蠢。由于我受到了蛮力攻击的保护(我认为/希望),因此这种不必要的复杂性吗?或者只是深度防御?
对于那些无法使用密码短语或真正随机密码的人来说,“两个单词加num /符号”密码似乎既容易,又至少很难hack,如果我能让人们阅读说明...
想法:
更好的密码提示/显示得更突出(太主观了吗?)
更好的强度计(基于zxcvbn的东西?会在客户端而不是在提交后使词典单词失败)
禁止所有“短”密码,迫使人们仅使用密码短语,这构成了规则更简单吗?
“为我提供密码”按钮会为他们生成一个密码短语,并将其复制到密码字段中。我目前在密码说明/规则中具有的内容:
16个字符或更长的密码短语(最大数量不受限制)
或
< br至少八个字符
包含三个以下字符lowing
大写
小写
数字0123456789
符号!@#$%^&*()_- + =,。/ <>? ;:'“
不是基于词典单词的
不是您的用户名
不能接受的密码示例
Troubador(单个词典词)
Troubador&3(单个词典词加上数字和符号)
Tr0ub4dor&3(基于单个词典词)
12345678(不包含3/4个字符类型)
abcdefgh(不包含3/4个字符类型)
ABCDEFGH(不包含3/4个字符类型)
ABCdefgh(不包含3/4个字符类型)
ABC @#$%! (不包含3/4个字符类型)
ab12CD(太短)
将接受的密码示例(请勿使用以下任何密码):
正确的电池充电器钉(Diceware密码)
浮动的东西应该使命令生效(可读的密码-链接至makemeapassword.org)
GoodPassword4! (多个单词,大写,小写,数字,符号)
Yyqlzka6IAGMyoZPAGpP(使用大写,小写和数字的随机字符串)
#1 楼
熵值的索引(时间除以节点数-状态参与者有很多节点):裂纹时间是对顶级单节点裂纹系统的估计,每18mo进行一次升级以考虑摩尔定律(当您看到星号(
*
)。检查一半的空间后,便认为该空间已破裂。基于GPU的破解可以在一台计算机节点上以23B / s的速度测试MD5。 PBKDF2更强大,2013年在4 GPU系统上估计为300k / s(27mo之前→227/18,所以300k×2.828 = 849k / s→舍入为1M / s)。(自我注意事项:阅读和合并/驳斥Jeffrey Goldberg关于Quora的密码破解数学)离开,因为它可能仍然有帮助)。这实际上只是在询问是否允许leetspeak。高安全性区域已经使用了两因素身份验证。
“ troubador”一词不在我的标准词典中,而是在我的大型词典中。大写单词的首字母不是随机混合大小写(这是常见的密码拓扑),因此它只会使计数加倍。因此,其等效的可随机打印字符为
log₂(650k × 2⁶ × 2) / 6.55
,它仅为四个字符!弱密码,但强度却与大多数人创建的密码一样强,以最小程度地满足复杂性要求。 />为全面起见,您可能还需要一本大词典,以便可以像我一样计算单词数,否则系统会接受类似Tr0ub4dor&3
的密码(33.22位,5个字符,由于相关而实际上较低)。 />评论
抱歉,请提前澄清。极好的答案。虽然我认为两个单词的问题是真实的,但由于不允许一个单词,所以我得到了很多回击,但是两个单词是一个入门者。阶梯。我的目标是通过UI提示尽可能地鼓励使用骰子或其他密码短语。我将添加zxcvbn,它至少应该警告用户这两个单词比较弱。
–Jason Coyne
15年7月10日在20:27
限制密码尝试非常重要。我假设您正在执行此操作:同一IP或相同用户名在5分钟内5次失败会阻止IP和/或锁定帐户)。只要您的哈希数据库从未受到破坏,并且您的限制永远不会被绕开,密码强度就无关紧要。因此,如果您不能提高密码强度,请提高该哈希数据库的安全性。
–亚当·卡兹(Adam Katz)
15年7月10日在22:40
我正在限制在线尝试。在OS / DB / SSL等中有足够的漏洞示例,这些哈希泄漏是合理的考虑。使用短密码可以破解它们。 Ive建议客户放弃所有复杂性要求,但是将最小长度设为16,我们将看到它的发展过程。
–Jason Coyne
15年7月10日在23:05
我喜欢问问者如何接受他想听到的答案,而不是投票数超过五倍的答案。
–凯文·克鲁姆维德(Kevin Krumwiede)
15年7月11日在6:23
@KevinKrumwiede尽管我可以清楚地知道我在问什么,但我接受了最直接回答我问题的答案。我并不是在问密码规则或总体安全惯例。我是在专门询问字典查找问题和leetspeak。 (正如我所说的,我本来可以在问题中使这一点更加明显)
–Jason Coyne
15年7月11日在12:46
#2 楼
这里的错误是相信额外的密码规则可以提高安全性。他们不。它们增加了用户的烦恼;并且使用户选择难以记忆的密码。由于某些奇怪的心理原因,大多数人认为,以非本体符号表示的密码在某种本体论上比仅带有字母的密码“更安全”。但是,这是完全没有事实根据的。这是由于两件事的结合:最愚蠢的暴力攻击会枚举所有符号序列,从1到2的序列开始,依此类推。从这个意义上讲,仅包含4个符号的密码可以说是不可弥补的弱。用户理解枚举所有小密码的概念。他们已经准备好接受他们需要输入至少6或7个字母的信息。诱使用户:
设计并相互共享“方法”以生成服务器将接受的密码,这些方法通常具有很多标点符号,但熵很少;
写下难以记住的密码;出于难以记住的原因,在其他系统上重用密码。
“密码强度计”也是有害的,因为:
它们不可靠也不可靠。密码强度计只能测量给定密码与密码代码所体现的精确蛮力策略相抵的时间,但没有攻击者必须遵循完全相同的策略。在密码选择中,因为他们只能看到结果(密码本身)。
他们将密码选择变成一种鼓励用户提高机智策略的游戏,而机智正是我们所不希望的密码。安全密码致力于随机性。
提供一个密码生成系统会很有帮助。请注意使该系统成为可选系统:您希望用户愿意使用它,而不要强加于他们,以免他们造反(并写下密码,共享和重用)。 />所以我的建议是:
拒绝少于7个字符的密码(因为您有一个针对在线攻击的缓解系统-即在5次错误尝试后自动锁定10分钟-您可以忍受相对较短的密码)。但是没有其他规则。
提供一个或什至更好的几种可选密码生成机制,例如7个或更多字符。骰子,“正确的马”之类的东西,依此类推。
鼓励使用密码管理器。我的主张是,您正在朝某种偏斜的方向推动事情,而不是完全正确的方向。特别是,坚持某些特定字符的密码规则是一件坏事(虽然很普遍,但还是一件坏事)。
评论
OP提到他们正在政府站点上工作。如果是美国政府,则必须遵循NIST指南,该指南要求至少12个字符-7个根本不行。
– Iszi
2015年7月10日在19:14
我还要添加两个规则:密码不能与用户名相同,并且密码不能出现在词典或最常用密码列表中。如果密码是攻击者尝试使用的前五种方法之一,则进行五次尝试锁定将无济于事。
–马克
15年7月10日在22:10
如果唯一的规则确实是“至少7个字符”,我想我们都可以同意,平凡的词典单词的数量将非常高。既然我们知道其中之一的安全性就和4个随机字母数字字母(我真的很慷慨)一样安全,为什么不也接受它们呢?接受一个非常错误的密码,而不接受另一个密码是相当不公平的。就我个人而言,我是专为写下在线系统复杂密码的人们提供服务的-通常,每个能够获得如此多物理访问权限以窃取这些纸屑之一的人,无论如何都可以轻松地安装键盘记录程序。
– Voo
15年7月11日在18:15
从概念上讲,主要问题是试图迫使用户选择“强”密码。为了获得体面的安全性,用户应该了解什么使密码良好。诸如强制使用标点符号的“密码规则”对此无效。实际上,它们使用户相信“。”。比“ k”之类的字母“某种程度上”更“安全”,并且适得其反(这使用户不太可能真正理解事物)。安全需要用户合作,这需要自由和教学法,而不是规则。
–汤姆韭菜
15年7月11日在21:27
@SteveJessop:按照我的逻辑,密码长度应该没有下限。但是,如果系统接受(例如)三个字母的密码,那么很多用户就会感到承担了神圣的使命,即警告您(系统管理员)关于三个字母的密码的愚蠢行为,并只需阅读所有这些投诉即可会消耗很多时间。强制最小长度是普通用户理解和接受的,并且可以作为您真正关注安全性的信号。
–汤姆韭菜
15年7月12日在17:53
#3 楼
附加密码规则应始终遵循以下规则:“获得有效密码并将其保持最新状态越困难,
人们越有可能编写在他们的当下写下他们的计划。“
相应地,您的问题是一个社交问题。您可以提供多少有关良好密码管理的培训,以及您可以提供多少强制实施。您必须平衡自己的业务。听起来您有重要的信息要保护...有人培训操作员如何使用此类敏感信息吗?还是他们只是盲目地依靠您和哈希算法来为他们做这件事。
只是因为它与众不同,所以我会建议您在输入错误密码后提出学习经验。我认为这可能是两种方法之间的平衡。更重要的是,它可能会激发您找到更好的解决方案:
密码的长度必须最小。这是最基本的要求,您将必须执行
。如果密码很弱,请让他们知道它是弱密码,并提出让他们无论如何都要使用它(带有一些文本表明您信任他们)正确保护自己的凭据)
接受弱密码时,请附上一些说明您认为弱密码的文字(“看起来您使用l33t使您的密码看起来更安全。猜猜:不是!此密码是比您实际认为的弱45,000倍“)
评论
那么人们在日程安排人员中写下密码怎么办?要访问这些人,必须获得对工作场所的无障碍访问。如果您能够做到这一点,那么游戏就结束了-安装键盘记录器(如果我们希望快速的话,不是软件,而是硬件)所需的时间比在日程安排器中查找密码要少。这是计算机安全性的规则101:如果硬件受到威胁,您将丢失。对于大多数工作场所而言,写下密码是一个不错的选择,并且可能与获得的密码一样安全。
– Voo
15年7月12日在16:06
@Voo肯定需要了解您的威胁模型。但是,在许多情况下,写下密码的地方(即日程安排者)离开了受保护的工作场所。如果您记下所有密码,将其放在安全的地方,并以最有价值的密码级别保护安全密码,这是一种非常安全的方法。
–Cort Ammon
15年7月12日在19:09
错误键入应该是“如果将所有密码记下来,将其放在保险箱中,并以最有价值的密码级别保护保险箱,这是非常安全的方法。”
–Cort Ammon
15年7月12日在19:28
@绝对是。这并非在每种情况下都是正确的选择(并且实际上取决于您指出的方式)。我只是发现它经常因为错误的原因而失败,因为出于许多实际目的,这是外行可以实现的最佳安全性。
– Voo
15年7月12日在20:36
@Voo是的,它确实经常被击碎。我认为我不满意,因为添加另一个密码规则似乎很容易。我一生中一直在研究一些ASININE密码系统(我仍然毁IT傻瓜的名字,该傻瓜设置了一个系统,该系统要求每60天更改一次密码,至少要输入一个数字,但最后不会计算数字,混合大小写,但第一个字符不会算作大写字母,不能是字典字或l33t字,也不允许明显的键盘输入法...
–Cort Ammon
15年7月12日在21:10
#4 楼
如果您不担心有人会窃取和强行使用您的密码,那么您最有可能被发现的是钓鱼攻击。密码复杂度要求不会保护您免受网络钓鱼攻击。如果您使用非常复杂的密码,则用户会发现一个有效的密码并坚持使用,当密码过期时,他们将进行最小的更改继续前进这意味着确定的网络钓鱼者将能够相当快地猜测新密码。
考虑使用2要素身份验证,因为没有密码复杂性方案可以保护您免受用户操作。 (请记住,用户也是人,也希望不用花一整天的时间就完成工作)
顺便说一句,这里有几个相关的问题:
密码是复杂性规则适得其反?
推荐的密码复杂性政策
评论
为了获得最安全的数据,我们还提供2FA。我想我担心暴力破解。即使使用PBKDF2,如果用户的密码太差,他们很可能会在很短的时间内10k-100k的猜测中出现。我希望人们使用我不担心的密码短语。但是,如果他们不打算使用它们,那么我想阻止John / hashcat进入简单的规则集中。
–Jason Coyne
15年7月10日在18:30
人类不能很好地执行复杂的密码,因此请勿强行使用。您能鼓励使用Lastpass这样的密码管理器吗?它将在您的系统中放置复杂的密码,而不会使用户发疯。
–ztk
15年7月10日在18:34
好吧,我的目标是强制使用骰子样式的密码。他们不会让我将规则设置为“必须是16个以上的字符”并在此结束,因此对于较短的内容,我试图确保其安全。我在用户界面中放置了一个指向keepass和makemeapassword.org的链接,他们抱怨链接到外部站点:(
–Jason Coyne
15年7月10日在18:36
我还建议您阻止1000个左右的最常用密码。
–斯蒂芬·托瑟(Stephen Touset)
15年7月10日在18:50
没有快速或无痛的方法。用户不想受教育,他们中的大多数人已经在与他们有关的事情上受过良好的教育。他们想登录并开始工作。
–ztk
15年7月10日在18:54
#5 楼
我会说8太低了,对于这样的事情,即使9的安全性(字面上)也要高一个数量级。考虑到此内容的含义,您当然想考虑2因子认证。 。这些实际上削弱了您的熵。我什至建议您使用单词,只要您可以清楚地表明它们应该无关紧要,并且绝对不要引用任何形式的引文。是单词的集合,其中一个是密码。攻击者必须知道将该代码放置在哪里,否则就假定密码很长,可以在任何地方使用该代码。像ING Direct(在CapitalOne买下并更改方法之前)之类的系统使用了密码系统。您的密码是一个四位数的密码,只能用鼠标或按与图像相关的随机键输入,并且如果缺少永久性cookie,则还必须回答一个安全问题。这几乎和两因素身份验证一样有效。两者都受到会话劫持的影响。为了解决这个问题,您可以尝试使用Cookie以外的浏览器指纹。一个不错的近似值,而又不会出现Panopticlick之类的麻烦,那就是仅使用IP地址,用户代理字符串,SSL cookie和十分钟的会话超时。时间可以帮助对抗网络钓鱼和键盘记录程序,但它们又会损害密码的复杂性。如果攻击者在尝试执行访问之前有很长的延迟,则这些仅在这方面有所帮助。这是未知计算机的其他安全问题可以提供帮助的地方。
您还可以考虑使用客户端SSL证书,尽管它们本身可能不受密码保护(并且您无法强制执行),这意味着丢失计算机是一个巨大的问题。
我建议多层。安全密码短语是一层,第二层(仅在浏览器指纹不匹配时才需要)是外部的(两个因素),随机放置的要单击的已知图像序列或客户端SSL证书(这将减轻需要用于指纹)。
评论
用户太多,无法使用客户端证书。对于最安全的数据,需要2个因素,但这仅占总用户的百分比。如果他们使用diceware风格的密码,则所有规则都将被忽略。我可以使最小值9毫无问题,但这并不能真正解决问题的核心:禁止像XKCD这样的leetspeak词典单词太严厉吗?
–Jason Coyne
15年7月10日在18:43
(我的回答已移至另一个答案)
–亚当·卡兹(Adam Katz)
15年7月10日在20:14
#6 楼
您为什么不像普通人那样简单地处理leetspeak-Word?在示例中,您说您接受GoodPassword4 !,因为它有多个单词(以及符号和数字)。因此,您似乎在此处应用的隐式规则是:“如果必须使用词典单词,则不仅要使用一个(还包括一些符号和数字)”。 />
我猜这是一条实际上很容易理解并从用户角度接受的规则。但是比得到G00dP4ssword4会更令人讨厌!或B4DTr0ub4dor1!
因此,不,您不应本质上禁止使用“ leetspeak”字典词,而应将它们像常规字典词一样对待。
评论
我的疑问措词可能不清楚。我的意图实质上是按照您的意思。不是真的不允许leetspeak,而是在禁止单个词典单词的规则中,我应该检测到leetspeak。如果您使用的是多个单词的密码短语,并且碰巧将其中一些单词识别出来,那就可以了。
–Jason Coyne
15年7月14日在16:09
#7 楼
中间立场如何?您所给出的规则基本上说的很长或很硬而没有中间立场。每个字符和各种硬功能的一定乘数。如果该数字足够高,则您接受密码。因此,如果您基本上接受16个字符的任何内容,则可以接受具有一项硬功能的15个字符。
评论
我也向客户提出过类似的建议。斯坦福大学的政策非常相似。 itservices.stanford.edu/service/accounts/passwords/quickguide但这不能回答关于短“复杂”密码的问题,如果仍然禁止使用单词。该解决方案的另一个问题是问题的一部分是复杂性/通信。尽管这允许逐步的复杂性,但向用户解释则更加复杂(即使我的客户对我的“ 2级”复杂性规则也有所抱怨。
–Jason Coyne
15年7月12日在13:16
我说的是,一个讲leet的“单词”基本上是字典+一些复杂性,应该相应地打分。斯坦福的政策是我所说的简化版。
–Loren Pechtel
15年7月12日在19:17
#8 楼
请您的祖母(或步行距离之内的任何祖母)定义密码。她必须遵守严格的密码规则(您已经为她打印了密码),但是不允许她与您交谈。并且不应该花太长时间。此外,告诉她在接下来的几天/几周内她将需要该密码(以使用您的Web服务),因此她必须确保记住它(可能是通过写下来)。 -但是,您将无法告诉真正的用户,除非您在注册表格上写了规则列表,例如“不要在冰箱上写密码”和“不,也不要在显示器上”。 )
现在怎么样了?如果答案是“不太好”(她是否在5分钟后放弃询问您是否已经进食,因为那也算为“不太好”),则可能表明您的密码规则太严格了。
我通常同意得到大多数支持的答案以及以下几点评论:
一个基本规则,即最小长度,例如7或12或15或其他。
是的,这将允许人们使用“ aaaaaaa”作为密码,但是至少不会以明文形式将其写在其他人可以看到的地方,因为他们可以记住它。所有这些规则可能只会造成伤害,而只会造成伤害。不管您排除了数百万个词典单词,有人都会使用您从未想到的单词(从技术上讲,不是“您”,您可能只是从某个地方获得该列表)。而且由于某种原因,人类攻击者会成功,因为他尝试的第一个密码是正确的密码“ Mugwump”或“ Smellfungus”。
至于那些“您必须使用3个大写,小写,数字和特殊字符”规则,这会使许多人在一张纸上写下
ABCabc012!@#
,因为他们不记得了。 (如果该地区没有冰箱,那么方便的墙壁也可以使用,请参阅本文。)公平地说,了解这很重要的人也是人们,他们不会既可以记住那些(人工)密码,也将使他们烦恼。无论如何,大多数普通计算机用户(“打印互联网”类型的用户)都会烦恼(即使是一个必须输入密码的事实对许多人来说也是“烦人的”),毕竟,计算机应该能够在2015年神奇地识别出该用户)。
如果没有这些复杂的规则,您至少会有很多人真正能够记住他们的密码。如果发现某种可疑的东西,可以提高安全性。几次尝试失败后,您已经完全阻止了身份验证,这很好。您可能会考虑中间的步骤,例如,在一两次失败的尝试之后,您可以要求输入验证码。此外,一直尝试登录(即使登录已被阻止)的特定客户端可能会被自动阻止一天(在较低级别,甚至可能被防火墙阻止)。
#9 楼
我不喜欢密码规则中包含很多“这个,但不是那个,其中一个,但不是太多”规则的密码。 br />我是这样的,这就是原因。我使用1Password。它会为我生成随机密码。它们看起来像这样:
luaD/fcr61nt7A%NxBCR
NeTtVL7uuAqmL5_j&cm1
qwtlOjJsQor)9nM1%zl2
某些网站已拒绝此类密码。为什么?任意规则。
在此之前,我还没有考虑过相反的系统:不是要求我创建密码,而是给系统分配一个满足其规则的密码。密码总是会以纸质形式出现,或者由人粘贴到某个文件中,但这是唯一的,而不是字典中的密码。现有技术。
评论
在聊天中查看我的回复。
–Jason Coyne
15年7月14日在16:32
这似乎没有解决这个问题。
–尼尔·史密斯汀(Neil Smithline)
15年7月15日在4:38
@NeilSmithline我确实回答了OP的有关限制是否太严格的问题。我确实提供了很多其他建议/意见。
– Berto
15年7月15日在7:28
是的我猜它在一开始就回答了。
–尼尔·史密斯汀(Neil Smithline)
15年7月15日在13:38
#10 楼
这是解决暴力破解密码问题的暴力破解解决方案:专用于几台PC尝试使用攻击者使用的相同(很少)破解工具来破解密码。成功破解密码后,请以礼貌的方式发送电子邮件,通知用户检测到其密码太弱,并要求用户更改其密码。评论
您可以尝试“破解”未加密的密码;几秒钟的时间相当于尝试破解合理的密码哈希的健康时间。不知道预先生成(十/几百个)数百万个密码并进行查找或尝试动态重新创建密码是否更容易。
–尼克T
17年7月26日在16:31
#11 楼
再说一次,我并不是信息安全方面的专家,但是也许您可以鼓励您的用户使用LastPass或Keeper为他们生成并存储大(真实)随机密码,并将其存储在安全的保险库中?还要使用2要素身份验证。我知道LastPass最近遭到黑客入侵,但是选择了长期安全的LastPass密码的用户仍然应该可以避免打开保险柜。选择弱密码作为主密码的用户仍然无法获得帮助。
当然,这不是最佳方案,但至少应使您的用户处于正确的轨道。网站之间的安全性存在很多不一致之处。我了解(例如,我的银行允许密码的最大长度为16个字符,但我的reddit密码为100个字符)。但是16个随机字符仍然比必须写下密码更好,因为您忘记了密码。
评论
我们确实鼓励这样做,但是显然您不能执行。但这只能解决他们记住密码的问题,不能解决密码的复杂性/规则。
–Jason Coyne
15年7月14日在14:27
评论
我有点惊讶您没有硬编码规则来阻止正确的马电池钉书钉“ 16个字符或更长的密码(最大数量不限)”那么,如果我在该字段中输入GB个字符,您可以将其发布到服务器吗?有趣的...
@KevinCoulombe如果这样做,实际上是在强迫人们写下强迫他们使用的密码。不管您是否喜欢,许多将密码存储在某个地方(因为他们忘记了密码)的人会把它放在他们的Google联系人数据库等地方。
“但是在这种情况下,我认为这更多是一个习惯/教育问题。”对所有用户进行重新教育可能是一个崇高的事业,但是却是一个顽强的事业。试图改变一个人的习惯几乎是不可能的。
@Tony是的,那真是一个地狱。继续并将其发布在TheDailyWTF