为啥质询-响应方法是忘记密码的糟糕解决方案?
Posted
技术标签:
【中文标题】为啥质询-响应方法是忘记密码的糟糕解决方案?【英文标题】:Why is challenge-response approach a poor solution for forgotten passwords?为什么质询-响应方法是忘记密码的糟糕解决方案? 【发布时间】:2010-10-11 10:44:25 【问题描述】:我的公司正在开发一个在线 HR 和薪资应用程序,其中安全访问至关重要。我很清楚如何锁定大多数身份验证/授权过程,但“忘记密码”页面除外。
我最初的计划是要求用户输入电子邮件地址和对先前选择/输入的挑战问题的回答,并将临时密码邮寄到列出的电子邮件(假设电子邮件是有效的)。但是我读过here 和here(都在SO 上),挑战-响应方法是不安全的。
如果我们只是通过电子邮件发送一个临时密码,真的那么不安全吗?我能想到的唯一更安全的选择是要求用户致电他们的客户服务代表,这会给我们的员工带来很大负担。
我错过了什么......有更好的方法吗?谢谢!
【问题讨论】:
+1 因为这是一个被许多网站处理得非常糟糕的严重问题。如果可以的话,我会给你 +10。 【参考方案1】:不要通过电子邮件发送临时密码,而是通过电子邮件向用户发送 URL+token 到重置密码页面。这样一来,任何密码都不会在未加密的情况下易手。如果最终用户尝试访问该页面并且重置令牌已被使用,那么最终用户也会立即发现他们的帐户已被盗用。
从 cmets 添加:
我认为挑战-响应(“秘密问题”)方面实际上会使事情变得不那么安全,因为它们通常可以通过研究有关目标的公共信息来发现。步骤总数越少,在无人知晓的情况下可以破解的越少。尽早发送重置电子邮件通常是让人们知道正在尝试的好方法。
【讨论】:
link+token 的目的不是为了避免发送密码,而是为了避免当用户错误输入临时密码 T&8yLIO 时出现 PEBCAK。用户临时密码不好的原因,恕我直言。 雷克斯 - 好主意!所以你不反对将挑战响应作为获取重置密码链接的要求? @David 不,不一样。密码是双方都知道的可重复使用的秘密。令牌使用一次并丢弃;并且它只是用于依靠真实用户电子邮件系统的安全性来证明请求者身份的消息。 @LuckyLindy 我认为挑战-响应方面实际上使事情变得不那么安全,因为它们通常可以通过研究有关目标的公共信息来发现。步骤总数越少,被破坏的越少。让重置电子邮件发送可以让人们更早地知道尝试。 @John Fricker 的观点也是有效的——另一个不使用临时密码的好理由。整个概念是有风险的。【参考方案2】:正如article 中所解释的那样,佩林州长的电子邮件帐户最近被黑客入侵,该帐户使用了对先前问题的回答。来自文章:
如帖子中所述,Palin hack 不需要任何真正的技能。相反,黑客只需使用她的出生日期、邮政编码和她在哪里认识她的配偶的信息——她的雅虎帐户上的安全问题,通过简单的 Google 搜索得到答案(Wasilla High)来重置佩林的密码。
【讨论】:
我同意挑战-响应本身是不好的,但是如果我们将它与发回给用户的电子邮件(带有必须单击以更改密码的链接)结合使用,将这不是比只有链接的电子邮件更好吗?【参考方案3】:有几种常见的方法来管理丢失的密码:
秘密问题:它实际上是一种较弱的身份验证形式,就像上面发布的人一样。用户可以选择一些非常简单并且很容易猜到的东西。我建议不要这样做,因为它不需要任何技术“黑客”
邮寄一个新密码。要绕过此控制,需要访问电子邮件帐户或需要中间人 (MITM) 职位:您要么从用户的收件箱中读取临时密码,要么在中间拦截。这种方法很容易被滥用,因为任何人都可以重置密码并强制用户退出系统,如果他无法阅读新密码的电子邮件。
邮寄密码重置哈希,为了避免这种情况,您需要访问收件箱或 MITM,就像在此之前的情况一样,但在确认完成之前实际上不会重置密码。因此,即使他没有阅读电子邮件,用户也不能被锁定在系统之外。将冷却计时器添加到每 8 小时重置一次,以防止您的系统淹没用户的收件箱。
考虑一些带外通信,例如,在印刷合同中记下 PIN。然后让用户使用已知电话号码致电您的帮助台(检查来电显示)并提供他的用户名和 PIN。
【讨论】:
我们正在考虑您的第一个和第二个选项的组合。这不比单独使用更安全吗?【参考方案4】:像 SO 那样外包整个密码管理并使用 OpenId 或类似的东西不是很容易/可行吗?当然,这会增加另一个依赖项,但是您可以将其与保存(和保护)密码的需要进行交换,并按照您的描述处理它们。
【讨论】:
在企业环境中,这根本不可行。 我同意雷克斯的观点。我们将处理 10,000-40,000 名用户,其中许多人是计算机文盲(即登录查看工资单、更改 401K 注册、打印 W-2 等)。要求 OpenId 似乎是一个巨大的痛苦,并剥夺了我们对非常敏感数据的一些控制权。 好吧,公平的论点。但在其他情况下,取消对敏感数据的控制将是一件好事。 (我完全接受这不适用于这里,但我喜欢这个问题有这么多不同的角度)【参考方案5】:您说这是一个在线人力资源和工资单应用程序。您是否可以选择让用户表明他/她忘记了他/她的密码,并向 HR 代表或组织中可以确认身份的某些官员发送消息,然后重设密码?
【讨论】:
这不是一个坏主意......虽然大多数时候人力资源代表将是访问我们系统的人,而且如果他们的员工访问它,他们可能会因为更改密码而烦恼(查看它是我们的工作)。感谢您的反馈!【参考方案6】:简而言之,挑战问题通常是最薄弱的环节。它们比密码更容易猜到,并且有效地充当密码的代理,因此它们实际上降低了安全性,而不是通过提供另一种实际上更容易破解的攻击向量来增强安全性。 Web Application Hacker's Handbook 提供了有关该领域的一些重要信息。
【讨论】:
当然,但是如果输入密码问题会重置并通过电子邮件发送密码,那不是比直接发送密码更好吗? @Jess - 这完全没有必要。如果您只是发送一个允许重置密码并在短时间内过期的链接,则无需强制用户记住/管理他们极有可能忘记的其他秘密数据。让不记得密码的用户准确记住他们是如何键入其他问题的答案的,以便他们可以重置密码,这是一种根本有缺陷的方法。而且它不必要地使忘记密码的过程更加麻烦。如果用户不记得自己的挑战答案,则无法重置密码!以上是关于为啥质询-响应方法是忘记密码的糟糕解决方案?的主要内容,如果未能解决你的问题,请参考以下文章