TL;DR:我不需要恢复您的密码,我只需要找到一个生成相同哈希的字符串,并且由于您无法控制网站开发人员使用的哈希,直到他们都使用安全的哈希,它不会没有多少帮助,因为它的成本。如果我在跟踪你,我会不断入侵你使用的网站,直到找到一个弱点。或者我使用另一种方法。
相关XKCD:
https://www.xkcd.com/936/
因为如果没有相关的 XKCD,很快就会有。
重复使用密码会给用户带来可怕的风险,因为一旦发生数据泄露,
仅当该密码保护重要的东西时。
对于一般互联网论坛的使用,我有一个带有它自己的电子邮件地址的 nom de guerre,以及所有内容的四五个密码。
这些密码不能保护任何东西。即使破坏他们背后的电子邮件帐户,您也只会让我的名字看起来比他看起来更愚蠢。
密码存储不够安全,
不存储密码。我们会回到这个。
这意味着,默认情况下,他们使用此密码的所有其他服务也会受到威胁。
更准确地说,应该措辞:
...这意味着,默认情况下,使用该电子邮件地址和密码的所有其他服务都应被视为受到损害,如果攻击者知道您的其他电子邮件地址,则应考虑使用该密码的任何服务...
身份(出于这些目的)是您的身份(电子邮件地址)加上您所知道的(密码)。
如果我知道您是 somerandomforum.com 和 wellsfargo.com 上的“joebob@gmail.com”,并且您对所有三个都使用相同的密码,那么您将被淹没。
但是,如果你在网络论坛上使用“joebob@gmail.com”,“个人”使用 Azxdreuwa@yahoo.com,专业使用“Alexander.Scott@yourowndomain.com”,那么对于算法攻击者来说是非常困难的对它们进行排序。
通常,由于这些违规行为,他们仅使用 SHA-1 之类的散列算法存储密码,最近在某些情况下甚至仍然使用 MD5
我知道你知道这一点,而且我非常迂腐,但通常我们不存储密码。如果它是 SHA-1、MD5 或任何其他散列(包括可怜的、死掉的“crypt”或块上最新的完整的散列),则没有可证明的从散列到密码的可靠往返。
你不能也不要从 eaf4c33ae978d3f2852021214a061534 到“弗雷德死了”。您可能能够为同一个哈希创建两个或多个不确定长度的字符串。您可以做的是生成字符串,直到它们匹配。这是不同的,这是一个关键的差异。这也很关键。
(这绝不是为了安全地存储密码),使攻击者很容易仅使用原始 GPU 哈希能力来暴力破解密码。
花费 ${WHATEVER} 硬币挖矿会更好,这完全是浪费时间和电力。
无论哪种方式,您都不会重建哈希,而是不断向算法抛出字符串,直到获得匹配
通过您刚刚从 BigWebSiteInc 提取的 500 万个 email:name:password 元组时,预先计算的彩虹表要快很多,并且会更快地获得更多结果。
是的,知道 GPU 可以非常快地计算它。但是查找速度要快得多,而且我会想要破解很多密码,而不仅仅是你的密码。
如果我想要您的凭据,我还有其他获取它们的方法,如果我想要它们足够糟糕......是的,那可能不是 Stack Exchange 想要托管的论坛。安全性有很多方面,而密码学只保护其中一些方面。
如果一个人要创建一个足够长度(例如 100+)的适当随机密码,该密码与许多类型的熵混合
真实的故事。十多年前,我在美国军队的预备役中,他们有(有?)一个系统,您的军人身份证是您网络帐户凭据的一部分。要登录他们的大多数计算机,您必须将您的军人身份证放入智能卡读卡器并输入您的“密码”。
有一次,我得到了一张新的身份证,需要一个新的 PIN 码。所以我去pin输入的地方,把一个IIRC 10位数字输入键盘,然后再输入。它说我的 PIN 匹配,然后我就走了。
我回到我的单位并尝试登录。失败。
于是我回去了。几次。我们很困惑。然后我缩短了 PIN 并且它起作用了。
PIN 有 8 或 9 个字符的限制(或其他。它是 $MY_NUM-2)。FIRST 进入系统默默地丢弃了多余的数字。第二个不是,导致不匹配。(或者反过来)
ISTR 在 SAMBA 自述文件中有一些关于 NT 密码数据库的早期版本将散列存储为 2 部分的内容,因为旧的 LANMAN (??) 内容仅包含 8 个字符的密码。不知道那是如何工作的。
无论如何,从输入屏幕到密码存储的工作流程有时会包含有限数量的字符,有些则不然。随着各种网站更改其软件,这可能会发生变化。哎呀,联邦系统的不同部分可能会有所不同。你要确保你不会超出他们的期望。
符号、数字和字母;如果他们的机器在安装键盘记录器等方面没有受到损害,并且他们的所有浏览会话都是通过加密隧道完成的,那么如果可能永远不会为多个网站重复使用此密码是否存在风险如果他们使用的其中一项服务发生数据泄露,他们会在有生之年被破解吗?
老实说,对于高安全性应用程序(例如保护 SSH 密钥等),我使用了几首好记的歌曲中的前几节。至少其中一个有一个意外的拼写错误,永久固定在我的脑海中。
问题是,如果我正在查看密码存储(文件、数据库等)中的 ID:pw 哈希,我想要最容易破解的方法。我不想要那些使用某种强密钥存储并且对每个其他站点都有不同密码的人,我只想要低调的果实。这些是最有可能重复使用密码的。
所以,是的,它使您的密码更安全,模数几件事。
您无法选择远端使用的散列,只要人们使用“损坏的”散列(md5、SHA-1 等),您就可以获得多个字符串来匹配散列。只要您使用的一个网站继续将密码存储在错误的哈希中,您就很容易受到攻击。
这就是为什么我很迂腐。我们不存储密码,我们存储密码的哈希值,我不需要恢复您的密码,我只需要找到一个生成相同哈希值的字符串。
可能是你的 100 字符串由最好的白化随机数生成器的输出组成,恰好与“Fred 死了”的哈希匹配,然后你就输了。
那是在有人将摄像头放置在可以监视您打字的地方,对您的 SSL 会话运行 MITM 攻击(这大约是我过去几年工作过的大公司的一半——他们在他们的代理服务器上进行)做 DLP),入侵网站以在他们的登录页面中放置一些额外的代码,或者其他十几种黑客中的任何一种。
或者只是把枪放在你的膝盖上。或者更可怕的方法。
使用一次性密码来丢弃数据、多个在线“身份”和一些足够安全的密钥存储可能是最好的方法。这是一种“纵深防御”,而且相当容易做到(哎呀,我能做到,不会那么难)。
解决@IMSoP 作为评论提出的问题。
实际存储的散列通常是密码 + 散列,因此您最喜欢的不安全网络论坛和您的银行不太可能使用相同的散列算法和盐。他们可能,但不太可能。
然而,次要的一点是,对于任何使用不安全哈希的站点——而且其中有很多(参见下面的另一个真实故事),攻击者可以检索一个哈希到存储内容的字符串,然后像你一样与该站点进行交互。
这确实超越了“密码重用”问题,但确实解决了超长密码问题。就像在......嗯......生活中的其他领域。一定量是好的,越多越好,但太多会出问题。
至于“不安全”哈希的使用,企业往往最担心的是诉讼,其次是宣传,最后才是真正的安全。我的一个朋友拥有一项相当安全的存储机制的专利,该机制将显着提高笔记本电脑和台式机(除其他外)的安全性。他试图让几家大公司参与其中,他接触过的每一家公司都表示同样的事情——他们目前的安全性符合“通用行业惯例”和法律标准,因此他们对除此之外的任何费用不感兴趣. 在他们看来,他们是“诉讼证据”,因此不太关心宣传。
这就是为什么银行决定提出一个愚蠢的问题是“三因素身份验证”以及其他明显有问题的安全做法。
这意味着他们的散列算法是安装操作系统时附带的。因为那是“行业惯例”。
在这些条件下,存储在安全密码工具中的 16 或 20 个字符的密码与 100 个字符的密码一样好。
总结一下,我并不像这里的一些人那样反对密码重用——我有几台家用电脑共享相同的密码(还有一些不同的密码),但我从不复制其中的一些(我的个人,专业和工作电子邮件帐户、银行密码等)。只是不值得冒险。