Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在$a==md5($b.$secret)中查找$secret_Php_Security_Cryptography_Md5_Black Box - Fatal编程技术网

Php 在$a==md5($b.$secret)中查找$secret

Php 在$a==md5($b.$secret)中查找$secret,php,security,cryptography,md5,black-box,Php,Security,Cryptography,Md5,Black Box,一个功能是: $a == md5($b . $secret); 您可以选择$a和$b 你不知道这个秘密 您可以将所选$a和$b的函数值设置为true或false 总的来说,有什么比暴力更好的攻击来发现$secret吗? 有没有比暴力更好的攻击方法来找到$secret 从我在web上发现的情况来看,我认为没有,尽管md5在其他一些用例中被弃用。所以我只是想确定一下 亲切问候下载著名密码的彩虹表/密码散列!:) 这是一个有趣的问题,因为在IT安全的典型场景中,您不能选择$a和$b作为攻击者。例

一个功能是:

$a == md5($b . $secret);
  • 您可以选择$a和$b
  • 你不知道这个秘密
  • 您可以将所选$a和$b的函数值设置为true或false
总的来说,有什么比暴力更好的攻击来发现$secret吗? 有没有比暴力更好的攻击方法来找到$secret

从我在web上发现的情况来看,我认为没有,尽管md5在其他一些用例中被弃用。所以我只是想确定一下


亲切问候

下载著名密码的彩虹表/密码散列!:)

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

另一方面,在您的示例中,您可以自由选择这两个值。您可以获取任意机密,例如
test
,并相应地选择
$a
$b
的值。我选择$b作为
空字符串
,用
$a=md5($secret)
计算
$a
,结果是
098F6BC4621D373CADE4E832627B4F6

我选择
$a=“098F6BC4621D373CADE4E832627B4F6”
$b=”“
并询问您是否
$secret==“test”
。你说是真的,我说问题解决了

这最终让我们找到了真正的答案。给出了两个条件

  • 您可以选择$a和$b
  • 你不知道这个秘密
不要一起工作。在我的示例中,我自己定义了
$secret
。我违反了第二个条件。另一方面,我不能随意选择
$a
$b
,除非从
$secret
中派生它们,因为它们可能没有解决方案


如果我们假设所有可能的
$a
$b
对都至少有一个解决方案(可能有证据,我不知道),并且您选择它们的方式确实不知道
$secret
,那么我总是希望定义
$b=”“
,以使攻击尽可能容易。在这种情况下,彩虹表是您的朋友。

如果MD5的行为像一个随机的oracle(这是一个很大的“如果”,请参见下文),那么对
$secret
的穷举搜索是可能的最佳攻击——更重要的是,对
$secret
值的每次“猜测”都必须使用对函数的查询(由于您使用PHP,我假设该函数是在Web服务器中实现的,并且每个“查询”都需要与该服务器进行对话)。后者的含义是缺少发送回攻击者的信息:攻击者只得到一个位(即“
True
”或“
False
”结果)。特别是,攻击者本身不会获得MD5输出。攻击者将获得一长串非信息性的“
False
”结果,除非他命中正确的MD5输出,或者纯粹出于偶然(概率2-128,这真是太小了),或者因为他事先正确猜测了
$secret
的值。值得注意的是,这可以防止攻击者使用许多成本分摊技术,包括预计算表,尤其是过度炒作的表

A是一个神话般的对象,可以被视为一个确定性的黑匣子:你对从给定输入中获得的输出一无所知,只知道该框对给定输入总是返回相同的结果。模型如下:该框包含一个侏儒、一些骰子和一本大书。侏儒使用骰子随机选择输出。He还使用这本书跟踪他已经发送的答案,以便保持一致,即如果输入与以前提交的输入相同,gnome将返回与以前相同的输出,而不是掷骰子

然而,MD5并不是一个随机预言机。例如,我们可以为MD5构建冲突,速度远远快于理论上对128位输出函数的264阻力。此外,请注意,作为一个好的哈希函数(抗冲突等)并不一定需要“随机预言机”例如,它被认为是一个安全的散列函数,尽管它仍然遭受所谓的“长度扩展攻击”(给定
SHA256($a)
),但人们可以在不知道
$a
的情况下计算
SHA256($a.$b)
,计算几乎任意的
$b
)值。因此,随机预言机的保证不适用于MD5(或者,在这个问题上,SHA-256)。这并不意味着更快的攻击是已知的!只是你在这里是独立的

人们还可以指出,
md5($b.$secret)
是一种“密钥散列”,即(消息身份验证码)。用散列函数构建MAC并不容易,正是因为长度扩展攻击(
md5($secret.$b)
,例如,将是一个非常糟糕的MAC)。设计了一种利用散列函数构建MAC的健壮方法;它被调用,并涉及对底层散列函数的两次调用(但其中一次是在短输入上,因此这仍然是有效的)。HMAC的安全性,更确切地说,HMAC如何被视为一个随机oracle,可以“证明”,即简化为一些哈希函数内部属性,在SHA-256的情况下,这些属性被认为是正确的(见Mihir Bellare提供的血腥细节)。通过在
$b
上使用HMAC/SHA-256,并将
$secret
作为密钥,您将从这些安全结果中受益,并且您的构造将更具说服力。此外,我并不声称对
md5($b.$secret)存在已知的攻击
,只是MD5的使用和自制的MAC结构都会引起危险信号,这会降低t的级别