学习区块链随笔(六)

区块链特性。区块链是多种已有技术的集成,创新,主要实现多方信任和高效协同。通常一个成熟的区块链系统具备透明可信,防篡改,隐私安全保障及系统高可靠四大特性。

1.透明可信

(1)人人记账保证人人获取完整信息,从而实现信息透明。

(2)节点间决策过程共同参与,共识保证可信性。

2.防篡改可追溯。

一旦在全网范围内经过验证并添加至区块链,就很难被修改或者抹除。

采用PBFT共识算法,从设计上保证了交易一旦写入即无法被篡改;采用PoW共识算法的系统篡改难度及花费都是极巨大的。若要对此类系统进行篡改,攻击者需要控制全系统超过51%的算力。且一旦发生攻击,区块链网络虽然会接受攻击者计算的结果,但攻击过程仍然会被全网见证。当人们发现这个区块链系统已经被控制以后,便不会相信和使用这套系统。

在此需要说明的是,防篡改并不等于不允许编辑区块链系统记录的内容。只是整个编辑过程被类似日志的形式完整记录下来,且这个日志是不能被修改的。

可追溯是指区块链系统上发生的任意一笔交易都是完整记录的,我们可以针对某一状态在区块链上追查与其相关的全部历史交易。防篡改特性保证了写入区块链上的交易很难被篡改,为“可追溯”提供了保证。

3.隐私安全保障

区块链的去中心化特性决定了区块链的“去信任”特性。由于任意节点均包含了区块校验逻辑,所以节点不依赖其他节点完成区块链中交易的确认过程,也就是无需额外的信任其他节点。“去信任”特性使得节点之间不需要互相公开身份,因为任意节点都不需要根据其他节点的身份进行交易有效性的判断,这为区块链系统保护用户隐私提供了前提。

系统中用户通常以公钥体系中的私钥作为唯一身份标识,用户只要拥有私钥即可参与交易,谁拥有私钥不是区块链关注的事,区块链也不会去记录这种匹配对应关系。

从另一个角度看,快速发展的密码学为区块链中用户的隐私提供了更多保护方法。同态加密,零知识证明等前言技术可以让链上数据以加密形态存在,任何不相关的用户都无法从密文中读取到有用信息,而交易相关用户可以在设定范围内读取有效数据,这为用户隐私提供了更深层次的保障。

4.系统高可靠性

(1)每个节点对等地维护了一个账本并参与整个系统的共识。也就是说,如果其中某个节点除了故障,整个系统能够正常运转,这就是为什么我们可以自由加入或者退出比特币系统网络,而整个系统依然正常工作。

(2)区块链系统支持拜占庭容错。传统的分布式系统虽具有高可靠性,但是通常只能容忍系统内的节点发生崩溃现象或者出现网络分区的问题,而系统一旦被攻克或者说修改了节点的消息处理逻辑,则整个系统都将无法正常工作。

按照系统能够处理的异常行为,可以将分布系统分为

(1)崩溃容错,指可以处理系统中节点发生崩溃错误的系统。

(2)拜占庭容错BFT,指可以处理系统中节点发生拜占庭错误的系统。拜占庭错误来自拜占庭将军问题,现在通常指系统中的节点行为不可控,可能存在崩溃拒绝发送消息,发送异常消息或者发送对自己有利的消息(造假)等行为。

传统的分布式系统是典型的CFT系统,不能处理拜占庭错误,而区块链系统则是BFT系统,可以处理各类拜占庭错误。区块链能够处理拜占庭错误的能力源自其共识算法。而每种共识算法也有其对应的应用场景(或者说错误模型,简单来说既是拜占庭节点的能力和比例)。

例PoW不能有51%的算力协同进行拜占庭行为。PBFT不能容忍1/3的节点发生拜占庭行为。Ripple不能容忍超过1/5的节点发生拜占庭行为。

因此严格来说区块链系统的可靠性也不是绝对的,只能说是在满足其中错误模型要求的条件下,能够保证系统的可靠性,然而再区块链系统中,参与者众多,错误模型完全可被满足,所以我们一般认为区块链系统具有很高的可靠性。

哈希算法。MD5被证明不具备“强抗碰撞性”。只要通过穷举的方法,很快就可以找到一组碰撞输入。当前智能手机几秒钟就可找到一个hash碰撞的例子,所以MD5不推荐。SHA家族包含SHA-0,SHA-1,SHA-2,目前SHA-0已被攻破,SHA-1目前已经被证明不具备“强碰撞性”。SHA-2分为,SHA-224,SHA-256,SHA-384,SHA-512,SHA512/224, SHA512/256六种不同算法,这些算法基本结构一致,仅仅再生成的哈希值长度和循环运行次数方面存在细微的差异。

默克尔树,逐层记录哈希值的特点,使得它具有对数据修改敏感的特征,应用场景:

