首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对一组被破坏的密码进行密码验证

针对一组被破坏的密码进行密码验证
EN

Security用户
提问于 2021-04-22 07:43:31
回答 2查看 388关注 0票数 2

NIST和OWASP ASVS建议检查密码与从以前的数据破坏中获得的密码。这些密码的列表可以从“300 be Pwned”(https://haveibeenpwned.com/Passwords)下载,但是有超过3亿的pwned密码。您是否建议将用户的密码(注册、更改密码,甚至每一次成功登录)与这么大的列表进行比较?会不会对演出影响太大?

将密码与诸如前1000或10000位最常见的密码(例如https://github.com/danielmiessler/SecLists/tree/master/Passwords )这样的较小列表进行比较是否更好呢?这是来自OWASP ASVS的确切建议。

EN

回答 2

Security用户

回答已采纳

发布于 2021-04-22 09:19:33

您是否建议将用户的密码(注册、更改密码,甚至每一次成功登录)与这么大的列表进行比较?

为了保证合理的安全性,我建议在注册和更改密码期间,根据10,000个密码的列表检查密码。还阻止包含公司名称、应用程序名称或用户名的密码。

为了进一步提高安全性,您可以增加区块列表的大小。更大的大片更安全,但回报却越来越少。

如果用户已经配置了密码,然后在不相关的数据泄露时公开密码,则登录检查非常有用。这只在您定期更新数据库或使用API接口时才有效。

有关讨论,请参见本ASVS发行

会不会对演出影响太大?

如果正确实现,在一个有3000万个密码的数据库中查找可以非常快。但是,要实现它比在有10000行的文本文件中查找要困难一些。因此,与其说是服务器执行时间,不如说是开发人员时间的成本。

票数 2
EN

Security用户

发布于 2021-04-22 08:43:12

“每一个成功的登录”都是毫无意义的浪费,除非您刚刚实现了密码检查功能,而且以前没有它,在这种情况下,检查每个用户的登录一次可能是有意义的。只有在你添加了一堆新密码之后才会有意义。向身份验证DB中添加一个字段,该字段指示是否对列表检查了每个密码(默认为false),并对每个字段进行一次检查,在字段通过后将其切换为true (不匹配)。那些匹配列表的人会被迫更改它(如果他们拒绝,让他们的字段为false,甚至只是标记帐户“必须更改密码”)。在创建时检查新密码(新用户中的任何一个,或者用户更改或重置它们),一旦它们通过,字段就被设置为true。

pwned密码列表可以通过几种方式进行排序,但是“字母表”(通过字符串比较逻辑)很明显,并且允许极快的查找(二进制搜索)。在数据库表中填充适当的索引,您甚至不必自己编写查找逻辑。不检查所有3亿的内存是没有任何性能原因的;它仅仅是检查10,000次的两倍多(这还不够,真的),对于任何有少量RAM的良好DB引擎来说,这是一个相当容易的任务(给它足够的RAM,整个列都可以保存在RAM中,尽管没有这一点,它也会非常快)。但是,您可能会发现,在某个阈值中,曾经被泄露过的密码仍然是可以容忍的(可能在转储中只看到过一次密码,或者只是看不到百万个最常见的密码,或者其他类似的东西)。不过,最安全的选择肯定是检查它们。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/248585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档