我不是特别精通 IT 安全,所以请多多包涵。
我最近发现我的银行的在线系统将接受由正确密码和一串随机字符组成的密码。例如,如果我的密码是“password”,它将接受“password1”或“password43435”之类的内容。我相当确定这不应该发生在任何类型的散列+盐方法,甚至是字符串比较中。这让我担心它非常不安全,所以我想知道是否有任何安全的方法来存储允许这样的事情发生的密码。如果没有,谁能解释这样的事情是如何发生的?
我不是特别精通 IT 安全,所以请多多包涵。
我最近发现我的银行的在线系统将接受由正确密码和一串随机字符组成的密码。例如,如果我的密码是“password”,它将接受“password1”或“password43435”之类的内容。我相当确定这不应该发生在任何类型的散列+盐方法,甚至是字符串比较中。这让我担心它非常不安全,所以我想知道是否有任何安全的方法来存储允许这样的事情发生的密码。如果没有,谁能解释这样的事情是如何发生的?
当然有,但这并不意味着这是一个好习惯。
可能您的银行将您的密码切成八个字符(这个限制在旧系统中被高度使用)。您的银行只需获取字符串的前八个字符,对其进行哈希处理并与他们自己的哈希值进行比较。这是安全的,至少与其密码的长度限制一样安全。
还有更多的可能性,比如他们用前 4,5,6,7...N(其中 N 是用户输入的字符串的长度)字符尝试字符串中的每个哈希,直到找到匹配项,但我相信我的第一个猜测是好的=)
因此,您将拥有与前八个字符(或它们使用的数量)一样安全的登录。如果他们只是使用第二种方法(我非常怀疑),登录将与您的密码长度一样安全。
我不会喜欢我的银行这样做,但是......考虑到如果他们被黑客入侵,他们将承担责任,因为你的钱是由他们担保的(但你会头疼)。
这不是很安全,但对于银行来说,这是一种并不少见的模式。可能发生的情况是他们有一个后端系统(想想大型机或其他遗留平台),该系统对密码长度有硬性上限。
所以我猜他们正在做的是截断密码,可能是在将密码传递给大型机进行存储之前。在此基础上,只要他们总是在散列之前截断密码,他们就可以正确地散列密码。或者,他们可能正在对其进行加密并使用某种形式的安全硬件(例如硬件安全模块(HSM))来保护加密密钥。