我可以理解,对密码施加最小长度非常有意义(为了节省用户),但我的银行要求密码长度在6到8个字符之间,我开始想知道......
难道这不会让蛮力攻击更容易吗?(坏)
这是否意味着我的密码未加密存储?(坏)
如果某人(希望)有一些优秀的IT安全专业人员为他们工作,那么我是否应该考虑做类似的事情?这有什么优点/缺点?
密码被散列为32,40,128,无论长度如何.最小长度的唯一原因是为了防止容易猜到密码.没有最大长度的目的.
强制性的XKCD解释了如果你施加最大长度,你为什么要对你的用户造成伤害:
在密码字段中指定的最大长度应该被视为安全警告:任何明智的,注重安全的用户必须承担最坏的情况,并期望该网站按字面意思存储您的密码(即没有哈希,如epochwolf所述).
在这种情况下:(a)尽可能避免像瘟疫一样使用这个网站[他们显然知道关于安全的问题](b)如果你必须使用网站,请确保你的密码是唯一的 - 不像你在别处使用的任何密码.
如果您正在开发一个接受密码的网站,请不要设置愚蠢的密码限制,除非您想要使用相同的刷子涂焦油.
[在内部,当然,您的代码可能只将第一个256/1028/2k/4k(无论如何)字节视为"重要",以避免对猛犸密码进行处理.
如果您接受来自不受信任来源的密码,则允许完全无限制的密码长度有一个主要缺点.
发件人可能会尝试给您这么长的密码,导致其他人拒绝服务.例如,如果密码是1GB的数据,那么您将花费所有时间接受它,直到内存不足为止.现在假设此人向您发送此密码的次数是您愿意接受的次数.如果您对所涉及的其他参数不小心,则可能导致DoS攻击.
按照今天的标准,将上限设置为256个字符似乎过于慷慨.
首先,不要假设银行拥有为他们工作的优秀IT安全专业人员. 很多都没有.
也就是说,最大密码长度毫无价值.它通常要求用户创建一个新密码(关于暂时在每个站点上使用不同密码的值的论据),这增加了他们将其写下来的可能性.它还极大地增加了从蛮力到社会工程的任何矢量对攻击的敏感性.
OWASP身份验证备忘单现在不鼓励最大密码长度限制
https://www.owasp.org/index.php/Authentication_Cheat_Sheet
引用整段:
较长的密码提供了更多的字符组合,从而使攻击者更难以猜测.
密码的最小长度应由应用程序强制执行.短于10个字符的密码被认为是弱的([1]).虽然最小长度执行可能会导致在某些用户之间记忆密码出现问题,但应用程序应鼓励他们设置密码(句子或单词组合),这些密码可能比典型密码长得多,但更容易记住.
最大密码长度不应设置得太低,因为它会阻止用户创建密码短语.典型的最大长度为128个字符.短语短于20个字符的短语通常被认为是弱的,如果它们只包含小写拉丁字符.每个角色都算!!
确保用户输入的每个字符实际包含在密码中.我们已经看到系统以比用户提供的更短的长度截断密码(例如,当他们输入20时截断为15个字符).这通常通过将所有密码输入字段的长度设置为与最大长度密码完全相同的长度来处理.如果您的最大密码长度很短,如20-30个字符,这一点尤为重要.
我可以想象实施最大密码长度的一个原因是前端必须与许多遗留系统后端接口,其中一个后端本身强制执行最大密码长度.
另一个思考过程可能是,如果用户被迫使用短密码,他们更容易发明随机乱码而不是容易猜到(通过他们的朋友/家人)的短语或昵称.这种方法当然只有在前端强制执行混合数字/字母并拒绝具有任何字典单词的密码(包括用l33t-speak编写的单词)时才有效.