好问题,我很高兴你问这个问题。我希望人们在谷歌上找到这个帖子,这样他们——希望——不会犯许多其他公司所犯的错误。
您不应该只是hash
密码,您应该salt
使用它们并确保您的哈希算法使用某种形式的SlowEquals
. 你不应该止步于此:你应该使用一种安全的哈希算法,极大地抵抗collisions
,例如 bcrypt 或 scrypt。
为什么盐?什么是碰撞?
我将使用 md5 作为示例,因为它非常有名。不要使用它,因为它很容易受到碰撞,而且速度非常快,这意味着它更容易损坏。假设您只是在没有盐的情况下对密码进行哈希处理。您最终几乎每次都会产生静态输出。
例如,当哈希为 md5 时,“ myDarnPassword
”最终会被转换为“ ”。aca6716b8b6e7f0afa47e283053e08d9
此时,您可以创建字典攻击并使用彩虹表。您甚至可以生成一个数据库,将尽可能多的随机字符转换为一个易于搜索的数据库,而不需要耗时的彩虹表查找。您可以随着时间的推移慢慢创建它并稍后查找哈希。
您将创建一个如下所示的表:
+-------------------+----------------------------------+
| PASSWORD | UNSALTED_HASH |
+-------------------+----------------------------------+
| myDarnPassword | aca6716b8b6e7f0afa47e283053e08d9 |
+-------------------+----------------------------------+
| pleaseDontSueMe11 | 0dd395d0ec612905bed27020fb29f8d3 |
+-------------------+----------------------------------+
然后你会从数据库中选择有点像这样:
SELECT [password] FROM [table] WHERE [unsalted_hash] = 'aca6716b8b6e7f0afa47e283053e08d9'
它会返回myDarnPassword
,加上发生的任何碰撞。
拥有足够的处理能力和时间,您可以创建数万亿个组合,并在很短的时间内轻松破解大量密码(由于数量庞大,我可能会建议将数据库分成多个密码长度)。不过,您需要大量的硬盘空间。
那时,您真正需要做的就是查找它,而不会每次都在暴力破解所有内容上浪费处理能力。如果您过去从数据库中窃取了其他人的密码,您可以添加这些密码,并将其转换为哈希值。许多网站已经这样做了。
当网站验证您的密码时,他们会将密码与存储的哈希值进行比较,如果它与数据库中的哈希值匹配,则认为它是有效密码。然后,您可以允许用户登录。
加盐哈希可以帮助击败这种攻击,但它不会为您节省与碰撞的时间。您可以将被黑的哈希值与产生冲突的哈希列表进行比较,然后在网站上输入该密码,即使您的密码错误:只要哈希值有效,您就会被 pwned。
谁在乎是否有人破解了我的密码?我不在乎!
以下只是一小部分示例,说明网络钓鱼者和其他恶意个人可以使用您的未散列和未加盐的明文密码进行哪些操作。它可能不一定用于直接定位您,但可以说Hacker
想要定位Person A
. 让我们推断您如何定位Person A
.
- 你是
Hacker
。你的工作是破解网站并开发一个数据库来汇总这些信息。
Person A
是感兴趣的人。Person A
出现在您的一个被黑站点数据库中。您现在知道他们的电子邮件地址,以及password
他们用于该网站的电子邮件地址。
- 现在您可以尝试
email address
使用password
您从该网站窃取的信息登录他们。亲爱的,它有效!
- 现在您可以访问他们的电子邮件,您可以通过
IMAP
或通过他们的网络邮件下载他们的所有电子邮件。在这一点上,你会发现很多有趣的事情。他们正在与Person B
.
- 你实际上可以用谷歌搜索一些人的用户名和电子邮件地址,它可以显示他们发布的网站。这将调出用户使用的其他网站。也许您可以尝试破解这些网站,或者您可以推断出它们的用途。现在您可以
pretend to be like them
,或查找更多信息。信息/活动可能包括:
- 用户名。
Person A
在线发布为Mark Buffalo
. 这是一个比较独特的名字。然后,您可以谷歌 Mark Buffalo,并查找他发布的网站。也许他在其他网站上更多地展示了他的个性?
- 密码。也许
Mark Buffalo
在那个网站上有相同的密码。也许您可以登录该网站并查看他与他人的私人通讯?
- 个人信息。因为你知道他的身份
Mark Buffalo
,如果他personal information
在某些网站上分享呢?如果他在 craigslist 上发布搜索男性或女性伴游的信息,而他把电话号码留在那里怎么办?您已经找到了他的电话信息,因此您可以找到一种方法来设置他并勒索他以获取金钱/信息/权力。除非您不包含电话号码,否则这与加盐密码没有太大关系,但是由于您的泄漏,他们在另一个网站上找到了他们的电话号码。这是收集和使用信息对您不利的众多非常强大的方法之一。这毕竟是一个Information Security
论坛,所以我想用这个例子。
- 家庭信息。现在它变得令人毛骨悚然。我们得到了马克布法罗的个人信息。让我们看看他的社交网络。哦,他有一个
Facebook
帐户(我没有)。我们可以使用相同的密码访问它吗?如果 Buffalo 使用相同的密码/电子邮件组合,那么可能。您可能可以从您之前访问过的他的电子邮件中推断出这一点,在那里您发现了很多有趣的事情。我们现在可以登录并阅读他的 Facebook 消息。现在我们知道他的家人是谁了。然后我们可以更轻松地协调勒索攻击。
- 其他登录信息。由于我们之前可以访问他的电子邮件,因此我们看到他也有一个 Skype 帐户。其中之一是秘密。我们登录,看到他在 Skype 上与人调情。我们现在有更多的敲诈材料。
- 冒充。您现在可以在各种网站上登录并冒充 Buffalo。也许他实际上是一个直射手,从不追随任何护送或类似的东西?好吧,现在您可以通过使用他的凭据在网上冒充他,将他变成一个寻求护送的弃儿,至少在外表上是这样。想象一下可能对一个被错误指控并被迫辞职的政客造成的损害。
- 更容易破解其他人的事情。然后,您可以发送
Person B
带有受感染附件的电子邮件,并假装您认识他。你已经阅读了足够多的电子邮件,所以你能够模仿Mark Buffalo
到你看起来像他的地步。您以一种对真正发生的事情毫不怀疑的方式制作电子邮件,现在您可以对. 甚至更糟Person B
的事情做同样的事情。Person B
这只是一小部分想法。其他人的凭据有很多不同的用途。对您的密码进行加盐和哈希处理,使用 bcrypt 和 scrypt 等抗冲突哈希算法,并防止SQL 注入攻击。请不要把我变成一个寻求护送的弃儿!拯救马克布法罗!
(我知道有些网站在使用不同的 IP 时可能会阻止您访问他们的服务的尝试,但是有很多方法可以解决这个问题,并非所有网站都这样做)。
顺便说一句,如果您遭到黑客攻击,恭喜您可能会提起集体诉讼。