区块链算法分为密码算法和共识算法,我们先来了解密码算法。

区块链系统包含了计算机科学过去 20 多年的成果:计算机网络 P2P、算法、数据库、分布式系统、计算机密码学,等等。其中,计算机密码学又是重中之重。只要想到以后在区块链上跑的会是各种各样的价值:货币、股票、信任、数字资产、版权、交友信息……不需要太多的知识,普通人就能理解密码保护会有多重要。 密码算法的核心是非对称加密算法和椭圆曲线型加密算法。

区块链算法发展趋势(区块链算法解密)(1)

非对称加密算法

对称加密算法和非对称加密算法的区别是什么?

我们前面说过,区块链中信息是加密的,加密后的信息要用特定密钥才能打开。对称加密算法呢,就是加密方和解密方使用同一个密钥。就像你的邮箱密码。加密(设定密码)时输入的是它,解密(使用邮箱时)输入的也是它。这种算法,密码容易被人窃取,被破解,不安全,只不过加密解密快一点而已。非对称加密算法,每个用户则拥有两把密钥。一把是公钥,一把是私钥,公钥加密,私钥解密,私钥加密,公钥解密,这个过程我们前面提到过,它的安全性是很可靠的,只不过加密解密慢一点而已。

对称加密算法就是一把钥匙,快但不安全,非对称加密算法则是两把钥匙,安全但不快。但在区块链的价值互联中,最重要的是安全,所以用非对称加密算法。

椭圆曲线型加密算法的特点和原理是什么?

现在的区块链中,有很多使用的是椭圆曲线加密算法。

椭圆曲线型加密算法利用的是椭圆曲线数学的一种算法:

1.它并不是椭圆的曲线,只是它的表达形式有点像计算椭圆周长的积分公式。

2.在椭圆曲线的计算公式Q=kP 中,如果知道了 k 和 P,我们一下子就可以求出 Q 的值来,但如果给定了 Q 和 P,我们却很难求出 k 的值来,这在数学中被称为是椭圆曲线的离散对数问题。

正因为这样,我们才能将 Q 作为公钥,公开出去,而将 k 作为私钥,私密保管。要想用公钥来破解私钥,那就是一个比登天还难的事。

共识机制是区块链独特的创新之处,是区块链稳定运行的保障,之前班主任也介绍过区块链的共识机制,今天我们从算法的角度深入了解区块链共识机制是怎么运行的。

什么是 Paxos 算法?

Paxos 算法是解决的是非拜占庭将军问题,也就是说仅仅是分布式系统中的节点存在问题,但是不存在恶意节点的问题,在这种情况下如何达成共识。

这个算法有点像现在的议会制度,大家需要提交议案和表决议案。然后想办法让大家对一份议案表决通过。 Paxos 算法的提交分为准备和提交两个阶段。准备阶段解决大家要对哪一个提案进行投票,提交阶段解决确认提案的问题。在提交阶段,如果一个提案收到了大多数节点的回复,系统则要发出确认消息,就像你关闭网页时,网页还要提示你是否“确认”,如果再收到了大家的确认消息,提案就确认了。如果大家不同意这个提案,则用新的提案来代替。

就个人理解,这种做法如果是在一个相对私有环境中或者网络环境比较好的情况下,效果会比较明显,实际上,所谓收到大多数的回应,这也叫节点自身的评估,因为节点没有更好的方法去判断,到底算不算是大多数了,尤其是节点总数还不固定的情况下。

什么是 Raft 算法?

因为 Paxos 算法过于复杂和难以实现, Raft 算法应运而生,其目的是在可靠性不输于Paxos的情况下尽可能的简单易懂。

举个 Raft 算法的例子。

假如石头村(区块链)有很多村户(节点),每户人家都有个数据库。石头村要确保乡长下来检查时,大家家里的数据库是一样的。石头村便采取了这样的方式。大家在村户中投票选出一个村长,有了村长后,村里的公文都要经过村长。村长接到乡长要下来视察的消息后,就会向所有村户发出命令,并且等待大家的反应。如果有超过一半的村户执行了这个命令,村长再向上级回复。如果出现了异常情况,比如村长挂了。那就重新选举村长。

什么是 PBFT 算法?

上面的两个算法,如果有节点不响应其实有点不好办,而 PBFT 算法可以使节点只有 2/3 正常时也可以正常工作。PBFT解决了原始拜占庭容错算法的效率不高的问题,将算法复杂度由指数级讲到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。腾讯的区块链用的就是 PBFT 算法。

举个例子:石头村小学要举行百米跑,一共有 4 个人参加,为了节约成本,比赛没有请裁判,而是在 4 个人中随机选出一个人来作裁判。如果裁判是公正的,而当他发出消息,如“预备”时,大家认为这个消息没有问题,就执行。而他看到至少有 2 个人和自己一样做好了预备姿势时,就可以喊“跑”。就可以起跑了。也就是,只要超过一半的人状态是对的,就可以前进。如果裁判不公正,在大家没按正确姿势做预备,跑时就指挥,那这个裁判就会被换掉。

PBFT算法的优点:

PBFT算法公式各节点由业务的参与方或者监督法组成,安全性和稳定性由业务双方保证。

共识的时延大约在 2~5 秒,基本达到商用实时处理的要求。

共识效率高,可满足高频交易量的需求。

因为非常适合联盟链的应用场景,PBFT及其改进算法因此成为目前使用最多的联盟链共识算法。改进主要集中在:

① 修改底层网络拓扑的要求,使用 P2P 网络;

② 可以动态地调整节点数量;

③ 减少协议使用的消息数量等。

不过 PBFT 仍然是依靠法定多数(quorum),一个节点一票,少数服从多数的方式,实现了拜占庭容错。对于联盟链而言,这个前提没问题,甚至是优点所在。但是在公有链中,就有很大的问题。

我们可以发现,区块链算法的巧妙之处是将人类的社会机制,历史经验,包括数学模型应用到复杂的计算机系统之中达成了区块链想要的功能。我们有理由相信区块链和现实社会运作有着千丝万缕的关系,正因为如此区块链的发展并不是冥冥之中的产物。

,