主页 > imtoken钱包苹果版下载 > 比特币碰撞如何扫描出来 AsicBoost 和 SegWit 并不相互排斥

比特币碰撞如何扫描出来 AsicBoost 和 SegWit 并不相互排斥

imtoken钱包苹果版下载 2023-08-18 05:11:42

关于AsicBoost和SegWit的讨论已经冷清了很多,但我还是想尝试从技术的角度来解释一下:

什么是 AsicBoost?

AsicBoost 和 SegWit 有什么关系

在说这两件事之前,离不开一个关键词:挖矿,那么先说说挖矿吧!

矿业

比特币挖矿机制:比特币挖矿机制采用SHA256算法,但SHA256算法并不是针对整个区块,而是只针对区块头(Block Header)。 下图显示了块的组成:

block

从上图可以看出,Block hash是通过字段组合得到的,然后进行hash。 黄色背景的字段是区块头,其中包含:

版本号

前一个块的哈希值

默克尔根

时间戳(时间戳)

位(难度)

Nonce(随机数)

在一轮挖矿过程中,版本号、前一个区块的哈希值、难度都被确定下来。 矿工需要做的就是不断修改Nonce来改变当前区块的hash值,找到一个小于当前难度的Block Header。

比特币平台关闭后比特币怎么办_比特币每十分钟产生多少个比特币_比特币碰撞如何扫描出来

但是Nonce可用的搜索空间不够,原因是Nonce的位数只有4bytes。 Block Header中各字段占用的位数:

Block Header位数

4bytes的Nonce意味着他的搜索概率空间是2^32,也就是说可以遍历4G的哈希运算。 对于目前的单台矿机来说,瞬间就可以完成。

当Nonce的搜索空间不够时,只能改变timestamp和Merkle root。 timestamp可以来回调整,但是调整后的搜索空间还是不够用。

矿工通过修改Coinbase交易、交易顺序等方式获得新的Merkle Root,然后再进行2^32次Nonce遍历。 Merkle Root 有 32 个字节,它的搜索空间足够大。

总结比特币挖矿:

简单来说,比特币挖矿就是通过不断改变Nonce来改变区块hash,找到一个小于当前难度的Block Header。 但是,Nonce 的搜索空间太小了。 2^32哈希后,没有找到对应的区块头。 更改 Merkle Root 以重新计算。

上面简单提到了比特币的挖矿机制,那么AsicBoost呢?

AsicBoost

AsicBoost 是一种与 SHA256 计算和 Block Header 结构相关的算法。 开始计算区块头哈希时,需要先填满128字节,然后再进行SHA256计算。 上图的区块头只有80字节,其余的需要固定。 48字节填充为128字节。

计算128字节hash的过程分两个过程进行,前64字节一起计算,后64字节一起计算:

块头SHA256计算

这样的填充块头分为两部分。 比较有趣的是Merkle Root。 Merkle Root的32个字节中,前28个字节在前面计算,后4个字节在后面计算。 ,Block Header hash的计算公式为:

SHA256=F(Chunk1)+B(Chunk2)
Chunk1=(version)+(Previous hash)+F28(Merkle root)

比特币碰撞如何扫描出来_比特币每十分钟产生多少个比特币_比特币平台关闭后比特币怎么办

Chunk2=B4(Merkle Root)+Timetamp+Bits+Nonce+padding

结合以上,在计算区块哈希时会出现一个现象:

每次改变Nonce的值,Chunk1的值不变,也就是说每次改变Nonce,只需要重新计算B(Chunk2)和上次计算的F(Chunk1)。

这是一种优化挖矿的方法。 优化后,每轮可搜索空间的Nonce发生变化,计算SHA256的公式变为:

SHA256=F(Chunk1)(不变)+B(Chunk2)`

基本上所有的矿机都做了这个优化。 在这种优化的基础上,AsicBoost又扩展了思路,找到了另一种优化方法:

既然Chunk 1可以保持不变,那有没有办法让Chunk 2保持不变呢? 从前面的公式我们可以看出,只要Merkle Root的后4位、timestamp和Nonce保持不变,Chunk 2就可以保持不变。

如果可以发现Merkle Root的后四位是相同的,那么在相同的timestamp和Nonce不变的情况下,可以得到另一个优化公式:

SHA256=F(Chunk1)`+B(Chunk2)(不变)

对于时间戳,在一轮挖矿过程中基本不变,Nonce在2^32以内的搜索空间中遍历。 剩下的问题就是找到足够多的后四位相同的Merkle Roots,这样每次遍历Nonce时都可以复用后面部分的计算结果,有效减少计算量,提高找到区块哈希的概率。

前面提到,可以通过改变交易顺序、改变Coinbase等方式得到新的Markle Roots,从而通过碰撞找到后4位相同的Merkle Root,那么找到hash的概率是多少通过碰撞相同的最后 4 位数字? 根据“生日悖论”(后4位相同的字节有相同的32位概率),其概率为:

碰撞概率

大约77000次碰撞,有50%的概率会出现后四位相同的hash,这样的碰撞能增加多少概率? AsicBoost 白皮书中给出的结果:

碰撞次数与概率

这种优化理论上可以提高20%的碰撞效率,合并的性能提升大约7%。 AsicBoost 可以在软件中实现,也可以在芯片(硬件)中实现。 如何更改 Merkle Root:

比特币平台关闭后比特币怎么办_比特币碰撞如何扫描出来_比特币每十分钟产生多少个比特币

修改Coinbase交易,白皮书认为效率不够

另一种是更新Merkle树的排序

...其他方法

可见AsicBoost是基于比特币区块头和SHA256算法的优化,并不是攻击。

