散列/加盐密码有什么真正价值吗?

信息安全 哈希
2021-08-17 16:44:57

我管理的系统包含大量“低级”信息,除了姓名/地址/电子邮件等之外没有任何财务信息。有人建议我们从当前的内部密码加密算法中提高安全性,以使用 ICO 推荐的哈希/加盐。我已经做了一些阅读并且正在努力看到它的好处,我的论点已经回到提出这个建议但他们不会(不能)回答我相当简单的问题的“专家”身上。

据我所知,散列/加盐可以防止密码被黑客读取和解密,这非常好,没有争议。但除非我遗漏了什么,否则为了读取密码值,黑客必须有权访问数据库,以便他们可以窃取密码值?...如果他们有权访问数据库,那么他们实际上并不需要密码,因为他们可以直接从数据库中窃取数据,即他们从密码中获得的应用程序访问权限只会让他们直接读取数据库?...

我错过了什么?

4个回答

用户经常在多个站点上使用相同的密码。您的网站可能没有任何财务数据,但如果他们的银行或在线商店使用相同的密码怎么办?

您可能会争辩说这不是您的问题,但这是一个常见问题,这就是为什么每当发生违规行为时,立即声明之一是“更改您的密码,并在您使用过的任何其他网站上更改密码”相同的密码”。

如果您的网站使用了 Bcrypt 之类的东西(实施中没有缺陷 - 请参阅 Ashley Madison),那么攻击者能够计算出已使用的密码的机会就更小了,并且它增加了用户能够更改密码的时间。其他地方的密码。如果您只是将密码存储在您的数据库中而不进行任何散列,则攻击者可以使用电子邮件地址和密码四处走动并立即开始攻击另一个站点。

电子邮件地址和密码对也经常在攻击者之间以“组合列表”的形式进行交易,这意味着即使最初的攻击者只对您的网站感兴趣,他们也可以通过将数据出售给某人来获得一些好处别的。

添加以回应对提到 2 路加密存储的问题的评论

2 路加密方法的问题是要解密的信息必须存储在系统中的某个位置。如果攻击者可以访问您的数据库,他们很有可能也可以访问您的加密密钥。无法以这种方式反转散列 - 用于反转散列的在线工具有效地在预先计算的列表中查找散列。

即使他们没有加密密钥,他们也可能能够计算出密钥是什么——他们可以通过输入系统密码并查看结果来使用已知的明文攻击。这可能不是一个快速的过程,但如果您的数据中有任何高价值目标(名人、政治家......),那么它可能是值得的。

另一方面,使用强加盐散列,以强确定性找到原始密码的唯一方法是使用适当的盐对每个可能的输入进行散列。使用像 Bcrypt 这样的东西,这将需要数年时间,尽管仍然会相对较快地找到弱密码。

好问题,我很高兴你问这个问题。我希望人们在谷歌上找到这个帖子,这样他们——希望——不会犯许多其他公司所犯的错误。

您不应该只是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.

  1. 你是Hacker你的工作是破解网站并开发一个数据库来汇总这些信息。
  2. Person A是感兴趣的人。Person A出现在您的一个被黑站点数据库中。您现在知道他们的电子邮件地址,以及password他们用于该网站的电子邮件地址。
  3. 现在您可以尝试email address使用password您从该网站窃取的信息登录他们。亲爱的,它有效!
  4. 现在您可以访问他们的电子邮件,您可以通过IMAP或通过他们的网络邮件下载他们的所有电子邮件。在这一点上,你会发现很多有趣的事情。他们正在与Person B.
  5. 你实际上可以用谷歌搜索一些人的用户名和电子邮件地址,它可以显示他们发布的网站。这将调出用户使用的其他网站。也许您可以尝试破解这些网站,或者您可以推断出它们的用途。现在您可以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 时可能会阻止您访问他们的服务的尝试,但是有很多方法可以解决这个问题,并非所有网站都这样做)。

顺便说一句,如果您遭到黑客攻击,恭喜您可能会提起集体诉讼。

一种常见的违规类型是对用户表的只读访问。这是因为该表用于执行登录的代码中,您不需要已经对其进行身份验证。获得密码将允许对所有数据进行读取访问。但即使攻击者已经对数据库拥有完全读取权限,他仍然可以通过密码获得写入权限,能够登录帐户并轻松更改一些数据。

对用户密码进行加盐和散列处理的一个非常简单的原因是:

用户的密码是他/她的秘密

其他人不应该知道。不是你,不是你的同事,不是 DBA。没有人就那么简单...