是否可以强制文件生成特定的 MD5 签名?

信息安全 md5
2021-09-05 07:08:23

有时 MD5 用于验证下载的文件是否确实有效。

所以我想知道黑客是否有可能修改文件并引入一些恶意代码并使该文件生成原始 MD5。

例子

Original program

MD5:

eac2a0844b652ecea010ec38960d18ba

恶意代码

Original program
Malicious Code

MD5:

5c07d676b765510db628978dc593aa0d

恶意代码+随机位修改MD5

Original program
Malicious Code
00000000000000000000000000000000

MD5:

0ade6514efd2d247105ba6249e31ae47

恶意代码+随机位修改MD5

Original program
Malicious Code
00000000000000000000000000000001

MD5:

1a499c7ad2755cd66eeea78f5b56f6d0

...稍后的几种组合...


恶意代码+正确位修改MD5

Original program
Malicious Code
d1bf573000019911b85cbeb24503e745

MD5:

eac2a0844b652ecea010ec38960d18ba //Just an example, real MD5: 882789190dcfee14d563913d345054e0

如果有足够的时间,恶意用户能否找到生成原始 MD5 的字符串?

1个回答

有点。但这需要很长时间。

能够创建具有特定已知哈希的文件被称为前映像攻击。一个例子是我要求一个哈希到beefbeefbeefbeefbeefbeefbeefbeef. 理论上,做到这一点的唯一方法是尝试为每个可能的 MD5 输入计算哈希值,直到找到给出该哈希值的输入。无法保证此输入存在(尽管它很可能存在),并且完全有可能找到它需要宇宙规模的时间,即使现代处理器上的 MD5 散列速度也是如此。有一种已知的攻击将 MD5 原像电阻从 2 128削弱到 2 123.4这从 10 22千年(每微秒一个哈希)到 10 20 千年,所以还是不是特别实用!

创建与现有文件具有相同哈希值的另一个文件称为第二次原像攻击。这是哈希冲突的一种特殊情况——通常,您只想找到两个具有相同输出哈希的字符串。其中有一些是已知的,您甚至可以生成自己的但是,在您的情况下,您将保持第一个输入不变,并寻找第二个输入,该输入既包含第一个输入,又包含一些其他特定内容。这大大减少了散列函数的潜在输入集,这意味着您正在寻找输入子集中可能根本不存在的东西。找到它的唯一方法是尝试散列每个有效值,直到找到一个。

理论上,你也许能找到这样的输入,但它可能根本不存在,而且找到它可能需要比宇宙存在的时间更长的时间。可能不值得担心!

顺便说一句,这就是为什么 MD5 可以用作下载或类似的校验和的原因 - 能够生成具有与固定原件相同的校验和的不同文件将是一个计算妙招,如果仅用于篡改则有点浪费下载。只需修改列出的供下载的 MD5 字符串通常要容易得多。