AsicBoost 只有一项技术优化

很明显,AsicBoost 既没有破坏现在的比特币协议,也没有产生不能使用的区块,也不会有比特币的安全问题。

基于SHA256算法的优化在比特币历史上也出现过数次:

改变上面提到的Nonce时,F(Chunk1)的前半部分不需要重新计算

后半部分的前三轮也可以参考ms3steps进行优化

……

AsicBoost

可以说,所有的软件和系统都有被优化的可能,比特币挖矿的历史就是一个效率不断优化的过程。

我们究竟应该如何定义优化和攻击? 这是一个值得思考的问题。 允许优化SHA256前64位的计算。 优化后的 64 位的计算是攻击吗?

AsicBoost是一种优化算法,只是在原有比特币挖矿的基础上增加了碰撞hash的概率,用于寻找更合适的Block Header,提高了找到block header的概率,不是漏洞

如果有一种技术可以提高比特币挖矿的效率,希望矿工尽快应用这项技术,这样攻击者就不会比矿工有技术优势。 毕竟算力是比特币安全的基础。 如果攻击者在技术上领先于矿工,比特币被攻击的可能性就会增加很多。

比特币碰撞如何扫描出来_比特币每十分钟产生多少个比特币_比特币平台关闭后比特币怎么办

介绍完AsicBoost,我们再来看看AsicBoost与SegWit的关系。

隔离见证和 AsicBoost

SegWit(Segregated Witness)是隔离验证,它的应用会改变TX,它会采用一个新的TX ID:Witness ID

witnesstx

相应的,Winesss ID对应的是Witness Merkle Tree,然后就有了Winess Merkel Root,但是Winess Merkel Root写在哪里呢? 答案是 Coinbase。

在SegWit协议中,Coinbase会增加一个新的输出,新的输出为:

output_data = WITNESS_COMMITMENT_HEADER + ser_uint256(uint256_from_str(hash256(ser_uint256(witness_root)+ser_uint256(witness_nonce))))
script = CScript([OP_RETURN, output_data])

新增的输出包括:由OP_RETURN+WITNESS信息+Witness Merkle Root hash组成的Script。

Witness Merkle Root 的计算不包括 Coinbase,从而避免了 Coinbase 和 Witness Merkle Root 之间相互变化造成的死循环。

这样一来,就有一个问题,就是任何一笔交易在SegWit中的仓位发生变化比特币碰撞如何扫描出来,都会导致Witness Merkle Root发生变化,而Witness Merkle Root的信息应该包含在Coinbase中比特币碰撞如何扫描出来,从而影响变化Coinbase的变化,而Coinbase的变化会导致整个区块的Merkle Root发生变化。

如果SegWit中使用的AsicBoost通过改变交易顺序获得新的Merkle Root,效率会降低,因为Witness Merkle Root和Merkle Root需要同时计算,从而降低了AsicBoost的效率。

这就是 SegWit 对 AsicBoost 的影响。 但一个重要的事实不容忽视:SegWit 和 AsicBoost 并不相互排斥:

只要区块头结构不变,AsicBoost 的优化就依然存在,依然有效。

在SegWit中改变Coinbase以获得Merkle Root与在当前协议中改变Coinbase具有相同的效果,因为Witness Merkle Root不包括Coinbase TX。

比特币平台关闭后比特币怎么办_比特币碰撞如何扫描出来_比特币每十分钟产生多少个比特币

SegWit和AsicBoost并不互斥,并不是说SegWit中没有对AsicBoost的优化。 SegWit中AsicBoost的使用在工程上也可以进行优化:Merkle Root的计算也需要计算hash,在计算Merkle Root的时候可以不时阻塞block hash的计算。 并行计算将是一种更好的优化方法。 在换Coinbase获取Merkle Root的情况下,效率的降低不会特别明显。

总结

AsicBoost的原理:

在计算区块头时,将Merkle Root分成两部分进行计算,如果使用后4位相同的Merkle Root来计算区块哈希,将提高挖矿效率

隔离见证:

SegWit需要使用Wintess TX ID,然后有一个新的Witness Merkle Root,Witness Merkle Root会写入Coinbase,而Coinbase本身不会写入Witness Merkle Root。 因为软分叉,区块头结构没有改变。

根据以上,可以得出以下结论:

AsicBoost 本质上只是基于区块头结构和 SHA256 算法的优化。 AsicBoost 和 SegWit 并不相互排斥

只要区块头结构和SHA256算法不变,AsicBoost就会一直存在。

SegWit 将对 AsicBoost 中交易交换的方式产生影响

在 SegWit 中,交易顺序的每一次变化都会导致 Coinbase 发生变化,进而需要重新计算 Merkle Root。 交易顺序的变化将导致 Witness Merkle Root 和 Merkle Root 发生变化。

如果有更好的工程化方法来优化 AsicBoost,它在 SegWit 中仍然有效

除了改变交易顺序更新 Merkle Root 的效率会降低,用工程优化 AsicBoost 的方法还是可以有效的,比如并行计算

AsicBoost 只是一种优化挖矿的方式,AsicBoost 优化并没有在 SegWit 中消失,因为区块结构没有改变。 G Maxwell 提出了一种改变邮件中区块头的方法,这样 AsicBoost 就不能再使用了。 我不反对这个提议,但我认为没有必要。 如果不允许矿工优化64字节的计算,前64位字节的优化计算不应该也想办法禁止吗? 而且以后还会有其他类似的优化,是不是都应该禁止了?

在给定的条件下,人类总有办法找到比原来的方法B更好的方法A。人类的历史就是效率不断提高的历史。