我可以理解,对密码施加最小长度很有意义(以保护用户免受自身伤害),但我的 银行 要求密码长度在 6 到 8 个字符之间,我开始想知道......

  • 这不是会让暴力攻击变得更容易吗?(坏的)
  • 这是否意味着我的密码未加密存储?(坏的)

如果有人(希望)有一些优秀的 IT 安全专业人员为他们工作,并且规定了最大密码长度,我是否应该考虑做类似的事情?这有什么优点/缺点?

有帮助吗?

解决方案

密码被哈希为 32、40、128,无论长度如何。最小长度的唯一原因是防止密码容易被猜到。最大长度没有目的。

强制性的 西科CD 解释为什么如果您强加最大长度,就会对用户造成伤害:

The obligatory 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 编写的单词)的密码时,这种方法才有效。

强制规定最大密码长度的一个潜在有效原因是对其进行散列处理(由于使用 bcrypt 等慢速散列函数)占用太多时间;可能被滥用以对服务器执行 DOS 攻击的东西。

再说一遍,服务器应该配置为自动删除耗时过长的请求处理程序。所以我怀疑这会是一个大问题。

我认为您在两个要点上都非常正确。如果他们按照应有的方式存储散列密码,那么密码长度不会影响他们的数据库架构。开放式密码长度会带来暴力攻击者必须考虑的又一个变量。

除了糟糕的设计之外,很难找到任何限制密码长度的借口。

我认为最大密码长度的唯一好处是消除因密码过长而引起的缓冲区溢出攻击的风险,但是有更好的方法来处理这种情况。

存储很便宜,为什么要限制密码长度。即使您对密码进行加密而不是仅对其进行哈希处理,64 个字符的字符串也不会比 6 个字符的字符串多得多。

银行系统很可能覆盖旧系统,因此他们只能为密码留出一定的空间。

我的银行也这样做。它曾经允许任何密码,我有一个 20 个字符的密码。有一天我改变了它,你瞧,它给了我最多 8 个字符,并且删除了我旧密码中的非字母数字字符。对我来说没有任何意义。

当我使用非字母数字的 20 个字符密码时,银行的所有后端系统都可以正常工作,因此旧版支持不可能是原因。即使是这样,他们仍然应该允许您拥有任意密码,然后创建适合遗留系统要求的哈希值。更好的是,他们应该修复遗留系统。

智能卡解决方案不适合我。我的卡已经太多了……我不需要其他的花招。

如果您接受任意大小的密码,那么人们会认为在对其进行哈希处理之前,出于性能原因,它会被截断为幕长度。截断的问题是,随着服务器性能随着时间的推移而提高,您无法轻松增加截断之前的长度,因为它的哈希值显然会有所不同。当然,您可以有一个过渡期,对两个长度进行散列和检查,但这会使用更多资源。

忽略那些说不要验证长密码的人。Owasp 字面意思是 128 个字符就足够了。为了给予足够的喘息空间,如果您愿意,您可以多给一点,比如 300、250、500。

https://www.owasp.org/index.php/Authentication_Cheat_Sheet#Password_Length

密码长度更长的密码提供了更大的字符组合,因此使攻击者更难猜测。

...

最大密码长度不应设置得太低,因为它将阻止用户创建密码。 典型的最大长度为128个字符. 。密码短于20个字符通常被认为是弱的,如果它们仅由较低的案例拉丁字符组成。

是否应该有最大长度?这是 IT 领域一个奇怪的话题,因为较长的密码通常更难记住,因此更有可能被写下来(出于明显的原因,这是一个大禁忌)。较长的密码往往更容易被遗忘,这虽然不一定存在安全风险,但可能会导致管理麻烦、生产力下降等。认为这些问题紧迫的管理员可能会规定密码的最大长度。

我个人认为,在这个具体问题上,每个用户都有自己的看法。如果您认为您可以记住 40 个字符的密码,那么您的力量就更大了!

话虽如此,密码很快就成为一种过时的安全模式,智能卡和证书身份验证证明很难甚至不可能像您所说的那样进行暴力破解,并且只需要将公钥与私钥一起存储在服务器端始终在您的卡/计算机上输入密钥。

较长的密码或密码短语更难仅根据长度来破解,并且比要求复杂的密码更容易记住。

可能最好采用相当长的(10+)最小长度,限制长度毫无用处。

遗留系统(已经提到)或外部供应商系统的接口可能需要 8 个字符的上限。这也可能是一种试图拯救用户的错误尝试。以这种方式限制它会导致太多 pssw0rd1、pssw0rd2 等。系统中的密码。

密码无法进行哈希处理的原因之一是所使用的身份验证算法。例如,一些 摘要算法 需要服务器上的明文版本的密码,因为身份验证机制涉及客户端和服务器对输入的密码执行相同的数学运算(通常不会每次都产生相同的输出,因为密码与随机生成的密码相结合) 'nonce',在两台机器之间共享)。

通常,这可以得到加强,因为在某些情况下可以部分计算摘要,但并非总是如此。更好的途径是使用可逆加密来存储密码 - 这意味着应用程序源需要受到保护,因为它们将包含加密密钥。

Digst auth 允许通过其他非加密通道进行身份验证。如果使用 SSL 或其他一些全通道加密,则无需使用摘要身份验证机制,这意味着密码可以以散列形式存储(因为密码可以通过线路安全地以明文形式发送(对于给定的安全值))。

除非必要,尽量不要施加任何限制。被警告:在许多不同的情况下,它可能而且将会是必要的。处理遗留系统是这些原因之一。确保很好地测试了很长密码的情况(您的系统可以处理 10MB 长密码吗?)。您可能会遇到拒绝服务 (DoS) 问题,因为您将使用的密钥解密函数 (KDF)(通常是 PBKDF2、bcrypt、scrypt)会占用大量时间和资源。现实生活中的例子: http://arstechnica.com/security/2013/09/long-passwords-are-good-but-too-much-length-can-be-bad-for-security/

仅有 8 个字符长的密码听起来根本就是错误的。如果应该有限制,那么至少 20 个字符是更好的主意。

我认为唯一应该应用的限制是 2000 个字母的限制,或者其他高得离谱的限制,但只是为了限制数据库大小(如果这是一个问题)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top