众所周知,比特币的POW(工作负载证明)使用的是SHA256算法。一开始个人可以通过CPU参与挖矿。但是比特大陆、阿瓦隆等芯片厂商开发出ASIC芯片后,挖矿就不是个人能做的了。后来随着显卡的挖矿和矿池的出现,社区开始担心矿池会导致计算能力的集中,违背了中本聪最初“一CPU一票”的设计理念。那段时间,中心化的焦虑非常严重,比特币社区的讨论非常激烈。比特币在论坛里一次次被“秒杀”。直到现在,关于矿池是否违反分权原则的争论还在继续。
莱特币的加密算法
有人把矛头指向了SHA256算法,认为矿机和矿池的出现太容易是算法造成的,于是试图寻找更好的算法。
这时候,基于SCRYPT算法的Litecoin诞生了。据说SCRYPT是某著名黑客开发的,但由于没有经过SHA系列等严格的安全审查和全面的论证,一直没有得到广泛应用。与SHA256算法相比,SCRYPT对硬件要求更高,占用内存更多,计算时间更长,并行计算极其困难。显然,SCRYPT算法对挖矿机的抵抗力更强。另外,Litecoin把挡位时间改成了2.5分钟。在假币还很少见的年代,莱特币依靠这两项创新取得了巨大的成功,并长期保持着假币第一的宝座。
后来有人稍微修改了脚本算法,形成了SCRIPTN算法。改进思路都是一样的,都在寻求更大的内存消耗和计算时间,有效防止ASIC矿机。
很快,Litecoin的成功催生了各种算法创新。从2012年到2014年,算法创新一直是社区讨论的热点。每一种使用创新算法的货币都能兴风作浪。
串联算法和大石笔
在人类常用的发明创新方法中,重排和组合可以算是最常用的。除了增加内存消耗和计算时间的想法,还有人开始思考:“能不能用多种哈希算法,而不是只用一种算法”?
于是2013年7月发布了Quark,它是第一个使用多轮哈希算法的。听起来很高,其实很简单,就是对输入数据连续进行9轮哈希运算,将上一轮运算的结果作为下一轮运算的输入。九轮哈希使用的六种加密算法分别是BLAKE、BMW、GROESTL、JH、KECCAK和SKEIN,都是公认的安全哈希算法,现成的实现代码已经存在。
这种多轮哈希法一出现,就给人一种直观安全有力的感觉,追随者不计其数。
DASH(原Darkcoin,暗币)在此基础上做了一个微创新,用了十一个加密算法,分别是Blake,BMW,Groestl,JH,Keccak,Skein,Luffa,CubeHash,Shavite,SIMD和Echo,命名为X11,然后是X13和X15。
这种算法其实是一个串联的思路,但它的缺点是一旦其中一个算法被破解,整个算法都会被破解。就像一条链条,环环相扣。只要其中一环断裂,整个链条就会一分为二。
并行算法与Heavycoin
有了串联,自然会想到并联,Heavycoin(HVC)率先做了尝试。虽然在今天的中国默默无闻,但第一次做到了网游,可谓名噪一时。
HVC算法详情:
1.输入数据,并执行HEFTY1哈希运算以获得结果d1。
2.以d1为输入,然后依次执行SHA256、KECCAK512、GROESTL512、BLAKE512的运算,分别得到输出d2、d3、d4、d5。
3.最后分别提取d2-d5的前64位,混淆后形成最终的256位哈希结果,作为块ID。
为什么你要先做一轮重散列?因为HEFTY1极难操作,所以对矿机的抵抗力远超SCRYPT。但是和SCRYPT一样,安全性并没有经过官方组织的论证,所以增加了后四种公认的安全算法来增强安全性。
优质硬币和优质硬币
当一些人在如火如荼地探索算法时,另一些人指责POW浪费能量,于是POS机制被实现了。虽然POW的支持者极力维护,但不得不承认POW确实消耗能量的事实。这种指责开启了另一种探索方式,即如果能找到一种算法,既能维护区块链的安全,又能在其他方面产生价值,那就更完美了。
在这条探索之路上最令人兴奋的成果就是Primecoin。是之前开发了一点硬币Peercoin的大神Sunny King发明的。素数算法的核心思想是在做哈希运算的同时搜索大素数。为什么要找质数?因为素数比较稀少,而且在数轴上分布不规则,所以在数轴上搜索素数只能盲目搜索和检测,这是POW的特点。
对POW另一个要求是它应该易于验证。在这方面,人类经过数百年的探索,已经取得了一些成果。质数的检验有两种方法,首先是费马检验,然后是欧拉-拉格朗日-利夫兹检验。如果两个测试都通过,就可以认为是质数。
需要指出的是,这种方法不能保证通过测试的数是100%的素数,但不影响系统的运行。即使测试结果是错的,只要每个节点都认为自己是素数。
Prime currency是市场上第一个不采用Hash工作量证明机制的加密货币,挖掘过程本身具有一定的科学价值。但是为什么没有大力推广呢?
根据目前的知识,素数在数轴上的分布是不均匀的,数字越大,素数越稀少。搜索的难度不是线性增加的,所以耗时是不可预测的。然而,区块链需要一个稳定的区块,素数硬币算法并没有受到所有人的欢迎。但这种探索并不是没有意义的,使用POW工作负载的探索还在继续。
ETHASH和以太坊
以太坊原本计划使用POS,但是因为POS设计上的一些问题,开发团队决定在以太坊1.0中使用POW。在那之后,在宁静阶段,邰方将从战俘转换到战俘。功率工作负载证明意味着将功率转换为热量、以太坊和网络稳定性。
以太坊的POW算法被称为et hash(Dagger-Hashimoto算法的改进版),与比特币的工作量证明算法略有不同,它使得用普通硬件进行挖掘成为可能。
Ethash的最新版本旨在满足以下目标:
1.IO饱和:这种算法应该消耗几乎整个可用的存储器访问带宽,这是一种实现抗ASIC的策略。针对的是可用的RAM,尤其是GPU中的显存,比电脑内存更接近理论最优值)
2.GPU友好:让GPU挖掘尽可能简单。针对CPU几乎是不可能的,因为潜在的特殊化好处太大,CPU友好的算法也确实存在易受僵尸网络攻击的缺点。所以综合考虑之后,我选择了GPU友好。
3.轻客户端可验证性:轻客户端在C语言的桌面上应该可以在0.01秒内验证一轮挖掘,而在Python或JavaScript中验证一轮挖掘需要占用高达1 MB的内存(但呈指数级增长)。
4.轻客户端变慢:用轻客户端运行算法的过程要比用全客户端慢很多,这样用轻客户端(包括通过专用硬件)运行算法就不是一个经济可行的挖掘方法。
5.快速启动轻客户端:轻客户端应该能够在40秒内完全运行和验证Javascript中的块。
基于以上原因,开发团队最终发布的Ethash与CPU性能无关,与内存大小和内存带宽正相关。以太坊的这个工作量证明了算法降低了比特币挖矿常用的特定硬件ASICs的效率。
此时此刻,除了工作量证明机制之外的其他共识算法也在不断突破和创新。对于区块链这样需要大规模社会协作和参与的颠覆性技术,值得我们共同期待。