(1)快速比较大量数据 。(2)快速定位数据块的修改。(3)零知识证明。为了证明某个论断是否正确,通常我们需要将数据发送给验证者,默克尔树提供了一种方法,可以证明某方拥有某数据,而不需要将原始数据发送给对方。

常见数据签名算法中非对称加密算法主要依赖密码学领域的单向函数原理,即正向操作非常简单,而逆向操作非常困难的函数。密码学常用三个单向函数原理为质数分解,离散对数和椭圆曲线问题(ECC)。

RSA算法就采用质数分解原理,随着计算能力的飞速提升,特别是量子计算的发展,人们普遍认为RSA算法将在不久将来被破解,所以推荐采用加密强度更高的椭圆曲线算法。

ECC与RSA对比,密钥长度更短,存储空间更小,带宽要求更低基于ECC椭圆曲线算法的数字签名算法ECDSA,是当前主流的数字签名算法,在区块链领域应用非常广泛。比特币,Hyperledger Fabirc等区块链系统都是采用的ECDSA作为数字签名算法的。

常见共识算法

1.工作量证明(PoW)是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。工作量证明系统的主要特征是客户端需要消耗一定的时间。工作量证明系统的主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。比特币矿机挖矿效率相比普通CPU高数个数量级,带来的影响是算力越发集中于专用矿场,降低去中心化程度,针对这个问题,莱特币采用了一种“内存难题算法”Scrypt作为其挖矿算法,其求解速度主要取决于计算机内存大小,这大大降低了大规模矿场再莱特币中的优势,使得去中心化这一特性得以保证。以太坊所用的Ethash也与Scrypt类似,是一种内存难题算法。

2.权益证明(Proof of Sake, PoS)。如点点币平台,根据你持有货币的量和时间,给你发利息的一种制度。具体地平台里有个名词叫币龄,每个币每天产生一个币龄,比如你持有100个币,总共持有了30天,那么此时你的币龄就是3000,这时候如果你发现了一个区块,你的币龄会别清空为0,假如你每被清空365币龄,将会从区块中获得0.5个币的利息。3000/365*5%=0.41个币。在该PoS体系中,仍然需要挖矿,该机制只是根据币龄降低挖矿难度,加快寻找随机数的时间,这一定程度上减少了计算哈希的资源消耗。

另一种PoS的实现则是像以太坊未来采用共识算法一样,每个节点缴纳一定数量的以太币作为保证金来参与验证工作,如果权益人做出不诚实的行为,其保证金则会被罚掉。此处Algorand,Quroboros等都是目前很热门的PoS类共识算法。

3.委托股权证明。PoS共识算法确实可以解决很多PoW共识算法的问题,但是对于没有币的人而言,他们并不代价可以付,使得一些恶意行为对于他们是有益的,这会导致注明的公地悲剧,在PoS作为共识算法的区块链系统里,上述问题叫做无利益攻击,所以必须有对付这种攻击的有效办法,否则就不能直接使用。

PoS的一个变种算法DPoS,就是解决无利益攻击的一种有效方式,即只有公认的具有较大权益的节点才能参与共识,因此DPoS的本质实际上是一个中心化的共识机制,其中EOS网络即对DPoS共识算法进行了可靠尝试。EOS网络机制中DPoS原理,网络中节点依据他们拥有的代币的量,分配对应的投票权重,所有节点进行投票选出一定数量的(EOS是21个)区块链生产者。进行新区块的生产和协商,区块生产者通过某种方式进行出块且每个区块生产者通过出块来对之前的块进行确认。一个交易在2/3以上的见证人确认后,达到不可逆状态,总的来说,每期选出固定数目的区块生产者后,区块生产者之间都是直接连接从而保证通信的可靠及快速,DPoS就能再较快的时间上达成共识。

4.瑞波共识。严格来说瑞波网络并不算是去中心化的数字货币,在瑞波网络中用户发起的交易经过追踪点或验证点的广播而传递到整个网络中,其中追踪节点主要负责与客户端的的交易请求交互及分发交易信息。验证节点则除了具有追踪节点的功能外,还负责再节点间达成并维系共识,并向账本中添加新的交易信息。

瑞波网络中每个验证点都预先配置了一份可信任节点名单(Unique Node List,UNL)。并与名单中的每个节点维护着点对点的网络连接,因此可以实现较快的通信,每间隔一段时间,瑞波网络将进行如下的共识过程。

1)每个验证节点会不断收到从网络发送过来的交易,通过与本地账本数据验证后,不合法的交易直接丢弃,合法的交易将汇总成交易候选集,交易候选集是否还包括之前共识过程无法确认而遗留下来的交易。

2)每个验证节点把自己的交易候选集,作为提案发送给其它验证节点。

