好,我们来看看真实数据:
单个 Nvidia 9800GTX 可以计算 3.5 亿个 MD5 哈希/秒。按照这个速度,大小写字母数字字符的整个键空间将在 7 天内完成。7 个字符,两个小时。根据您的算法,应用加盐只会使这些时间增加一倍或三倍。
廉价的现代 GPU 很容易拥有每秒 10 亿个 MD5 哈希值。有决心的人通常会连接其中的大约 6 个,并获得 60 亿/秒,从而使 9 个字符的键空间在 26 天内过时。
请注意,我在这里谈论的是蛮力,因为在这种复杂程度之后,原像攻击可能适用也可能不适用。
现在,如果你想防御专业攻击者,他们没有理由不能获得 1 万亿哈希/秒,他们只会使用专用硬件或一些廉价 GPU 机器的农场,以更便宜的为准。
并且繁荣,您的 10 个字符的密钥空间在 9.7 天内完成,但是 11 个字符的密码需要 602 天。请注意,此时在允许字符列表中添加 10 或 20 个特殊字符只会使 10 个字符的键空间的破解时间分别为 43 或 159 天。
看到密码散列的问题在于它只会减少你徒劳的厄运的时间。如果您想要一些非常强大的东西,但仍然像存储的散列密码一样天真,请选择 PBKDF2。
那么还有一个问题,用户会使用你强迫他在他所有其他网站上使用的这个“强”密码吗?如果他不将它们保存在主密码文件中,他肯定会。并且那些其他站点不会使用您使用的相同的强大哈希算法,从而破坏了您系统的目的。如果不是为了阻止用户在多个站点上使用相同的密码,我真的不明白为什么你希望你的哈希值超级强;如果攻击者可以访问您的哈希值,那么您很可能已经迷路了。
另一方面,就像我将重复一遍又一遍地向人们询问他们的哈希方案有多“安全”的问题一样,只需使用客户端证书,您的所有问题都会得到解决。用户不可能在多个站点上使用相同的凭据,攻击者无法在不修改凭据的情况下破坏您的凭据,如果用户将凭据存储在智能卡上,他们就无法轻易窃取凭据等。
天真地回答您的问题:强密码仅由强哈希算法支持。