1703867805
区块链技术驱动金融:数字货币与智能合约技术 8.1 算法的基本要求
1703867806
1703867807
我们首先来看一下一些挖矿算法的主要安全要求。如果算法本身不能满足比特币安全性上的基本要求的话,我们也没有必要引入一些新奇的特点。
1703867808
1703867809
已经有许多可能的要求,有些我们在前面的第2章和第5章中已经讨论过。挖矿解谜的结果需要被及时验证,因为每个在网络上的节点都在验证每个解谜的结果,即使是那些没有直接参与挖矿的节点,包括SPV(简单支付验证)的客户端。我们还需要解谜的难度具有可调整的特征,解谜难度可以随着新加入用户而增大的哈希算力得到调整。这样一来,解谜过程就可以具备足够的难度使得对区块链的攻击变得代价高昂,同时又能保证解谜本身可以在一个稳定的频率上实现(比特币系统中大约每10分钟完成一个解谜过程)。
1703867810
1703867811
到底什么是比特币的挖矿解谜?
1703867812
1703867813
到现在为止我们一直在用“比特币解谜”这个名称,更加精确的说法是,我们称它为一个“不完全哈希函数原像解谜”(partial hash-preimage puzzle),因为这个运算的目的,是找到一个不完全的特定哈希函数输出值的原像——也就是一个低于某一特定目标区值的结果。除此之外,一些罕见的特征也可以用来作为比特币的挖矿解谜运算,比如找到一个区块,它的哈希函数值至少有k个点位是零,但是通常直接比较既定目标是最简单的方法。
1703867814
1703867815
比特币用的基于SHA-256挖矿解谜哈希函数,很显然已经满足了这两个要求。它可以通过任意调节一个参数(目标)来灵活增加难度。检查这个谜底很容易,只需要一个SHA-256计算和一个与目标的比较即可,不管找到这个谜底的过程有多么困难。
1703867816
1703867817
另外一个核心的要求更加微妙:在任意单位时间找到一个谜底的成功率,大致上要与所贡献的哈希算力成比例。这就意味着,大矿工虽然拥有非常强大的挖矿机,他也只是有着一定比例的优势来成为下一个找到谜底的矿工。即使是小矿工,也会有一定的机会能够成功并且获取奖励。
1703867818
1703867819
为了说明这一点,我们先来设想一个没有满足这个要求的不合格解谜过程。想象一下某一个挖矿解谜要经过精确的n个步骤找到一个谜底。例如,不同于我们当前要求的“找到一个SHA-256结果低于某一个固定目标的区块”的做法,如果要求计算n个连续的SHA-256函数值,这种做法检查结果会变得没有效率,但是这个问题目前无关紧要,更大的问题在于,因为这个解谜过程需要精确的n个步骤来完成,所以网络上解谜更快的矿工将会永远是获得下一个奖励的赢家。很快这个情况就变得路人皆知,最快的矿工会完成所有解谜,而其他矿工完全没有动力继续参与下去。
1703867820
1703867821
再次声明,一个好的解谜方案,是给每个矿工一个按比例性的成功概率来赢得下一个谜底,这个概率是与他们所贡献的哈希算力成比例。就好比往一个不同大小色块组成的目标板上随机地掷飞镖,每个不同大小色块就类似于不同矿工所具有的挖矿运算能力。如果你考虑到这一点,这就意味着你猜中谜底的概率并不取决于你已经做了多少工作去解谜(因为大矿工们总是会做更多的工作量)。所以一个好的解谜是“无关过程的”(progress free)[1]。
1703867822
1703867823
从数学角度来看,一个好的挖矿解谜一定是一个“无记忆进程的”(memoryless process)——而任何其他的方法都将由于过去的挖掘工作,不可避免地在一定程度上奖励挖矿工人。因此,任何可行的解谜从根本上都是一个不断试错的过程(trial-and-error)。这种解谜所需要的时间,必然服从一个指数分布[2],我们曾在第2章讨论过。
1703867824
1703867825
可以调整的难度、快速验证和无关过程属性,是比特币挖矿解谜的三大核心特征。基于SHA-256算法的“不完全哈希函数原像解谜”显然满足了这三大要求。有些人可能会说其他一些特征也很重要,我们在后面讨论其他潜在功能的时候会提及。
1703867826
1703867827
[1]意思是来得早,不如来得巧,但这个巧后面的学问就大了。——译者注
1703867828
1703867829
[2]旅客进入机场的时间间隔也是一个指数分布,后面进来一个人的时间间隔与前面进来人的时间间隔无关。——译者注
1703867830
1703867831
1703867832
1703867833
1703867835
区块链技术驱动金融:数字货币与智能合约技术 8.2 反ASIC解谜算法
1703867836
1703867837
首先我们从讨论设计一个可以反ASIC解谜(ASIC-resistant puzzles)的挑战开始,这个挑战也是最被广泛讨论和追求的可替代目前比特币挖矿解谜的一种。我们在第5章中讨论过,比特币挖矿最初是用普通电脑,然后再升级到GPU和定制化的FPGA设备,到现在基本上由非常强大的优化过的ASIC芯片所垄断。现在的ASIC的挖矿运算能力比一般电脑甚至早期的ASIC都要高太多。一般的电脑即使硬件本身是免费的,也会因为电费价格等因素而变得不可行。
1703867838
1703867839
这个转变意味着,在比特币生态系统里的大部分个体(例如使用比特币交易的客户和商家)已经无法参与到挖矿过程中了。有些人认为这是一个危险的势头,一小部分职业矿工控制了整个挖矿的过程。在中本聪最初有关比特币的论文里,用到过“一个CPU一票”的说法,这个说法时不时被有些人用来说明比特币应该是一个被全部用户所拥有的民主系统。
1703867840
1703867841
其他人觉得ASIC的崛起是不可避免的,而且这也不会伤害到比特币,这种希望实现反ASIC的愿望也只是有些人希望回到“过去的好时光”。对于反ASIC是否可取,我们保持中立的态度,因为只有这样,我们才可以深入讨论一些技术上的挑战和提议的方案,来实现反ASIC的目标。
1703867842
1703867843
反ASIC到底是什么意思
1703867844
1703867845
大致上说,我们想抑制为了挖矿而特别定制的设备的优势。这也可以理解为,设计一个解谜程序,让现有的普通电脑成为最廉价和最有效率的解谜运算设备。但这在现实中不可能,毕竟所有的通用电脑的中央处理器里已经针对一些特殊目的进行了优化。并不是所有的电脑都有相同的优化配置,并且它们随着时代而改变。比如,过去的10年中,英特尔(Intel)和AMD在芯片里加入特殊指令(通常叫作“增加硬件支持”)来更加有效地计算高级加密标准(Advanced Encryption Standard,简称AES)的区块密码。所以有些电脑在挖矿这个事情上总是会比其他电脑更加低效。另外,很难想象设计一个挖矿解密程序,而这些程序是依赖普通个人电脑诸如音响或显示器这些特性的,所以去除了那些通用特性的具有特殊目的的设备,很可能会更有效率,并且成本更低。
1703867846
1703867847
更加实际地说,我们有一个适中的目标:设计一个解谜程序,尽可能地减少最有效率的定制运算设备与通用电脑之间的效率差距。ASIC还是会不可避免地成为更加有效的挖矿机,但我们至少可以将其运算效能限制在一定范围内,从而让个人用户使用他们已有的通用电脑来挖矿仍具备一定的经济效应。
1703867848
1703867849
刚性内存解谜
1703867850
1703867851
大多数被设计成反ASIC的解谜程序中,最普遍被应用的叫作刚性内存解谜(memory-hard puzzles)——解谜需要大量的内存来计算,而不是靠大量的CPU时间。一个类似但又不一样的概念是内存限制解谜(memory-bound puzzles),花在读取内存上的时间,占据了这种程序大部分的计算时间。一个解谜可以是刚性内存类而不是内存限制类,或是内存限制类而不是刚性内存类,或是二者兼而有之。一个微妙但重要的区别在于,虽然CPU的速度是计算时间的瓶颈,但平行运算大量解谜的成本,还是被内存的成本所左右,或者反之亦然。通常对于运算类的解谜程序,我们要做到刚性内存和内存限制,就需要保证在运算过程中大量的内存被要求使用,使之成为一个限制性因素。
1703867852
1703867853
为什么刚性内存解谜或内存限制解谜可以反ASIC?因为用来计算哈希函数的逻辑运算只占了CPU里的一小部分,意思是在比特币的解谜计算里,ASIC不需要执行一些不必要的功能,而只需要执行计算哈希函数的相关功能,所以占了很大优势。另外一个相关因素是,不同的内存性能上的差异(和单位性能的成本)比不同处理器之间运算速度上的差异要小很多,所以,如果我们设计了一个刚性内存类的解谜,计算时需要相对简单的算力但需要大量的内存,这就意味着,解密成本的上升速率将会像内存成本提升速率那样,在一个相对低一些的水平。[1]
[
上一页 ]
[ :1.703867804e+09 ]
[
下一页 ]