鸡/蛋问题:文件内的文件哈希(包括哈希)!可能?

The*_*can 11 algorithm math hash

事情是我有一个文件,有元数据的空间.我想在其中存储用于完整性验证的哈希.问题是,一旦我存储了哈希,文件和哈希就会随之改变.

我完全理解,根据定义,使用md5/sha等单向加密哈希方法是不可能的.

我也知道容器可以存储与内容分开的验证数据,如zip&co所做的那样.

我也知道可以单独计算散列并将其与文件一起发送,或者将其附加到末尾或客户端在计算散列时忽略它.

这不是我想要的.

我想知道是否有一种算法可以从包含散列本身结果的数据中获取结果散列.

它不需要加密或满足很多标准.它也可以基于一些启发式算法,在经过一段时间后提供所需的结果.

我真的不是很喜欢数学,但是不可能有一些真正先进的指数模多项式循环反向参考偏差使这成为可能吗?

如果没有,最新的(如果有)证据反对它?

我需要tis的原因是因为我希望(最终)与MP4文件一起存储哈希.它的复杂,但其他解决方案并不容易实现,因为文件走过了一个设计糟糕的生产线......

Jas*_*n S 7

在某种程度上,可以使用CRC执行此操作.我过去所做的是在文件中留出4个字节作为CRC32的占位符,用零填充它们.然后我计算文件的CRC.

然后,通过计算CRC多项式的伽罗瓦域中的数,可以填充占位符字节以使文件的CRC等于任意固定常数.

(更多细节可能但目前还不正确.你基本上需要在Galois字段中计算(CRC_desired - CRC_initial)*2 -8*byte_offset,其中byte_offset是占位符字节和文件末尾之间的字节数. )


注意:根据@ KeithS的评论,这个解决方案不是为了防止故意篡改.我们在一个项目中使用它作为将嵌入式系统中的元数据绑定到用于编程的可执行文件的手段 - 嵌入式系统本身并不直接了解用于编程它的文件,因此无法计算CRC或散列本身 - 用于检测嵌入式系统与用于对其进行编程的文件之间的无意不匹配.(在后来的系统中,我刚刚使用过UUID.)

  • 这基本上是泰勒的第二选择; 对数据进行哈希处理,然后将哈希值粘贴到文件的前面.这样做的缺点是散列是文件的一部分,这意味着您必须信任文件的一部分,以确保您可以信任其余部分.它还允许破解一个文件以篡改文件,而不必破解文件和MD5签名存储库; 因此,它只能证明文件的格式良好,而不是文件的合法作者上传的内容. (2认同)