我最近发现了一个密码不区分大小写的服务。我了解加密和散列的基本原理,所以我有点担心,该服务是否以纯文本形式存储我的密码?
您能否向我解释为什么当我的密码不是大写时能够使用 Caps Lock 登录是不好的?我应该担心吗?
更多测试表明,所有形式的密码都被接受,例如“HAPPY”、“HAPPY”和“hAPPY”。
我最近发现了一个密码不区分大小写的服务。我了解加密和散列的基本原理,所以我有点担心,该服务是否以纯文本形式存储我的密码?
您能否向我解释为什么当我的密码不是大写时能够使用 Caps Lock 登录是不好的?我应该担心吗?
更多测试表明,所有形式的密码都被接受,例如“HAPPY”、“HAPPY”和“hAPPY”。
您是否应该担心取决于您所保护的内容的敏感性。保护存放我的税收和医疗信息的文件柜的锁不需要那么安全,而且我不担心锁的设计成本低。但我希望保护我的钱的锁非常安全。这确实表明他们在设计系统时可能没有非常清楚地考虑安全性。
使密码不区分大小写会大大减少可能性的数量。6 个不区分大小写的仅字母密码有 2^28 个可能的密码,而 6 个字符的区分大小写的密码有 2^34 个可能的密码。这种减少的搜索空间使得对泄露的哈希数据库的攻击更加可行。
正如 Jeff Ferland 在下面指出的那样,锁定大写并不意味着该站点不区分大小写。如果我输入密码,然后点击大写锁定,它就会出现密码。这个案子只是倒过来了。如果站点正在这样做,那么密码仍然区分大小写,但只是尝试原始的和反转的密码。这只是将搜索空间减半。这只是一个可用性/安全性的权衡,因为人们通常有大写锁定并且不知道它,并且(至少 IMO)一个很好的。
从这一事实中无法判断该服务是否以明文形式存储您的密码。在散列完成之前将所有内容更改为一种情况是微不足道的。
密码系统是否以明文形式存储您的密码与是否区分大小写无关。许多设计不良的系统需要区分大小写的密码,但以明文形式存储。
至于您是否应该担心,任何不需要区分大小写密码的系统都已将唯一密码的数量大大减少了一半或更少。这对用户来说可能很方便,但例如,一个不区分大小写的 8 个字符的密码有 208,827,064,576(2080 亿)种可能的变体。区分大小写?53,459,728,531,456(53 万亿)个组合。当 Case 不是问题时,蛮力破解者需要运行来查找您的密码的时间要少得多。加上数字 (0-9),这个数字翻了两番,达到 213 万亿。
当然,用户往往会忽略良好的密码安全功能,例如使用强混合字符密码、不重复使用密码、定期更改密码、不使用字典单词,因此他们可能已决定不需要太复杂的密码。
关于大写锁定的行为不会告诉您有关服务器端使用的散列算法的任何信息。
可能是服务器上的哈希确实是使用您输入的密码计算的。但是在密码无效时,服务器可能会简单地反转您输入的每个字母的大小写,然后再试一次。这种方法实际上对安全性没有影响,但如果用户经常忘记他们的大写锁定已打开,则可能会显着减少支持案例的数量。
密码也可能根本不区分大小写。同样,它并没有告诉您有关散列的任何信息。他们可能只是在散列之前将整个密码转换为小写(或大写)。这减少了可能的熵量,因此在这样的系统上,您的密码需要长约 15% 才能具有相同的强度。
能够使用大写锁定登录并不一定意味着您的密码以纯文本形式存储,因为该服务可能会在散列并将其存储在数据库中之前将大写应用于所有密码,当然当用户登录时它也会这样做在。
建议在密码中同时使用大写和小写字母,以使密码更难猜。