首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在一个泛函F,使F(sha(a),sha(b)) = sha(ab)

是否存在一个泛函F,使F(sha(a),sha(b)) = sha(ab)
EN

Stack Overflow用户
提问于 2018-06-01 04:39:58
回答 1查看 90关注 0票数 1

我面临着将数据分成部分发送的需求,同时我需要为我的整个数据提供sha256。

类似这样的cat large file | chunker | receiver,其中receiver是期望接收数据的应用程序,可能是在有效负载的报头sha256中具有的块中,然后在有效负载之后。在收集所有块之后,它应该存储整个传输的数据,以及所有数据的sha256 (特定的sha256将仅用于重新散列和确认数据的完整性)。

当然,最简单的事情是如果接收器从整个流数据生成sha256,但我想知道是否有一种更简单的方法,收集所有块的所有散列,并将它们组合起来生成一个最终的散列,该散列将与从所有数据计算的散列相同。

换句话说-我从标题中复制了这个-我想知道是否有一个函数F可以接收数据块的散列列表,然后生成最终的散列,该散列将等于对所有数据生成的散列。

再一次,换句话说,有这个公式:F(sha256(数据),sha256(data1),...sha256(dataN)) =sha256(数据0..N)

函数F是什么?它是一个通用函数,还是计算散列的方式没有这样的东西?

我怀疑没有这样的功能,或者这是一个太复杂的问题,无法回答。

EN

回答 1

Stack Overflow用户

发布于 2018-06-01 10:10:03

AFAIK仍然没有已知的冲突,但我打赌一旦发现一些,即有人发现两个消息m1m2这样的SHA-256(m1) = SHA-256(m2),那么对于几乎任何前缀a散列SHA-256(a || m1)SHA-256(a || m2)将是不同的,即你问的函数实际上不是一个函数(对于相同的输入有不同的输出)。或者换句话说,SHA-2容易受到长度扩展攻击,而AFAIK不会受到前缀攻击。然而,即使这实际上是一个函数,但对于您来说,存在这样一个函数是不够的,您还希望它是快速的。我相信没有这样快的函数计算。

另一方面,SHA-256的工作原理是将原始消息拆分成512位的块,并使用定义良好的过程(基于所有先前块的状态)对其进行处理,因此从理论上讲,您可以修改SHA-256的某些实现,以同时计算两个散列(通过将相同的逻辑应用于不同的初始状态):

应用程序定义的区块的

  1. 哈希(使用标准初始状态)到目前为止的所有区块的
  2. 哈希(使用从与初始状态相同的步骤的上一次输出传递的状态)。

这可能会比单独做这些事情快一点,但我不知道这样一个自定义实现的合理性是否会快很多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50632444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档