7

一个函数是:

$a == md5($b . $secret);
  • 您可以选择 $a 和 $b
  • 你不知道 $secret
  • 您将获得 $a 和 $b 的函数值,您选择 true 或 false。

一般来说,有没有比蛮力更好的攻击来找到 $secret?使用PHP 的 md5 函数找到 $secret 是否有比蛮力更好的攻击?

从我在网上找到的内容来看,我认为没有,尽管 md5 在其他一些用例中已被弃用。所以只是为了确定......

亲切的问候

4

3 回答 3

4

如果 MD5 表现得像一个随机预言机(这是一个很大的“如果”,见下文),那么穷举搜索$secret是最好的攻击方式——更重要的是,每个“猜测”的值都$secret必须使用对函数的查询(由于您使用 PHP,我假设该功能是在 Web 服务器中实现的,并且每个“查询”都需要与该服务器对话)。True后者是由于缺少发送回攻击者的信息所暗示的:攻击者除了一个位(“ ”或“ False”结果)之外什么也得不到。特别是,他没有得到 MD5 输出本身。攻击者将得到一长串无信息的“ False”结果,除非他命中正确的 MD5 输出,或者纯粹是出于偶然(概率 2 -128,这是真的该死的小),或者因为他正确地猜到了$secret事先的价值。值得注意的是,这可以防止攻击者使用许多成本分摊技术,包括预计算表,尤其是过度宣传的彩虹表

随机预言机是一个神话对象,可以看作是一个确定性的黑匣子:您对从给定输入获得的输出一无所知,除了对于给定输入,盒子总是返回相同的结果。一个模型如下:盒子里有一个侏儒、一些骰子和一本大书。gnome 使用骰子随机选择输出。他还使用这本书来跟踪他已经发送的答案,以保持一致,即如果输入与先前提交的输入相同,则 gnome 将返回与以前相同的输出而不是掷骰子。

然而,MD5不是随机预言机。例如,对于具有 128 位输出的函数,我们可以比理论上的 2 64电阻更快地为 MD5 构建碰撞。另外,请注意,作为一个好的散列函数(防碰撞等)并不绝对需要“随机预言”。例如,SHA-256被认为是一种安全的散列函数,但它仍然遭受所谓的“长度扩展攻击”(给定SHA256($a),人们可以SHA256($a . $b)在不知道的情况下计算$a,对于 的几乎任意值$b)。因此,随机预言机的保证不适用于 MD5(或者,就此而言,SHA-256)。这并不意味着更快的攻击是已知的!只有你自己在这里。

还可以指出,这md5($b . $secret)是一种“keyed hash”,即MAC(Message Authentication Code)。从散列函数构建 MAC 并不容易,正是因为长度扩展攻击之类的事情(md5($secret . $b)例如,将是一个非常糟糕的 MAC)。设计了一种从散列函数构建 MAC 的稳健方法;它被称为HMAC并涉及对底层哈希函数的两次调用(但其中一个是在短输入上的,因此这仍然是有效的)。HMAC 的安全性,更准确地说,HMAC 如何被视为随机预言机,可以“证明”,即简化为某些散列函数内部属性,这些属性在 SHA-256 的情况下被认为是正确的(参见NMAC 和 HMAC 的新证明: Mihir Bellare 的无碰撞安全性的血腥细节)。通过使用 HMAC/SHA-256 over作为密钥$b$secret您将从这些安全结果中受益,并且您的结构将更加健壮。再说一次,我并没有声称存在已知的攻击md5($b . $secret),只是使用 MD5自制 MAC 结构都会引发危险信号,这会降低可以赋予此类系统的信任级别。

于 2011-04-24T15:43:15.193 回答
3

$a这是一个有趣的问题,因为在 IT 安全的典型场景中,您无法选择$b作为攻击者。例如,如果您能够获得散列密码,$a并且$b已经定义并且您必须使用它。$b在这种情况下,如果有盐可用,您只能使用蛮力或彩虹表。

另一方面,在您的示例中,您可以自由选择这两个值。您可以采用任意秘密,例如,并相应test地选择 和 的值。我选择 $b 作为 an并用计算,结果为.$a$bempty string$a$a = md5($secret)098f6bcd4621d373cade4e832627b4f6

我选择$a = "098f6bcd4621d373cade4e832627b4f6"$b= ""问你是否$secret == "test"。你说真的,我说问题解决了。

这最终将我们引向了真正的答案。给出的两个条件

  • 您可以选择 $a 和 $b
  • 你不知道 $secret

不要一起工作。在我的例子中,我定义了$secret自己。我违反了第二个条件。另一方面,如果不从 导出它们,我就不能随意选择$a和任意选择,因为它们可能没有解决方案。$b$secret

$a如果我们假设所有可能的和对至少有一个解决方案$b(也许有证据,我不知道),并且您以一种您真的不知道的方式选择它们$secret,我总是想定义$b = "",使攻击尽可能简单。在这种情况下,彩虹桌是您的朋友。

于 2011-04-24T08:37:25.443 回答
1

下载著名密码的彩虹表/密码哈希!:)

于 2011-04-24T02:27:23.467 回答