最大密码的最小密码长度

时间:2011-02-19 18:10:11

标签: security hash character-encoding passwords

假设使用扩展的ASCII字符集的SHA 256哈希和完全随机的密码,是否有一个特定的长度,之后额外的字符不会增加熵,如果是这样,这是什么?

感谢。

4 个答案:

答案 0 :(得分:4)

哈希不会增加熵,它只是,可以说,提炼它。由于SHA256产生256位输出,如果你为它提供一个完全不可预测的密码(即输入的每一位代表一位熵),那么超过256位输入的任何东西或多或少都会被浪费掉。

然而,除了来自真正的随机源之外,输入每位输入都有一位熵的输入真的很难。对于典型的英文文本,Shannon的测试显示每个字符大约有一位熵。

答案 1 :(得分:3)

显然,SHA-256有256位。最小UTF-8字符长度是一个字节,即8位。因此,任何超过256/8 = 32个字符的密码保证极有可能与较短的密码冲突。

这是你的意思吗?

答案 2 :(得分:3)

我得出的结论与其他人的结论大致相同,但理由不同。

一般来说,对SHA-256的原像(暴力)攻击需要2 ^ 256次评估,无论密码长度。换句话说,长度为数千个字符的“密码”的散列仍然需要平均2 ^ 256次尝试才能复制。 2 ^ 256约为1.2×10 ^ 77。但是,一个非常短的密码,其中可能性的数量小于2 ^ 256,甚至更容易破解。

当可能性的数量大于2 ^ 256时,会传递阈值。

如果您使用的是具有191个字符的ISO 8859-1,则有191 ^ n个可能的长度为n的随机密码,其中n是密码的长度。 191 ^ 33约为1.9 x 10 ^ 75,191 ^ 34约为3.6 x 10 ^ 77,因此阈值将 33个字符

如果您使用的是128个字符的纯ASCII,则可能有128 ^ n个长度为n的随机密码,其中n是密码的长度。 128 ^ 36约为7.2 x 10 ^ 75,128 ^ 37约为9.3 x 10 ^ 77,因此阈值为 36个字符

其他一些答案似乎暗示阈值始终为32个字符。但是,如果我的逻辑是正确的,阈值会有所不同,具体取决于您在字符集中的字符数

事实上,假设您只使用字符a-z和0-9,您将继续添加密码强度,直到您的密码 49个字符长! (36 ^ 49约为1.8 x 10 ^ 76)

希望这个答案为您提供回答问题的数学基础。

作为旁注,如果在SHA-256上可以进行生日(碰撞)攻击,理论上理论上只需要2 ^ 128个评估(平均),大约是3.4 x 10 ^ 38。在这种情况下,ISO 8859-1的阈值仅为 16个字符(191 ^ 16约为3.1 x 10 ^ 36)。值得庆幸的是,这种攻击尚未公开证明。

请参阅SHA-2preimage attacksbirthday attacks上的维基百科文章。

答案 3 :(得分:1)

我认为没有“有效”限制。如果有效创建任何长度的密码将是有效的(通常的规则,没有文字,混合数字,字母,案例和字符)。最好强制用户遵循这些规则,而不是限制长度。但是应该施加最小长度,例如8-10个字符,以保护用户自己。

相关问题