http://www.wgdsb.com

AsicBoost和SegWit的技术讨论

BTB发布于2018-04-24 17:30:46
0
48
0
关于AsicBoost和SegWit的讨论已经冷清了很多,但我还是想从技术的角度尝试解释下:


AsicBoost是什么
AsicBoost和SegWit有什么关系
在说这两件事情之前,离不开一个关键词:挖矿,那就先来说说挖矿吧!比特币    


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


从上图中可以看到Block hash是从哪些字段组合之后再做hash而得到的,其中黄色背景的字段就是块头,它包含:


版本号
上一个块的hash
Merkle root
timestamp(时间戳)
bits(难度)
Nonce (随机数)
在一轮挖矿过程中,其中的版本号、上一块的hash、难度都是确定的,矿工需要做的就是不断的修改Nonce,以改变当前块的hash值以找到小于当前难度的Block Header。


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


4bytes的Nonce的意味着他的搜索概率空间为2^32,也就4G次的hash运算就能遍历完,对于当前的单个矿机来说也就是一瞬间就可以完成的事。


在Nonce的搜索空间不够的情况下,就只剩下timestamp和Merkle root可以改变了,timestamp可以前后调整,但是调整之后的搜索空间还是不够。


矿工通过修改Coinbase交易、或者交易顺序、或者其他的方式,获取新的Merkle Root,再重新做232次Nonce的遍历。而`Merkle Root`是32 bytes,它的搜索空间足够大。


总结比特币的挖矿:


简单来说比特币挖矿就是通过不断更改Nonce来改变块hash以寻找小于当前难度的Block Header,但是Nonce的搜索空间太小了,在做完232 次哈希没有找到对应的块头就需要变更Merkle Root重新计算。
上面说了简单说了下比特币挖矿机制,那AsicBoost又是怎么回事呢?


AsicBoost
 
AsicBoost是和SHA256的计算、Block Header结构有关的一种算法,在开始计算块头hash的时候是需要补齐到128 bytes再做SHA256计算,而上面所示块头只有80 bytes,剩下的需要使用固定的48 bytes填充到128 bytes。


而在计算128 bytes的hash的过程是分两个过程进行的,前64 bytes一起计算,后64 bytes一起运算:


这样一个被填充过的块头就被分成了两个部分,比较有意思的是Merkle Root,Merkle Root的32个bytes中前28个bytes被放在前部分计算,后4个bytes被放在后部分计算,Block Header hash的计算公式为:


SHA256=F(Chunk1)+B(Chunk2)
Chunk1=(version)+(Previous hash)+F28(Merkle root)
Chunk2=B4(Merkle Root)+Timetamp+Bits+Nonce+padding
结合上面所述,块hash计算时就出现了一个现象:


每次更改Nonce的值的时候,Chunk1的值保持不变,这意味着每次变更Nonce的时候只需要重新计算B(Chunk2)再结合上一次计算的F(Chunk1)即可。
这是一种优化挖矿的方法,优化之后每一轮在可搜索空间中变更Nonce,计算SHA256的公式就变成了:


SHA256=F(Chunk1)(不变)+B(Chunk2)`
基本上所有的矿机都做了这个优化。而AsicBoost在这个优化的基础上又延伸了思路,找到了另一种优化方法:


既然可以保持Chunk 1不变,有没有办法保持Chunk 2不变呢?从前面的公式中可以看到只要保持Merkle Root的最后4位、时间戳、和Nonce不变的情况下即可保持Chunk 2不变。
如果能够找到Merkle Root后四位是相同的话,那么在同一个timestamp和Nonce不变的情况下,就可以得到另一个优化公式:


SHA256=F(Chunk1)`+B(Chunk2)(不变)
对于timestamp来在一轮挖矿过程中它基本是不变的,而Nonce是在232内搜索空间内遍历的,剩下的问题就是要找到足够多的后四位相同的`Merkle Root`,这样在每次遍历Nonce时就可以复用后部分的计算结果,就有效的减少了计算,提高了找到块hash的概率。


前面说过可以通过改变交易顺序、更改Coinbase等方式得到新的Markle Root,这样就可以通过碰撞找到后4位相同的Merkle Root,那通过碰撞找到后4位相同的hash的概率是多少呢?根据”生日悖论”(后4位相同的bytes就是32 bits相同的概率),它的概率是:]


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


这种优化理论上能够提高20%的碰撞效率,而合并的性能提升大概是7%左右。AsicBoost可以在软件上实现,也是通过芯片(硬件)上实现。变更Merkle Root的方法:


修改Coinbase交易,白皮书认为不够高效
另一种就是更新Merkle树的排序
 …其他方式
可以看出AsicBoost是一种基于比特币块头和SHA256算法做出的优化,并不是一种攻击。


AsicBoost只有一种技术优化
 
很明显AsicBoost既没有破坏现在的比特币协议,也没有生产出不可用的块,更不会出现针对比特币的安全问题。
而基于SHA256算法的优化在比特币历史中也出现了好几次:
1. 前边提到的变更Nonce的时候,前半部分F(Chunk1)并不需要重新计算
2. 后部分的前三轮也是可以优化的参考ms3steps
3. ……
4. AsicBoost


可以这样说所有的软件和系统都存在被优化的可能性,比特币的挖矿历史就是一部不断优化效率的过程。比特币    
究竟我们应该如何定义优化和攻击呢?这是一个值得思考的问题。优化SHA256前64位的计算是允许的,优化后64位的计算就是攻击了吗?


AsicBoost是一个优化算法,只是在原有的比特币挖矿基础上提高了碰撞hash的概率,用来找到更合适的Block Header,提高了找到块头的概率,并不是漏洞
如果存在一种提升比特币挖矿效率的技术,我更希望矿工早日应用上这种技术,这样攻击者和矿工相比就不存在技术优势。毕竟算力才是比特币安全的基础,攻击者在技术上领先矿工的话,比特币被攻击的可能性会增加很多。


介绍完了AsicBoost,再来看下AsicBoost和SegWit又有什么样的关系呢?


SegWit和AsicBoost
 
SegWit(Segregated Witness)即隔离验证,它的应用将会对TX有所改变,它将会采用一种新的TX ID:Witness ID

 





作者:Molly Jane Btbpig
编译:BTB

AsicBoost和SegWit的技术讨论相关文章

本文地址: http://www.wgdsb.com/benzhan/814.html
声明:原创译作欢迎交流讨论,文章内容和观点不代表万格比特的立场。如需转载,请务必注明文章作者以及来源。部分图片来源于网络,我们尊重版权,如有疑问敬请联系,我们将核实并删除。