大多数网站限制为 16 个字符的原因是什么?
我会认为密码越长就越难有人破解它?
它与哈希冲突有关吗?
大多数网站限制为 16 个字符的原因是什么?
我会认为密码越长就越难有人破解它?
它与哈希冲突有关吗?
如果您要遵守CWE-521:弱密码要求。然后所有密码必须具有最小和最大密码长度。
限制密码大小有两个原因。一方面,对大量数据进行散列可能会导致服务器消耗大量资源,并且很容易成为拒绝服务的目标。特别是如果服务器正在使用 PBKDF2 等密钥拉伸。
另一个问题是哈希长度扩展攻击或针对 MD5 的前缀攻击。但是,如果您使用的是未损坏的哈希函数,例如 bcrypt 或 sha-256 ,那么这不应该是密码的问题。
恕我直言 16 字节太小了。bcrypt 有一个 72 个字符的内置上限,这对于重散列函数来说可能是一个合理的大小。这些函数使用的密钥拉伸创建了算法复杂性攻击或 ACA 的可能性。
大多数网站限制为 16 个字符的原因是什么?
任意实施限制。
也许他们只想分配一个 17 字节的缓冲区(16 个 ASCII/1 字节字符 + 终止 NUL)。
也许他们认为拥有超过 16 个字符的密码是无用的或愚蠢的,因为他们对密码一无所知。
我会认为密码越长就越难有人破解它?
的确。具有均匀分布的 16 个随机独立字母字符的密码具有足够的熵。但是人类不善于随机选择 16 个均匀分布的随机独立字母字符,而且非常不善于记住这种无意义的字符序列,所以他们选择了自己能记住的密码,但每个字符的熵更少。
重要的是总熵,而不是每个字符的熵。例如,用单词骰子生成的随机字典单词序列(单词骰子:在字典中打开一个随机页面等)比使用字母骰子获得的字母序列更容易记住。
这样的密码将比纯粹的随机字母序列长,但在熵相等的情况下,它们会更容易记住;或者,如果您愿意,它们将有更多的熵来获得同等的心理记忆努力。
为了获得足够的强度,这些由字典单词组成的密码可能超过 16 个字符。
换句话说,这个限制是愚蠢的。
它与哈希冲突有关吗?
不。
对于短密码的冲突没有正式的保证,但哈希冲突的实际影响是不存在的。