为什么密码限制为 16 个字符?

信息安全 密码 密码策略
2021-08-22 21:19:42

大多数网站限制为 16 个字符的原因是什么?

我会认为密码越长就越难有人破解它?

它与哈希冲突有关吗?

2个回答

如果您要遵守CWE-521:弱密码要求然后所有密码必须具有最小和最大密码长度。

限制密码大小有两个原因。一方面,对大量数据进行散列可能会导致服务器消耗大量资源,并且很容易成为拒绝服务的目标。特别是如果服务器正在使用 PBKDF2 等密钥拉伸。

另一个问题是哈希长度扩展攻击或针对 MD5 的前缀攻击。但是,如果您使用的是未损坏的哈希函数,例如 bcrypt 或 sha-256 ,那么这不应该是密码的问题。

恕我直言 16 字节太小了bcrypt 有一个 72 个字符的内置上限,这对于重散列函数来说可能是一个合理的大小。这些函数使用的密钥拉伸创建了算法复杂性攻击或 ACA 的可能性。

大多数网站限制为 16 个字符的原因是什么?

任意实施限制。

也许他们只想分配一个 17 字节的缓冲区(16 个 ASCII/1 字节字符 + 终止 NUL)。

也许他们认为拥有超过 16 个字符的密码是无用的或愚蠢的,因为他们对密码一无所知。

我会认为密码越长就越难有人破解它?

的确。具有均匀分布的 16 个随机独立字母字符的密码具有足够的熵。但是人类不善于随机选择 16 个均匀分布的随机独立字母字符,而且非常不善于记住这种无意义的字符序列,所以他们选择了自己能记住的密码,但每个字符的熵更少。

重要的是总熵,而不是每个字符的熵。例如,用单词骰子生成的随机字典单词序列(单词骰子:在字典中打开一个随机页面等)比使用字母骰子获得的字母序列更容易记住。

这样的密码将比纯粹的随机字母序列长,但在熵相等的情况下,它们会更容易记住;或者,如果您愿意,它们将有更多的熵来获得同等的心理记忆努力。

为了获得足够的强度,这些由字典单词组成的密码可能超过 16 个字符。

换句话说,这个限制是愚蠢的

它与哈希冲突有关吗?

不。

对于短密码的冲突没有正式的保证,但哈希冲突的实际影响是不存在的。