【技术分析】加密货币如何加密(一)

【技术分析】加密货币如何加密(一)

      摘要:区块链世界通过共识算法、加密、点对点网络以及奖励机制等,可以形成一个自治的社区,形成一个通过挖矿机制(POW)来达成一种不通过中心机构来达成的信任,最终实现点对点的价值流通。谈到不同的共识机制,就有很多话题可以说了,甚至可以说区块链的发展就一直伴随着共识机制以及算法的改进,那我们就来介绍一下不同的共识机制、算法及其原理:其实关于共识机制和算法,现在经常被混于一谈,但是要分辨开来的话,那就是机制主要是指POW,POS与DPOS,算法则主要指的是POW下的各种算法。在EKT中Token链是一个并行多链的结构,多链多共识,共享用户基础,这也意味着使用EKT公链,可以把Token链和Dapp链分离,并*的选择共识算法和加密算法。

      首先我们介绍一下POW机制里所采用的各种算法:

 

     【Hash函数】

      如上所言,我们经常说的POW算法本质是一个Hash函数。Hash函数是一个无比神奇的东西,说他替中本聪打下了半壁*一点不为过,学习比特币应该从学习Hash函数入手,理解了Hash函数再去学比特币原理将事半功倍,不然将处处感觉混沌,难以开窍。而中本聪也将Hash函数的所有特性使用得淋漓尽致:已经有很多Hash函数被设计出来并广泛应用,不过Hash函数一般安全寿命都不长,被认为安全的算法往往没能使用多久就被成功攻击,新的更安全的算法相继被设计出来,而每一个被公认为安全可靠的算法都有及其严格的审计过程。

      在区块链世界中我们经常说某某币发明了某种算法,其实主要都是使用那些被认证过的安全算法,或是单独使用,或是排列组合使用。矿工在处理交易数据(对数据也是进行哈希)的同时不断的进行哈希计算,求得一位前23位为0的哈希值,这个值成为nonce黄金数。当全网有一位矿工哈希出nonce时,他就会把自己打包的区块公布出去,其他节点收到区块验证区块后就会一致性认为这个区块接到了区块链上,就继续进行下一个区块的打包和哈希计算。

      在这个过程中,中本聪是通过算力的比拼牺牲了一部分最终一致性(因为会有分叉的产生)并且需要等待多个确认,但是这种简单暴力的方法却保证了整个区块链系统的合法性,而且把区块链系统的健壮性提升到极致,就算全网只剩下一个节点运行,这个区块链系统还是会继续运行下去。最后POW也充分提高了区块链系统的安全性,依靠51%攻击理论去破坏区块链系统是在以往被认为只有*或者疯子才会采取的方法。但最近似乎在比特黄金这个项目上,有人真的尝试控制50%以上算力并改写了区块。

 

     【SHA256算法】

      SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数,经历了SHA-0,SHA-1,SHA-2,SHA-3系列发展。NSA于2007年正式宣布在全球范围内征集新新一代(SHA-3)算法设计,2012年公布评选结果, Keccak算法最终获胜成为唯一官方标准SHA-3算法,但还有四种算法同时进入了第三轮评选,分别是:BLAKE, GrøSTL, JH和SKEIN,这些算法其实也非常安全,而且经受审查,被各种竞争币频繁使用。

      比特币采用SHA256算法,该算法属于SHA-2系列,在中本聪发明比特币时(2008)被公认为最安全最先进的算法之一。除了生成地址中有一个环节使用了REPID-160算法,比特币系统中但凡有需要做Hash运算的地方都是用SHA256。随着比特币被更多人了解,大家开始好奇中本聪为何选择了SHA256,同时对SHA256的安全性发表各种意见,SHA256妥妥经受了质疑,到目前为止,没有公开的证据表明SHA256有漏洞,SHA256依然牢牢抗住保卫比特币安全的大旗。当然大家心里都明白,没有永远安全的算法,SHA256被替代是早晚的事,中本聪自己也说明了算法升级的必要和过程。

 

    【SCRYPT算法】

      后来随着显卡挖矿以及矿池的出现,社区开始担心矿池会导致算力集中,违背中本聪“一CPU一票”的最初设计理念。在那段时间,中心化的焦虑非常严重,讨论很激烈,比特币一次又一次“被死亡”,直到现在,针对矿池是否违背去中心化原则的争论仍在继续。无论如何,有人将矛头指向SHA256,认为是算法太容易导致矿机和矿池出现,并试图寻找更难的算法。恰逢其时,使用SCRYPT算法的莱特币(Litecoin)横空出世。据说SCRYPT是由黑客开发,由于没有得到诸如SHA系列的严格的安全审查和全面论证,一直没被广泛推广使用。

      与SHA256算法相比,SCRYPT占用的内存更多,计算时间更长,并行计算异常困难,对硬件要求很高。很显然,SCRYPT算法具有更强的抵御矿机性,莱特币还将区块时间改为2.5分钟,在那个山寨币还凤毛麟角年代,莱特币依靠这两点创新大获成功,长期稳坐山寨币第一宝座位置。后来有人在SCRYPT的基础上稍作修改形成Scrypt –N算法,改进思路都一样,都是追求更大的内存消耗和计算时间,以有效阻止ASIC专用矿机。很快,莱特币的成功催生了各种各样的算法创新,2012至2014年间,算法创新一直都是社区讨论的热门话题,每一个使用创新算法的币种出现,都能刮起一阵波澜。

 

     【串联算法】

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

      这种多轮Hash一出现就给人造成直观上很安全很强大的感觉,追捧者无数。现今价格依然坚挺的达世币(DASH,前身是暗黑币,Darkcoin,)接过下一棒,率先使用11种加密算法(BLAKE, BMW, GROESTL, JH, KECCAK,SKEIN, LUFFA, CUBEHASH, SHAVITE, SIMD, ECHO),美其名曰X11,紧接着X13,X15这一系列就有人开发出来了。S系列算法实际是一种串联思路,只要其中一种算法被**,整个算法就被**了,好比一根链条,环环相扣,只要其中一环断裂,整个链条就一分为二。

 

