最近我一直在尝试实现一些与比特币相关的代码,我偶然发现了一个奇怪的概念,SHA-256“中间状态”。给出了这里的一些解释。
一般的概念是,比特币依赖于对128字节数据块多次执行SHA散列,但只有后半部分会发生变化。这就是为什么使用“中间状态”的概念。据我所知,为了对128字节的数据执行SHA,需要将散列划分为对数据的第一字节和第二字节的操作。由于第一次散列的结果是常量的,所以我们会将它们保存为“中间状态”,在散列修改后半字节之前,您将恢复“中间状态”,而不是再次计算它。
有人能解释我如何计算这个“中间状态”,它有一个计算整个SHA-256哈希的库,或者哪一个库支持这样的计算?
发布于 2012-02-16 07:27:02
SHA-256算法通过在Davies模式和梅克尔-达蒙路链中应用加密函数来工作.Merkle rd首先将要被散列的消息分割成块来工作。在SHA-256的情况下,这些块有64个八字节长。因为使用Merkle链接,所以处理前64个八进制块后的内部状态仅取决于算法本身和前64个八进制块的值。如果对多个要散列的消息也进行了修正,则可以预先计算该内部状态以节省处理时间。后续消息可以通过从“中间状态”开始,并且只处理填充消息的以下块来散列。
如果您有一个SHACAL2密码实现并实现Davies步骤和Merkle填充并链接自己,则可以计算“中间状态”。哈希算法实现已经实现了对此的支持,这并不少见。
发布于 2019-04-09 21:04:23
比特币使用一个80字节的块头作为消息摘要的输入。它需要三个sha256转换才能生成一个块哈希,当它的值低于当前目标时,它可以被接受到区块链中,并且矿工会得到比特币的奖励。
要获得中间状态哈希,只需针对初始/默认状态在前64个字节上执行sha256转换。
这个中间状态只需要由比特币矿工计算一次,因为前64个字节仍然是静态的,矿工所需的工作量减少了33%,还需要两个sha256转换。
https://crypto.stackexchange.com/questions/1862
复制相似问题