5位数的PIN比大多数密码更好吗?

ily*_* n. 36 security authentication passwords web-services

多年来,这一直困扰着我:为什么大多数在线服务高度重视密码的熵,引用它作为安全措施,并在用户选择密码时强制执行?

在阅读了"强大的网络密码完成任何内容?"之后,我决定提出这个问题.(当然还有经典的Dilbert卡通片).

在线网站的典型政策是要求至少6或8位大写+小写+数字密码.这个长度与蛮力攻击的难度有关,例如从哈希中恢复密码.但猜测在线发生的典型方式是有人试图登录到服务器,经过几次尝试后可以自由拒绝.

让我们想象一下,例如,我们用一个全数字的PIN来保护一些中型服务.人们会立即想到4位数或6位数的针脚,但这可能不是一个好主意,因为有太多人会想要进入他们孩子的生日,这本质上是一种公共知识.

所以,这是我的5位数PIN码建议.我为每个用户保留一个"可能的攻击"标志.

  1. 用户正确登录 - >确定
  2. 否则,请保持https会话并允许再尝试2次
  3. 用户登录 - >确定
  4. 否则,在他们面前休息5分钟再允许2次尝试
  5. 用户登录 - >确定
  6. 用户中断会话 - >设置标志
  7. 用户中断会话但稍后正常登录:使用对话框显示用户并允许清除该标志
  8. 用户耗尽上述尝试:发送带有链接的电子邮件; 允许清除旗帜
  9. 如果月内总共有超过100个标志,请设置全局"可能的攻击"标志,该标志要求没有cookie的人回答安全问题
  10. 在某些情况下自动清除用户标志(例如,用户最终从同一台计算机登录)

让我们假设用户名以某种方式已知(请注意,大多数网站都不会这样).对一个用户的暴力攻击是没有希望的 - 你在5次尝试后被锁定,所以你有1/200000的机会.如果你试图在一个月内猜测密码超过200次,那么国旗就会消失,你什么也得不到.如果你每个月尝试<200个用户,一年后你有1%的机会打破一个用户; 您可以通过网络钓鱼,病毒,社交工程或其他任何方式获得更好的收益.

网站的大小只是在没有误报的意义上是相关的,即真正忘记密码的用户(假设每月1%),恢复它,但不清除标志(让我们说1%的那些),当你无法自动清除标志时(比如10%).这使得每10 6个用户每月有10个预期误报标志- 这意味着中型网站进入"恐慌"模式的可能性相当低,无论如何都不是那么糟糕.

我相信这个方案非常实用.以下是关于它的一些明显的第一个事实(更新):

  • 好处:PIN更容易记住.我相信这是一个很大的好处,因为现在可以要求用户记住您生成的密码.我相信大多数人记住5个随机数字比任何其他类型的随机密码更好.
  • 权衡:如果你的攻击者知道散列的密码和盐,哈希就不会有太大的帮助.如果有人闯入您的数据库了解您的腌制过程是什么,这是可能的.但是,我认为标准密码熵在这种情况下也无济于事.
  • 好处:人们比随机字母数字密码记住随机5位数更快乐; 因此,要求我们生成密码更容易,而不是用户.这消除了字典/个人数据攻击.

我的问题是:

  1. 与我所描述的典型方案相比,我的方案的其他权衡/好处是什么?
  2. 使用我的密码方案,大多数中型网站和组织都不会更好吗?
  3. 他们选择这个计划的原因是什么?

注意:我不主张总是使用短密码.我自己的网络密码通常由密码管理器(1Password)随机生成和加密,密码为12个字符.但我认为上述方案往往比我们在实践中的方案更好.

Kse*_*pac 42

不,你错了.暴力攻击是一回事,但真正的危险是Rainbow Tables,它从哈希值中为您提供明文密码.

首先,你永远不会以明文形式存储任何内容.如果有人违反您的安全性(或者即使员工有恶意),您也不希望泄露用户的密码.所以你将使用正确的盐渍哈希.

然后,使用5位数的PIN,它太短,无法用哈希保护.有彩虹表(甚至谷歌搜索),如果他们得到哈希,将允许有人获取密码.

  • +1,如果可以,我会给你+10.一个很好的答案.永远不要用纯文本写任何东西,始终警惕自己的人,不要假设你的数据库是安全的. (4认同)
  • 即使在数据库中断的情况下,您也希望保护客户的帐户.如果你把密码放在明文中,你就已经搞砸了.如果你放入哈希,你必须拥有强哈希,因为"彩虹表",预先计算的哈希表,用于给定字符集中的所有可能值.但这只适用于少量字符,因为您需要相当多的计算能力来计算所有值.小写+大写7字母密码使得52 ^ 7的值超过10 ^ 12.只有数字,即使有10个数字,您只能获得10 ^ 11个值. (4认同)
  • 回复我自己的评论,因为600个字符太短.网上有彩虹表可供小字符组使用.您添加到密码规则中的字符越多,创建彩虹表的人就越不可能.关于"恢复"的事情.当然,在闯入之后,您需要恢复所有内容,并设置新的安全性.但重要的是,获取数据的人无法做任何事情.他必须得到无用的哈希.否则,他会在你发现他偷走你的密码数据库之前获得你的用户帐户. (3认同)
  • 您的"可预测结构"参数不起作用.实施安全密码策略,防止常见后缀,适当的最小长度,需要混合大小写,数字,符号,这是微不足道的*. (2认同)

mer*_*uro 14

请记住,具有3.000次尝试的恶意用户可以在几分钟内成功阻止1.000个帐户.另一件事是他可以通过每天尝试数千个不同的账户来改变一次成功登录的几率.是的OpenID不是一种选择?

更新

只是对5位数的东西有点灵感.如果5位数(10 ^ 5 = 100.000)真的很容易记住并且同时安全,那么这些情况如何:

4 letters all lowercase (26^4 = 456.976) => abcd
3 letters with mixed cases (52^3 = 140.608) => aBc
3 letters lowercase + numbers (36^3 = 46.656) => ab1
Run Code Online (Sandbox Code Playgroud)

  • +1表示完全使用OpenID绕过问题. (2认同)