【并联算法】

      有人串联,就有人并联,Heavycoin(HVC)率先做了尝试。HVC如今在国内名不见经传,当时还是名噪一时,首次实现链上游戏,作者是俄罗斯人,后来不幸英年早逝,在币圈引起一阵惋惜。HVC算法细节:

a.    对输入数据首先运行一次HEFTY1(一种Hash算法)运算,得到结果d1

b.    以d1为输入,依次进行SHA256、KECCAK512、GROESTL512、BLAKE512运算,分别获得输出d2,d3,d4和d5

c.     分别提取d2-d5前64位,混淆后形成最终的256位Hash结果,作为区块ID。

 

      之所以首先进行一轮HEFTY1 哈希,是因为HEFTY1 运算起来极其困难,其抵御矿机性能远超于SCRYPT。但与SCRYPT一样,安全性没有得到某个官方机构论证,于是加入后面的四种安全性已经得到公认的算法增强安全。对比串联和并联的方法,Quark、X11,X13等虽使用了多种HASH函数,但这些算法都是简单的将多种HASH函数串联在一起,仔细思考,其实没有提高整体的抗碰撞性,其安全性更是因木桶效应而由其中安全最弱的算法支撑,其中任何一种Hash函数遭遇碰撞性攻击,都会危及货币系统的安全性。HVC从以上每种算法提取64位,经过融合成为最后的结果,实际上是将四种算法并联在一起,其中一种算法被**只会危及其中64位,四中算法同时被**才会危及货币系统的安全性。

      比特币只使用了一种Hash算法,假如未来某日SHA256被证明不再安全时,虽然可以更该算法,但考虑到如今“硬分叉猛于虎”的局面,届时引发动荡不可避免,但如果使用并联算法,就可以争取平静的硬分叉过渡时间。


    【EKT的选择】

      EKT的中心思想是设计一个社区的机制,让开发者可以轻易的开发一个DAPP,其他的交给EKT来处理。

      由于货币需要一个稳定的系统,智能合约设计的越复杂出错的可能性就越高,所以在早期中本聪认为货币系统是不需要图灵完备的语言的,比特币之所以不支持智能合约也是觉得货币需要极高的稳定性。那么,如何运行区块链里保持货币稳定的同时又可以开发Dapp呢?有一种比较好的解决办法就是把Token链和DApp链分开。

      在EKT中Token链是一个并行多链的结构,多链多共识,共享用户基础。设计并行多链有两个原因:

1.    每个Token发行者或者链的发行者对共识的要求是不同的,对去中心化程度要求比较高的可以选择PoW,对TPS要求比较高的可以选择DPOS,每个链的Token进行交易的时候消耗的是当前链的主币作为交易费,也提高了发行链的灵活性。

2.    并行多链可以共享用户,不同链的拥有者是一个互利关系,可以很方便的进行不同链的资产转移,而且多链并行理论上整个网络的TPS是没有上限的。

       在EKT中Token链是一个并行多链的结构,多链多共识,共享用户基础,这也意味着使用EKT公链,可以把Token链和Dapp链分离,并*的选择加密算法。

       在项目初期,EKT 除了默认提供的 DPOS 共识算法以外,还会陆续支持工作量证明(POW)以及股权证明机制(POS)。 用户在基于EKT 主链的代码部署自己的主链时,可以选择使用哪种共识算法。在部署完以后再去 EKT 的客户端中进行注册。共识算法一旦选定就会记入 EKT 主链,不可更改。至于为何EKT在一开始就越过了POW算法,直接在主链上选择了DPOS共识,我将在下周的文章中继续分享。


 

参考阅读:

20171026 解读区块链加密算法

20180115 区块链与密码学原理之:Hash算法的分类和原理浅析

20180501 从共识的历史看区块链的共识机制。

20180516 区块链共识机制的演化

20180306 5分钟区块链 | 技术篇-哈希算法

《ChainInteroperaability》

《Bitcoin: APeer-to-Peer Electronic Cash System》

《Ethereum whitepaper》

《EKT whitepaper》


END


好了,今天关于“加密货币”的相关文章就到这里了。

如果大家有任何关于技术上的问题想与我讨论,

欢迎加入我的公链开发QQ群:699726921

项目交流可进项目QQ群:173806202

如想关注EKT的项目进展,欢迎关注微信公众号:EKT通用积分



END


好了,今天关于“加密货币”的相关文章就到这里了。

如果大家有任何关于技术上的问题想与我讨论,

欢迎加入我的公链开发QQ群:699726921

项目交流可进项目QQ群:173806202

如想关注EKT的项目进展,欢迎关注微信公众号:EKT通用积分