如何针对密码的特定字母进行身份验证[重复]

Posted

技术标签:

【中文标题】如何针对密码的特定字母进行身份验证[重复]【英文标题】:How to authenticate against specific letters of a password [duplicate] 【发布时间】:2013-02-15 20:51:42 【问题描述】:

某些网站(例如 Halifax 和 Barclaycard 等银行)会提示用户输入特定的密码字母。但是,如果用户的密码被加盐和散列,那么我看不到如何使用各个字母。所以要么密码没有被散列,要么有另一个过程在起作用。可能每个单独的密码字母都经过加盐和哈希处理,但这似乎不是特别安全。

谁能解释这里使用的是什么身份验证模型?鉴于这是相当普遍的地方,我必须假设有一个受信任的模型来支持这种做法。

编辑:我找到的最佳答案实际上是在security.stackexchange.com 'How do some sites (e.g. online banks) only ask for specific characters from a password without storing it as plaintext?',所以我也会投票结束我的问题。

【问题讨论】:

我希望您不要考虑在自己的项目中使用该模型。 目前还没有,但鉴于它存在于我所描述的情况中,它会让我相信它背后有一个强大的模型。正因为如此,我想知道它是否是一个可行的选择以及它是如何工作的,最好是从已经实施它的人那里。 哦,你不应该这样假设!即使它被看似大公司使用,他们仍然可能是错误的。我的意思是,如果只要求您输入密码的三个字母,那么无论您的实际密码有多长,访问您帐户的密码也只有三个字母。 没错,我完全同意,尽管尝试通常受到限制,并且不同的会话需要不同的字母。但是是否有一种强大/安全的方式来存储密码并执行此操作? 【参考方案1】:

您的信任可能错位了。加盐并不能防止暴力攻击,只能使用彩虹表。如果你给每个单独的字符加盐,那么这将是微不足道的破解。类似地,对四个字符的每个组合进行加盐和散列处理也很容易被蛮力破解。您的密码几乎可以肯定是以未加密的方式存储的。

这并不像听起来那么糟糕,散列仅对阻止获取密码数据库内容的人有用。如果人们可以访问您的银行密码数据库,那么您很可能还有其他问题。例如,他们可能不需要您的密码来转账。

如果你仔细想想,不可能安全地做到这一点。如果您有一些预言机需要 1 秒来验证密码的四个字符(每个可能有 36 个可能的值),那么您可以在平均 839,808 次尝试后破解四个字符,这需要 10 天。如果密码长度为 12 个字符,则完全破解它需要一个月的时间。登录时间不到 1 秒。

【讨论】:

你确定是这样吗?如果金融机构以未加密的方式存储我们的密码,我会感到惊讶,即使数据库的访问权限已被确定。不要忘记,过去几年的许多安全漏洞实际上都涉及到场外数据。 我不确定这一点,而且你不太可能找到知道的人。没有银行会告诉任何人他们是如何做到这一点的,以防他们因此受到负面新闻。我想说的是,在数学上不可能做得更好。如果您可以有效地执行该查询,那么攻击者也可以,这意味着他可以一次破解四个字符。 @Digbyswift 我已经编辑了我的答案以强调这一点。 感谢您提供信息并扩展您的回答。

以上是关于如何针对密码的特定字母进行身份验证[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用密码中的一些字母进行身份验证

在 Silverlight 中使用表单进行 Windows 身份验证 [重复]

如何使用spring security使用空密码进行基本身份验证?

使用 Basic Auth 针对另一个应用程序对 Springboot 应用程序进行身份验证

Laravel:针对远程检查凭据的系统进行身份验证

如何在C#中模拟没有密码的Windows身份验证登录用户