首页 文章

仅使用校验和传输文件?

提问于
浏览
4

是否可以仅使用校验和系统传输大文件,然后通过计算重建原始文件?

假设您传输文件的MD5校验和以及文件的大小 . 通过制作“虚拟文件”并计算其校验和,尝试每一位组合,您最终应“到达”原始文件 . 但在途中你也会遇到很多“碰撞”,校验和也会匹配 .

因此,我们将原始文件的第一个字节更改为某个指定值,再次计算校验和,并发送它 . 如果我们在虚拟文件中进行相同的替换,我们可以测试每个“碰撞”以查看它是否仍然匹配 . 这应该缩小一点,我们可以做几次 .

当然,这样做的计算能力将是巨大的 . 但理论上是否可行,你需要传递多少校验和(比如说1mb)?或者,传输校验和所需的数据量可能几乎与文件一样大,这使得它毫无意义?

5 回答

  • 0

    您需要传输的数据量肯定与文件大小相同 . 考虑一下:如果您可以使用 n-1 字节的数据传送 n 字节文件,这意味着您可能已经发送了 256^(n-1) 可能的数据模式,但是正在从大小为 256^n 的空间中进行选择 . 这意味着使用此方法无法表达每256个文件中的一个 - 这通常被称为pidegonhole principle .

    现在,即使这不是问题,也没有保证在任何给定数量的校验和之后你不会发生碰撞 . 校验和算法旨在避免冲突,但对于大多数校验和/散列算法,没有强有力的证明,在X哈希之后,您可以保证在N字节空间中不会发生冲突 .

    最后,哈希算法至少被设计为难以反转,因此即使可能,也需要不可能的大量CPU功率 .

    也就是说,对于类似的方法,您可能有兴趣阅读Forward Error Correction codes - 它们根本不是哈希算法,但我认为您可能会觉得它们很有趣 .

  • 0

    你在这里有一个信息问题 . 校验和不一定对特定数据集是唯一的,事实上它实际上需要有许多位信息作为源 . 它可以表明收到的数据不是生成校验和的确切数据,但在大多数情况下它无法证明 .

  • 2

    总之“不” .

    举一个假设的例子,考虑一张带有6个像素的24 bpp照片 - 这六个像素的每个颜色通道有2 ^(24 * 6)(2 ^ 144)种可能的强度组合,所以你可以保证,如果你要评估每种可能性,保证MD5冲突(因为MD5是128位数) .

  • 0

    简短的回答:没有任何有意义的形式 .

    答案很长:

    让我们假设一个1000字节大小的任意文件 file.bin . 有 2^(8*1000) 个不同的组合可能是它的实际内容 . 通过发送例如一个1000位的校验和,你仍然有大约 2^(7*1000) 碰撞的替代品 .

    通过发送一个额外的位,您可以将这些减少一半......并且您仍然有 2^6999 冲突 . 当您消除了分数时,您将发送至少8000位,即与文件大小相等或更大的数量 .

    唯一的方法是理论上这可能(注意:我没有说"feasible",更不用说"practical")如果文件实际上不包含随机数据,你可以使用这些知识修剪替代品 . 在那种情况下,你最好使用压缩,不管怎么说 . 内容感知压缩算法(例如,用于音频的FLAC)使用关于输入数据的属性的先验知识来提高压缩比 .

  • 0

    我认为你所想的实际上是一个有趣的话题,但你没有找到正确的方法 . 如果我可以尝试重新解释你的问题,你会问是否有办法将函数应用于某些数据,传输函数的结果,然后从terser函数结果重建原始数据 . 对于单个MD5校验和,答案是否定的,但对于其他函数,只要您愿意发送多个函数结果,就有可能 . 一般来说,这个研究领域被称为compressed sensing . 有时精确重建是可能的,但更常见的是用作图像和其他视觉或声音数据的有损压缩方案 .

相关问题