严重安全性:MD5 被认为是有害的——价值 600,000 万美元的 PlatoBlockchain 数据智能。垂直搜索。人工智能。

严重的安全性:MD5 被认为是有害的——价值 600,000 美元

在法国数据保护监管机构 CNIL (国家信息与自由委员会),能源公司 Électricité de France,简称 EDF,已 罚款 600,000 欧元 (约600,000美元)。

以此类事情的方式,法律声明相当长,并且(至少对于非律师而言)在语言上是冗长的,这意味着您需要相当熟练的法语才能理解事情的所有来龙去脉,但整个案件归结为四项侵权。

前三个涉及与客户的一般数据相关交互,包括:

  • 发送商业营销电子邮件 未经适当同意。
  • 收集数据 没有澄清是什么或为什么。
  • 不可靠地处理请求 当客户要求查看他们的数据时,将其删除或删除。

但这是引起我们兴趣的最后一个抱怨: Sur le manquement à l'obligation d'assurer la sécurité des données。

在英语中,这大致翻译为 未能安全地存储数据,并且非常具体地涉及密码的不安全处理。

MD5 被认为是有害的

监管机构指出,除其他事项外,尽管声称它是使用公认的哈希算法对密码进行加盐然后进行哈希处理,但直到 25,000 年 5 月,EDF 仍有超过 2022 个用户的密码使用单个 MDXNUMX 哈希“保护”。

正如您在 Naked Security 上多次听到的那样,存储 密码的加密哈希 意味着您可以在密码出现时通过重新计算其哈希值并将其与最初选择的密码的哈希值进行比较来验证密码。

如果哈希匹配,那么您可以安全地推断密码匹配,而无需存储实际密码。

出现时,密码只需要暂时保存在内存中,一旦计算出其哈希值就可以丢弃。

只要散列算法被认为是密码安全的,它就不能“反向运行”,因此您不能从散列向后工作以揭示有关密码本身的任何信息。 (这种散列在行话中称为 单向功能.)

同样,一个体面的散列算法可以防止你从一个已知的散列开始并设计一些输入值——任何输入,不一定是原始密码——来产生所需的散列。

您将需要一个接一个地尝试输入,直到您走运为止,对于 128 位的哈希值来说,即使是 XNUMX 位的散列也需要很长时间才能成为可行的攻击。 (具有不允许您计算出具有相同输出的多个输入的安全预防措施的哈希被称为 抗碰撞.)

但是 MD5,正如您可能知道的那样,在冲突方面存在严重问题,它的 直接后继 SHA-1 (这两个哈希值都出现在 1990 年代初期)。

现在,这两种算法都不建议在任何地方、任何人、出于任何目的使用,因为有类似但仍然安全的替代方案可以很容易地用来替代它们,例如 SHA-256 和 SHA-512:

MD5 哈希为 128 位或 16 字节长。 SHA-256 和 SHA-512 的长度分别是原来的 2 倍和 4 倍。 但并不是光是这个额外的散列长度就让它们更合适。 它们与 MD5 相比的主要优势在于它们没有任何特定的已知冲突问题,因此它们的密码安全性通常不会受到质疑。

腌制和拉伸

简而言之,您不会指望任何公司,更不用说像 EDF 这样的能源行业巨头,将 MD5 用于任何加密目的,更不用说保护密码了。

然而,更糟糕的是,缺乏 ,这是在计算哈希值之前,为每个用户随机选择的一大块数据与密码混合在一起的地方。

使用 salt 的原因很简单:它确保无法预先计算出潜在密码的哈希值,然后将其带入帮助攻击。

不加盐,每次任何用户选择密码 123456,骗子提前知道它的散列是什么。

即使用户选择了更合适的密码,比如 34DF6467!Lqa9,您可以提前知道它的 MD5 哈希将是 7063a00e 41866d47 f6226e60 67986e91.

如果您有足够长的预计算密码列表或部分计算的密码列表(在行话中非常出色地称为 彩虹表),您可以通过表格恢复密码,而不是尝试数万亿个密码组合,直到您走运为止。

加盐意味着你需要一个完整的、预先计算好的彩虹表 为每一位用户 (该表由 salt + 密码的组合决定),您将无法计算每个彩虹表——一项可能需要数周时间并占用 TB 磁盘空间的任务——直到你恢复了盐,

但是您需要做的还有更多。

即使你包含一个盐,这样预先计算的“散列字典”就不能使用,并且你使用一个可信的加密算法,比如 SHA-512,单独的散列计算就足够快了,以至于获得散列数据库的攻击者可以仍然每秒尝试数十亿个可能的密码,甚至更多。

所以你应该使用所谓的 伸展 同样,您不仅要对初始密码进行加盐处理,还要在循环中通过哈希算法数千次或更多次地传递输入,从而使任何想要尝试的骗子的攻击都更加耗时。

与重复加法不同,您可以使用单个乘法作为快捷方式来替换计算 5+5+5+5+5+5 为 6×5,而重复哈希没有快捷方式。 将输入散列 1000 次需要加密计算句柄“转动”1000 次。

不仅仅是MD5问题

具有讽刺意味的是,尽管 EDF 似乎只有 25,800 个密码使用 MD5 进行哈希处理,并且在辩护中声称它主要使用 SHA-512,但它仍然并不总是对存储的哈希值进行加盐或拉伸。

监管机构报告说,11,200,000 个密码已正确加盐和哈希处理,但仍有 2,400,000 个密码仅使用 MD5 或 SHA-512 直接进行了一次哈希处理。

显然,EDF 现在的密码存储已达标,但该公司仍被罚款 600,000 欧元,并且在未来两年内仍将在 CNIL 的“顽皮步骤”上在线公开上市。

我们无法确定如果判决只涉及糟糕的散列,EDF 也不必为一开始列出的其他三项数据保护违法行为负责……

......但它确实表明,糟糕的加密选择会让你付出的代价不止一种!

怎么办呢?

存储客户的密码 安全!

可以选择加盐和拉伸的额外计算成本,以便个人用户在登录时不会感到不便,但潜在的攻击者的攻击速度会提高几个数量级。

密码恢复攻击可能需要一周时间来提取 10% 存储为简单的一次性哈希的密码,理论上,如果您要使计算每个试用密码的成本增加 200 倍,则需要 10,000 年(10,000 周) .

请阅读我们的 优秀的解释文章 关于这个主题:

简而言之,我们推荐 PBKDF2 “拉伸”算法 SHA-256 作为其核心哈希,每个用户随机 salt of 16 bytes (128 位)或更多。

这符合 CNIL 最新判决中的建议。

CNIL 不提供 PBKDF2 迭代次数的建议,但正如您将在我们的文章中看到的那样,我们的建议(2022 年 XNUMX 月)是使用 200,000 or more. (您可以定期增加循环次数以跟上计算能力的增加。)

如果您不想使用 PBKDF2,我们建议您阅读算法 bcrypt, scryptArgon2 帮助您做出明智的选择。

不要被加密的顽皮步骤抓住!


时间戳记:

更多来自 裸体安全