问题 密码系统要求个人信件 - 他们存储什么?


某些(特别是银行)密码系统要求您输入密码中的三个(指定)字母才能登录。 这应该是击败键盘记录器,并可能是线程嗅探重放攻击(对于未加密的会话)。

显然,这种方案无法使用普通密码散列,因为您需要知道整个密码来计算散列。

这些系统通常存储服务器端以使其工作?

他们是用明文存储密码,还是每个字母的单独哈希,或者是什么?


3407
2017-11-22 12:33


起源

不一定 - 这已在ITSecurity.SE上得到解答: security.stackexchange.com/questions/4830/... 。也可以看看 smartarchitects.co.uk/news/9/15/Partial-Passwords---How.html - Piskvor
也许这只是我,但我从来没有见过银行问我三个字母。仅限于 TAN。 - PiTheNumber
@PiTheNumber:不是 只要 你,但有些银行做了(做了?)这个;我亲身经历过这一点。请注意,这是一个在广泛采用手机之前实现的系统(已经启用了TAN),我不确定它是否仍然在该特定银行使用。 - Piskvor


答案:


正如您所正确注意的那样,如果仅使用密码的子字符串进行身份验证,则标准密码哈希方案将不起作用。可以通过多种方式实现这样的系统:

将密码存储在plain中:

  • 简单易行。
  • 如果数据库受到危害则不安全。
  • 可能不符合要求散列或加密密码存储的规定(但使用低级数据库加密可能会解决此问题)。

存储密码加密,解密以检查:

  • 如果加密密钥也受到损害,则不比将其存储在普通文件中更安全。
  • 可以满足规定禁止密码存储的规定。
  • 使用专用可以使安全性更高 硬件安全模块 或单独的身份验证服务器,它将存储密钥并提供用于加密和子串验证的黑盒接口。

存储所有(或足够多)可能的子串的哈希:

  • 需要比其他解决方案更多的存储空间。
  • 如果数据库受到损害,密码仍然可以通过暴力相当容易地恢复,因为每个子字符串都可以单独攻击。

使用 ķ-在......之外-ñ 门槛秘密共享

  • 比存储多个哈希需要更少的空间,但不仅仅是以普通方式存储密码或使用可逆加密。
  • 无需解密子串验证的密码。
  • 如果数据库遭到破坏,仍然容易受到暴力攻击:任何可以猜测的人 ķ 密码的字母可以恢复其余的。 (事实上​​,通过一些实现, ķ-1个字母可能就够了。)

最终,如果数据库受到损害,所有这些方案都会遭受暴力攻击的弱点。其根本原因在于,在典型密码(或者甚至是特别强大的密码)的三个字母子字符串中,熵不是很多,因此不需要多次猜测就可以破解。

哪个最好?这很难说。如果我  为了选择其中一种方案,我可能会使用强对称加密(例如AES)进行加密存储,使用单独的服务器或HSM来处理加密和验证。这样,至少,攻击前端服务器的攻击者无法复制数据库并离线攻击它(尽管如果它没有实现有效的速率限制,他们仍然可以对HSM进行暴力攻击)。

但是,我要说只使用部分密码进行身份验证的整个想法存在严重缺陷:除了少数特别受限制的攻击情形(如窃听者)之外,它并没有真正提供它应有的安全优势。只能观察一个身份验证事件,并且不能一直尝试直到他们遇到相同的挑战),但它通过减少成功身份验证所需的信息量从根本上削弱了安全性。有更好的解决方案,例如 的TAN,部分密码认证应该解决的安全问题。


15
2017-11-22 14:21