【问题标题】:Second preimage resistance using MD4 AND MD5使用 MD4 和 MD5 的第二原像电阻
【发布时间】:2013-07-31 21:16:34
【问题描述】:

假设我们有以下内容:
- 字符串:str
- 字符串的 MD4 哈希:MD4(str)
- 字符串的 MD5 哈希:MD5(str)

MD4 和 MD5 是加密“破”算法,这意味着不难:

1)找到str_2,其中MD4(str)= MD4(str_2)(即对MD4的攻击)
2)找到str_3,其中MD5(str)= MD5(str_3)(即对MD5的攻击)

但是这有多难:

3) 找到 str_4 其中 MD4(str) = MD4(str_4) AND MD5(str) = MD5(str_4)
(即同时攻击 MD4 和 MD5)?

显而易见(可能不是很有效)的方法是:

1) 找到一个字符串 STR 其中 MD4(STR) = MD4(str)
2) 检查 MD5(STR) = MD5(str)
3)如果是这样,我们就完成了。如果不是,请返回第 1 步并使用不同的字符串满足第 1 步。

但是上面的算法对我来说似乎并不快(或者是吗?)。那么,由 MD4 和 MD5 散列的字符串是否真的可以免受第二次原像攻击?

编辑:
(1) 主要关注的是增强二次原像抗性

(2) 主要动机是不为今天的应用程序使用过时的哈希。相反,它有两个方面:首先,我预计今天被认为是安全的哈希值会被破坏的那一天。例如,如果我只使用 SHA-2,那么它损坏的那一天就是我对我的数据非常担心的那一天。但是如果我使用 SHA-2 和 BCrypt,那么即使两者都单独损坏,可能仍然无法击败 concat(Sha2_hash, Bcrypt_Hash) 的第二个前映像阻力。 第二,我想减少意外碰撞的机会(服务器认为两个输入相同,因为两个哈希恰好相同)

【问题讨论】:

  • 为什么不使用更好的哈希算法?
  • 我使用 MD4 和 MD5 作为假设。主要动机如下:如果我只使用一个哈希(例如 SHA-2),那么 SHA-2 被破坏的那一天将是我开始非常关注我的数据安全的那一天。但是,如果我使用两个今天被认为是安全的哈希(SHA-2 和 bcrypt),那么即使一个被破坏(比如 SHA-2),我仍然有不错的保护,并且有更多时间来实现另一个系统(比如使用bcrypt 和一些未来的 SHA 版本)。
  • SHA-2 和 bcrypt 是一个非常奇怪的组合,因为 SHA-2 是通用哈希,而 bcrypt 是密码哈希。如果你想组合两个通用哈希,SHA-2 和 SHA-3 可能是最好的选择(一旦 SHA-3 真正标准化)
  • 你能告诉我们更多关于你打算用这个做什么吗?作为旁注,这个主题可能更适合crypto.stackexchange.com
  • @Aaron 您的逻辑缺陷是您假设较弱的哈希不会比较强的哈希更容易被破坏。您宁愿担心散列将来可能会被破坏,还是实际上有一个散列现在实际上已被破坏?如果您是明智的,您希望从每一位中获得尽可能多的安全性。与 MD5 或 MD4 相比,SHA-2 为您提供了更多的安全性。因此,每个可能是 SHA-2 位的 MD5 或 MD4 位都会使您的安全性变得更弱。

标签: hash cryptography


【解决方案1】:

这种事情并没有像你想象的那样提高安全性。得到的 (M+N) 位值实际上比本机生成 (M+N) 位输出的散列的输出要弱。如果您想了解更多详细信息,crypto.stackexchange.com 上的这个答案会更深入一点。

但底线是,当构造一个输出是其他散列函数的串联的散列函数时,你得到的输出充其量与最强的组成散列一样强。

我不得不问为什么甚至使用 MD4 或 MD5 并开始遇到这个麻烦?使用 SHA-3。如果您想感到“额外安全”,请计算您感到舒适的安全边际,并将其增加一定百分比。也就是说,如果你觉得 384 位就够了,那就选择 512。


所以,有了更多关于您正在尝试做的信息,即使用文件内容来生成“快速校验和”值并同时为文件生成唯一的定位器/标识符,我仍然认为选择单个哈希是更好的方法。

如果您坚持使用两个散列函数,那么我会提出,与其连接两个散列,更好的方法是使用使用两个不同散列函数/算法的 HMAC。请注意,我没有严格的证据证明这种方法效果更好,或者这种结构不会产生可怕的输出。因此,请持保留态度:

H1H2 成为两个加密安全哈希函数,让P 成为您的输入数据。然后,您的文件的哈希和文件标识符由构造给出:

HMAC (K,P) = H1((KGEN(P) ⊕ PAD1) ∥ H1((KGEN(P) ⊕ PAD2) ∥ P)))

在哪里

KGEN (P) = H2(P)

【讨论】:

  • 链接中的答案表明,使用散列连接,(1)抗碰撞性会更好,(2)(第一个)图像前抗性将仅与最弱的散列一样强(这使得明显的意义)。如果我只需要增强二次预像抗性怎么办?至于为什么是MD4/MD5,请看我对主要问题评论的回复。该回复还解决了使用两个哈希(一个 M 位,一个 N 位)与使用一个 M+N 哈希相比的优势。
【解决方案2】:

这有点困难。因为需要同时计算 MD4 和 MD5 的碰撞。但是在密码学中有点蹩脚的术语。推出自己的安全计划是敌人#1。但是,也有一些例子,当人们链接算法时,例如 DES => 3 DES 或 TrueCrypt 允许链接多个加密算法或 PBKDF2 密钥派生运行相同的算法 N 次。

说真的,如果您需要强哈希 - 请使用 SHA2 及更高版本。

发现 MD4 和 MD5 哈希冲突的问题在于,有可能制作一个允许攻击者线性扩展攻击尝试次数的设备链,并且如果预算足够大,这听起来似乎是合理的。

【讨论】:

  • 我同意滚动自定义安全方案是不可取的。但我只是使用两个独立的方案,所以在最坏的情况下,它会和最不安全的方案一样好。 MD4/MD5 的使用也只是假设性的;请参阅我对顶部主要问题的评论的回复。+
猜你喜欢
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2011-01-02
  • 2012-12-04
  • 1970-01-01
相关资源
最近更新 更多