fad*_*bee 11 passwords hash banking
某些(特别是银行)密码系统要求您输入密码中的三个(指定)字母才能登录.这应该会击败键盘记录程序,并可能会有线嗅探重放攻击(对于未加密的会话).
显然,这样的方案无法使用普通密码散列,因为您需要知道整个密码来计算散列.
这些系统通常存储服务器端以使其工作?
他们是用明文存储密码,还是每个字母的单独哈希,或者是什么?
Ilm*_*nen 17
正如您所正确注意的那样,如果仅使用密码的子字符串进行身份验证,则标准密码哈希方案将不起作用.可以通过多种方式实现这样的系统:
将密码存储在plain中:
存储密码加密,解密检查:
存储所有(或足够多)可能的子串的哈希:
最终,如果数据库受到损害,所有这些方案都会遭受暴力攻击的弱点.其根本原因在于,在典型密码(或者甚至是特别强大的密码)的三个字母子字符串中,熵不是很多,因此不需要多次猜测就可以破解.
哪个最好?这很难说.如果我必须选择其中一种方案,我可能会使用强对称加密(例如AES)进行加密存储,使用单独的服务器或HSM来处理加密和验证.这样,至少,攻击前端服务器的攻击者无法复制数据库并离线攻击它(尽管如果它没有实现有效的速率限制,他们仍然可以对HSM进行暴力攻击).
但是,我要说只使用部分密码进行身份验证的整个想法存在严重缺陷:它并没有真正提供它应该带来的安全性好处,除了在一些特别受限制的攻击场景中(例如窃听者)只能观察一个身份验证事件,并且不能一直尝试直到他们遇到相同的挑战),但它通过减少成功身份验证所需的信息量从根本上削弱了安全性.对于部分密码认证应该解决的安全问题,有更好的解决方案,例如TAN.