3)验证节点再收到其他节点发来的提案后,如果不是来自UNL的节点则忽略该提案,如果是来自UNL上的节点,就会对比提案中的交易和本地的交易候选集,如果有相同的交易该交易就获得一票,在一定时间内,当交易获得超过50%的票数时,则改交易进入下一轮,如果没有超过50%的交易,将留待下次共识过程去确认。

4)验证节点也把超过50%票数的交易作为天发给其他节点,同时提高所需要的的阙值到60%重复3,4直到阙值高达80%。

5)验证节点把经过80%UNL节点确认的交易正式写入本地的账本,即账本最后(最新)的状态。

可以看到再瑞博网络的共识算法中,参与共识的验证节点是事先知道的,且验证节点间的通信是很快的,因此达成共识的效率很高,且没有PoW类共识算法的额外计算开销,当然这也使得瑞波网络只适用于联盟链的场景。瑞波网络的共识拜占庭容错能力为(n-1)/5,即可以容忍验证节点的20%出现拜占庭错误。

拜占庭将军共识。

拜占庭将军问题是用来解决异步系统中存在恶意节点情况下的共识问题的一个虚构模型,拜占庭容错协议必须处理这些失效,并且这些协议还要满足所要满足所要解决问题要求的规范。算法以弹性t作为特征,t标识算法可以应付的错误节点数。很多经典算法问题只有再t小于n/3时才有解,如实用拜占庭容错算法(PBFT)其中n是系统中的节点总数。

算法核心的关键在于少数人服从多数人这个策略。

广义来讲区块链系统的共识算法君威拜占庭容错共识算法,因为区块链主要应对就是各类外在欺骗,攻击行为,只不过前面所述的共识算法,需要依赖链式结构或者DAG结构来完成算法的一致性,而如PBFT这样的共识算法,则是强一致的共识算法,一旦经过共识便是一致确定的结果,不会出现反复情况,这也是前述共识算法与其他类区块链共识算法的核心区别。

P2P技术及常见协议

应用领域:

1.分布式计算,将大多数终端主机的空闲计算资源进行联合从而服务于同一个计算量巨大的科学计算。

2.文件共享,P2P最直接的应用是文件共享,用户下载完成后,也可以作为服务端供更多用户下载,整个网络中下载人数越多,则下载速度越快,目前国内最流行的P2P文件共享方案既是比特洪流。

3.流媒体直播,国内成功的P2P流媒体直播商业产品如PPlive,PPStream

4.IP层语音通信,是一种全新的网络电话通信业务,它和传统的公共交换电话网电话业务相比,有着扩展性好,部署方便,传播低廉等明显优点,如Skype

P2P有大量且不同特性的网络协议,如比特币及以太坊分别采用的Gossip,Kademlia协议

1.Gossip协议,主要应用于分布式数据库系统中各个slave节点的数据同步,从而保证各个节点数据的最终一致性,有两种模式

Anti-Entropy(反熵)每个节点周期性地随机选取一定数量的相邻节点,互相同步自己的数据,该方式可以保证数据的最终一致性,但该模式下节点会不断地交换数据导致网络中消息数量巨大,网络开销巨大。

Rumor monge(谣言传播)当一个节点收到消息后,该节点周期性地向相邻节点发送新收到的消息,在该模式下,节点仅在收到新消息后的一段时间内转播新消息,所以网络开销小,但有一定概率无法达到强一致性。

在Gossip中,节点之间的同步率和节点间的通信开销是一组互相矛盾的指标,在实际应用中需要权衡。

2.Kademlia协议,为非集中式P2P计算机网络设计的一种通过分布式散列表实现的P2P协议,在Kademlia网络中所有信息均以哈希表条目形式加以存储,这些条目被分散地存储在各个节点上,从而在全网中构成一张巨大的分布式哈希表,在不需要服务器的情况下,每个客户端负责一个小范围的路由,并存储一小部分数据,从而实现实现整个分布式散列表网络的寻址和存储。Kademila协议中使用的分布式散列表具有以异或算法为距离量基础的特性,大大提高了路由查询速度。

区块链中用到哈希运算,默克尔树,数字签名,共识算法,智能合约及P2P网络等技术,是实现区块链透明可信,防篡改,可追溯,隐私安全保障,系统高可靠等特性的原理。

如果时光倒流10年,那时的中本聪在想什么呢?虽不能穿越,但从他后来的工作和表述中,我们大概能还原他的思路。他要把数据做成一个生命体,数据可以随时间轴演变,为了这个目的,他做了如下假设:

(1)数据是交互的。(2)数据有身份。(3)数据是连续的。(4)数据有历史,历史不可改变(5)当下的数据正在进入历史。假使把上述5条中的数据替换成生命,同样成立。只是从“虚拟”进入“现实”,要实现这5条假设,他需要一些工具。幸运的是,这些工具大多数已经成型,但从没有人把它们放到一块儿。

猜你喜欢

转载自blog.csdn.net/u010145988/article/details/104582383