使用以前(任何人)使用过的密码是错误的吗?
数学可能是对的。人们可以根据需要对其进行改进和复杂化,但这并没有真正增加重点。所以我就不管它了。
此外,在实践中,检查任何具有固定长度的随机字符密码比检查列表中的唯一密码更容易(并且可能更快)。如果我的计算正确,则包含 2 43个密码且平均密码长度为 8 个字符的密码列表的大小约为 64 TB。这必须存储在靠近处理器的某个地方,以便以与处理器计算哈希相同的速度读取。
然而,结论是不正确的:重要的问题不是密码是否曾经被使用过,而是密码是否曾经被包含在违规行为中。
如果泄露的密码随后被公开披露,它们现在可以在互联网上获得。密码现在不仅仅是已使用的任何密码,而是其中的一小部分。更糟糕的是,这个子集被世界各地的很多人用在词表中,以检查它们是否被重复使用。因此,某人根据此密码检查哈希的机会比他或她根据未知密码检查哈希的机会要高得多,即使它已在某处使用过。
所以我不会使用包含在 HIBP 数据库中的密码,仅仅是因为这些密码更有可能被包含在单词列表中。
Mike Ounsworth 在这里(您引用的线程的作者)
这是做一些粗略数学的好借口!这里要考虑的因素是,当你得到像 2 43这样的数字时,你必须开始考虑存储和使用该数据所需的硬盘驱动器、CPU 和电力的数量。
为了简化计算,假设这 2 43个密码中的每一个都存储为 SHA-1 哈希(与 HIBP 数据库一样)。每个 SHA-1 值是 160 位或 20 个字节。2 43 * 20 字节 = 176 TB。比我的笔记本电脑大,但对于云服务来说是一笔小钱。
换个方向,假设您有一个包含所有 2 43个明文密码的数据库。您获得了管理员密码的哈希值,并且想要对您的数据库进行暴力破解。让我们以最简单和最不安全的情况为例;这是一个未加盐的 SHA-256 哈希。这就是比特币矿机是为宝宝建造的问题!让我们以这个比特币矿机作为一个粗略的基准:3,000 美元,50TH/s(tera-hash per second),消耗 1975 W。
根据我仓促的数学计算2^43 / (50,000,000,000,000 / s) = 0.2s
,假设数据库可以如此快速地向其提供 176 TB 的数据,其中一个单元将尝试所有密码。
实际上,密码(嗯,应该)用盐渍的 PBKDF2 或 Argon2 存储。这极大地改变了游戏规则,因为这些哈希函数旨在防止这种攻击。在将密码存储为散列时,可以根据需要调整这些散列函数的速度。假设您将其调整为每个哈希约 0.1 秒。现在突然之间,您正在查看诸如“数千个世纪”和“地球的电力消耗”之类的数字。
TL; DR:这是一个很好的问题!
答案是,如果您要选择一个您可以记住并且可能与互联网上的其他人发生冲突的密码,那么您选择的密码就没有您提供的安全存储它的网站重要。
恕我直言,在选择密码时,您并不是要阻止足够敬业的攻击者破解它;相反,你试图让它变得足够硬,以至于他们会追求一个更软的目标。“我不需要跑过熊,我只需要跑过我的朋友”。
当然,如果您使用具有完全随机的 32 字符密码的密码管理器,那么您将进入“宇宙时代”和“大恒星的功率输出”的密码强度领域。那就这样做吧!
我看到该陈述存在一些逻辑错误-首先,您怎么会知道它?
如果 Joe Schmoe 在 2007 - 2009 年间为他的 Windows PC 使用了一个特定的密码,并且它从未被黑客入侵,并且机器被丢弃和烧毁,那么任何地方都不会有任何记录。
因此,除非密码被黑客入侵或以任何其他方式发布,否则您无法知道,因此无法避免重复使用它。
除此之外,估计曾经使用过的 2^43 个密码中,可能有 2^42.9 个是重复的,并且该列表适合一个硬盘。
长度介于 1 和 9(含)之间的混合大小写字母数字密码的密钥空间为 13,759,005,997,841,642,介于 2 53和 2 54之间。
数学是一个不错的猜测,但不是一个合理的餐巾纸猜测。
但是,仅仅因为数学错误并不意味着结论无效。
人类不擅长密码。我们记住它们,重复使用它们,并从容易记住的单词中生成它们。
因此,密码的天真蛮力将产生许多人们从未记住、从未重复使用并且与人类语言中的单词不相似的可能性。
使用以前泄露的密码字典可能是猜测密码的最快方法,因为您知道某个地方的某个人以前使用过该密码。人类是人类,与任何随机值匹配密码的可能性相比,再次使用此密码的可能性更大。
因此,我坚定的观点是使用非随机生成的密码是错误的,但我同意这样一种观点,即使用任何人以前使用过的密码都是错误的,无论它是如何生成的.