提示用户只输入部分密码

Prompt the user to enter only part of the password

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

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

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

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

假设他们实施得很好,密码应该加密存储,而不是纯文本。可能还有一个分离元素,以便存储密码的系统与用户正在交互的前端分离,因此您可以有这样的身份验证流程:

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

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