死磕共识算法|pow算法

966 阅读6分钟

死磕共识算法|pow算法

配合以下代码进行阅读:github.com/blockchainG…

写文不易,给个小关注,有什么问题可以指出,便于大家交流学习。

f1

概述

工作量证明(Proof Of Work,简称POW),简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,也是通过检验结果的方式(通过相关的考试)所取得的证明。

工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。这个概念由Cynthia DworkMoni Naor 1993年在学术论文中首次提出。而工作量证明(POW)这个名词,则是在 1999 年 Markus JakobssonAri Juels的文章中才被真正提出。

主流POW共识使用的哈希算法

实际不同的POW共识的核心就是不同的哈希算法,已经有很多Hash函数被设计出来并广泛应用,不过Hash函数一般安全寿命都不长,被认为安全的算法往往没能使用多久就被成功攻击,新的更安全的算法相继被设计出来,而每一个被公认为安全可靠的算法都有及其严格的审计过程。在币圈中我们经常说某某币发明了某种算法,其实主要都是使用那些被认证过的安全算法,或是单独使用,或是排列组合使用。

SHA256

SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,属于SHA算法之一,是SHA-1的后继者。SHA-2下又可再分为六个不同的算法标准。包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

具体的算法解释请查看此文:区块链技术栈全景分析

SCRYPT

Scrypt是内存依赖型的POW算法,莱特币采用此算法。第一个使用Scrypt算法的数字货币是Tenebrix,而后该算法被莱特币使用。莱特币创始人在莱特币创世帖中介绍了莱特币采用的共识机制,挖矿算法,发行总量,挖矿难度等相关重要信息。李启威说明了莱特币所使用的挖矿算法为数字货币Tenebrix所使用的Scrypt算法,是一种符合PoW共识机制的算法。Scrypt算法过程中也需要计算哈希值,但是,Scrypt计算过程中需要使用较多的内存资源。

其它使用Scrypt算法的数字货币还有数码币(DigitalCoin)、狗狗币(DogeCoin)、幸运币(LuckyCoin)、世界币(WorldCoin)等。

算法实现:www.imooc.com/article/503…

串联算法

重新排列组合是人类一贯以来最常用的创新发明方法。很快,有人不满足于使用单一Hash函数,2013年7月,夸克币(Quark)发布,首创使用多轮Hash算法,看似高大上,其实很简单,就是对输入数据运算了9次hash函数,前一轮运算结果作为后一轮运算的输入。这9轮Hash共使用6种加密算法,分别为BLAKE, BMW, GROESTL, JH, KECCAK和SKEIN,这些都是公认的安全Hash算法,并且早已存在现成的实现代码。

这种多轮Hash一出现就给人造成直观上很安全很强大的感觉,追捧者无数。现今价格依然坚挺的达世币率先使用11种加密算法(BLAKE, BMW, GROESTL, JH, KECCAK, SKEIN, LUFFA, CUBEHASH, SHAVITE, SIMD, ECHO),美其名曰X11,紧接着X13,X15这一系列就有人开发出来了。

S系列算法实际是一种串联思路,只要其中一种算法被破解,整个算法就被破解了,好比一根链条,环环相扣,只要其中一环断裂,整个链条就一分为二。

并联算法

Heavycoin(HVC)是第一个做了尝试的并联算法,其原理如下:

  1. 对输入数据首先运行一次HEFTY1(一种Hash算法)运算,得到结果d1
  2. d1为输入,依次进行SHA256KECCAK512GROESTL512BLAKE512运算,分别获得输出d2,d3,d4d5
  3. 分别提取d2-d5前64位,混淆后形成最终的256位Hash结果,作为区块ID。

image-20210202134353334

之所以首先进行一轮HEFTY1 哈希,是因为HEFTY1 运算起来极其困难,其抵御矿机性能远超于SCRYPT。但与SCRYPT一样,安全性没有得到某个官方机构论证,于是加入后面的四种安全性已经得到公认的算法增强安全。

对比串联和并联的方法,Quark、X11,X13等虽使用了多种HASH函数,但这些算法都是简单的将多种HASH函数串联在一起,仔细思考,其实没有提高整体的抗碰撞性,其安全性更是因木桶效应而由其中安全最弱的算法支撑,其中任何一种Hash函数遭遇碰撞性攻击,都会危及货币系统的安全性。

HVC从以上每种算法提取64位,经过融合成为最后的结果,实际上是将四种算法并联在一起,其中一种算法被破解只会危及其中64位,四中算法同时被破解才会危及货币系统的安全性。

ETHASH

Ethash是以太坊上面使用的POW算法,具体的介绍可以查看此文(建议关注此公号):死磕以太坊源码分析之ETHASH算法

POW算法存在的问题

  1. 算力竞争的设计导致了集中化的矿池:尽管PoW的目的是为了保证系统可以去中心化的运行,然而系统运行到现在,却事实上形成中心化程度很高的五大矿池。五大矿池垄断了世界上90%以上的算力,这可能导致大矿池破坏整个网络的行为
  2. 算力竞争的设计导致了大量的能源消耗: 另外,PoW系统需要产生大量的能源消耗:比特币挖矿比159个国家消耗的能源还多;目前77.7%的全球比特币网络算力仍在中国境内;受益于内蒙古和四川两地充沛的电力资源,中国拥有世界上最多的比特币矿场;到2019年7月,比特币网络将需要比美国目前的用电量更多的电力;到2020年2月,它将使用和今天全世界一样多的电力
  3. 业务处理性能低下:尽管投入了大量的能源支持系统的运行,但这些能源消耗绝大部份是用于工作量证明中的hash运算,处理交易业务的性能则非常低,例如比特币每秒只能进行大约7笔交易;以太坊每秒10-20笔。

参考

web.xidian.edu.cn/qqpei/files…