首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算SHA-256“中间状态”?

如何计算SHA-256“中间状态”?
EN

Cryptography用户
提问于 2012-02-16 06:24:35
回答 2查看 11.8K关注 0票数 14

最近我一直在尝试实现一些与比特币相关的代码,我偶然发现了一个奇怪的概念,SHA-256“中间状态”。给出了这里的一些解释。

一般的概念是,比特币依赖于对128字节数据块多次执行SHA散列,但只有后半部分会发生变化。这就是为什么使用“中间状态”的概念。据我所知,为了对128字节的数据执行SHA,需要将散列划分为对数据的第一字节和第二字节的操作。由于第一次散列的结果是常量的,所以我们会将它们保存为“中间状态”,在散列修改后半字节之前,您将恢复“中间状态”,而不是再次计算它。

有人能解释我如何计算这个“中间状态”,它有一个计算整个SHA-256哈希的库,或者哪一个库支持这样的计算?

EN

回答 2

Cryptography用户

发布于 2012-02-16 07:27:02

SHA-256算法通过在Davies模式和梅克尔-达蒙路链中应用加密函数来工作.Merkle rd首先将要被散列的消息分割成块来工作。在SHA-256的情况下,这些块有64个八字节长。因为使用Merkle链接,所以处理前64个八进制块后的内部状态仅取决于算法本身和前64个八进制块的值。如果对多个要散列的消息也进行了修正,则可以预先计算该内部状态以节省处理时间。后续消息可以通过从“中间状态”开始,并且只处理填充消息的以下块来散列。

如果您有一个SHACAL2密码实现并实现Davies步骤和Merkle填充并链接自己,则可以计算“中间状态”。哈希算法实现已经实现了对此的支持,这并不少见。

票数 9
EN

Cryptography用户

发布于 2019-04-09 21:04:23

比特币使用一个80字节的块头作为消息摘要的输入。它需要三个sha256转换才能生成一个块哈希,当它的值低于当前目标时,它可以被接受到区块链中,并且矿工会得到比特币的奖励。

要获得中间状态哈希,只需针对初始/默认状态在前64个字节上执行sha256转换。

这个中间状态只需要由比特币矿工计算一次,因为前64个字节仍然是静态的,矿工所需的工作量减少了33%,还需要两个sha256转换。

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

https://crypto.stackexchange.com/questions/1862

复制
相关文章

相似问题

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