提示用户只输入部分密码

Posted

技术标签:

【中文标题】提示用户只输入部分密码【英文标题】:Prompt the user to enter only part of the password 【发布时间】:2021-11-05 22:04:27 【问题描述】:

有一个我经常使用的网上银行网站,它验证用户的方式是询问他们的安全问题,并且只输入他们密码的 3 个随机字符。

我一直想知道他们是如何在系统上存储用户密码的,肯定不是纯文本吗?或者是吗?此外,它不能被散列,因为每次登录所需的字符都会改变。它背后的想法是什么?

【问题讨论】:

这在很多层面上听起来都是错误的。它消除了使用密码管理器的选项,这是为许多站点设置不同的复杂密码的最安全方法。它使后端的安全密码存储几乎不可能。这是可怕的用户体验(即使对于我知道的密码,我也不能轻易输入给定的字母)。现代标准不再推荐安全问题(例如 NIST 800-63)。等等......我想知道这应该减轻什么威胁。 我同意你的看法。 【参考方案1】:

此类身份验证系统旨在提供针对键盘记录器/流量拦截的保护,因为如果登录详细信息被拦截,攻击者只会获得密码的几个字符而不是整个密码。遗憾的是,银行业的大部分人仍在使用它们,而不仅仅是实施实际的 MFA(尽管这似乎正在缓慢改善)。

您说得对,如果密码经过哈希处理,则无法使用这种身份验证,但这并不一定意味着它必须以纯文本形式存储。

假设他们已经很好地实现了,密码应该加密存储,而不是纯文本。也可能存在分离元素,因此存储密码的系统与用户正在与之交互的前端是分开的,因此您可以拥有这样的身份验证流程:

前端使用用户名/ID 查询身份验证微服务。 微服务响应它想要的三个字符。 要求用户输入字符。 前端将这三个字符发送到微服务。 微服务响应成功或失败。

这样,前端的入侵不会直接暴露用户的密码,并且您可以对身份验证微服务实施控制(例如日志记录和速率限制),以帮助识别和保护被入侵的前端。

【讨论】:

有趣的是,它适用于键盘记录程序。但是知道别人可以知道你的密码是非常不安全的,因为如果它被加密了,那么它就可以被解密! @sandrows 如果有人入侵了您的银行,以至于他们可以同时获得加密密码和解密密钥(以及可能的以及用于保护这些的 KEK),他们可能无论如何都会窃取您的钱.而且,如果您在其他网站上重复使用您的网上银行密码,则更有可能在其中一个网站上被盗用。这当然不理想,但是假设银行有可靠的安全性,它所带来的实际风险是相当低的。 它对键盘记录器不是很有效,因为无论如何都会按下键,即使在密码为 10 个字符的情况下,在第二次观察到的身份验证后,每个字符都有 50+% 被泄露.这远非一个好的缓解措施。如果键盘记录器是威胁,那么使用屏幕键盘会更有用。密码存储的加密也不安全。虽然您可以围绕它构建各种缓解措施(这些银行无论如何都应该这样做),但行业标准方法是存储通过适当的 KDF 派生的哈希值。并非所有威胁都是外部威胁。 因此,简而言之,如果键盘记录器实际上是由此减轻的威胁,那么该解决方案提供的攻击面要比通过阻止键盘记录器读取密码一次性(但不能通过多次登录)。 还知道一个相当知名的问题的答案(很多人会知道用户第一辆车的型号,或者他们可以猜测),密码的 3 个字符将需要 ~238k尝试最坏的情况 - 不到一分钟,除非有进一步的缓解措施(我想有,但无论如何)。这种解决方案根本没有多大意义,而且根本不安全。

以上是关于提示用户只输入部分密码的主要内容,如果未能解决你的问题,请参考以下文章

电脑管家里的路由器管家为啥老是提示密码错误,登不上去

文件及输入输出流模拟ATM机

实现基于Java web的图书管理系统

实现基于Java web的图书管理系统

路由器admin密码错误怎么办

MySQL部分语法