美文网首页区块链
1.3区块链核心技术

1.3区块链核心技术

作者: 东方教主CXL | 来源:发表于2018-01-28 00:02 被阅读19次

本文摘自《2017年区块链行业年度特别报告》,允许转载、引用,但必须向本人申请。转载、引用时必须注明来源于“区块宝研究院行业分析师曹先亮,笔名:东方教主”。

这是笔者工作过程中产出的第三份区块链行业研究报告,也是2017年的年终大报告。一定程度上反映了笔者在2017年下半年以来,在区块链行业研究方面的研究成果。

区块链除了构建了强大的区块链基础架构以保证区块链系统的灵活性和稳定性之外,为保证存储于区块链中的信息的安全与完整,还使用了一些强大的密码学核心技术。

区块及区块链的定义和构造中使用了包含哈希算法(哈希函数)、非对称加密算法(公钥密码算法)和共识算法(共识机制)在内的多种核心技术。

区块链技术采用非对称加密算法对交易进行签名,使得交易不能被伪造;利用哈希算法保证交易数据不能被轻易篡改;借助分布式系统各节点的共识算法形成强大的算力来抵御破坏者的攻击。

1.3.1哈希函数

哈希函数,也称为哈希算法。哈希函数是一种密码学算法。在区块链中的作用是:为信息加密,用于为原始信息添加“密码语言”。

哈希函数是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为固定长度的二进制串,其输出值称为哈希值,也称为散列值。哈希函数在现代密码学中扮演着重要的角色,常用于实现数据完整性和实体认证,同时,也构成多种密码体制和协议的安全保障。

在比特币系统中使用了两个密码学哈希函数,一个是SHA256,另一个是RIPEMD160。SHA256算法的一个主要用途是完成PoW(工作量证明)计算,RIPEMD160则主要用于生成比特币地址。

哈希函数的三个性质:

① 碰撞阻力

碰撞是与哈希函数相关的重要概念,体现着哈希函数的安全性。所谓碰撞是指两个不同的消息在同一个哈希函数作用下,具有相同的哈希值。哈希函数的安全性是指在现有的计算资源(包括时间、空间、资金等)下,找到一个碰撞是不可行的。

举例:如果无法找到两个值,x和y,x≠y,而H(x)=H(y),则称哈希函数H具有碰撞阻力。

哈希函数的碰撞阻力是指寻找两个能够产生碰撞的消息在计算上是不可行的。值得注意的是:找到两个碰撞的消息在计算上不可行,并不意味着不存在两个碰撞的消息。由于哈希函数把大空间上的消息压缩到小空间上,碰撞肯定存在。通过简单的计数论证,是可以证明碰撞的确存在的。

哈希函数的输入空间包含所有长度的任意字符串,但输出空间则只包含特定固定长度的字符串。因为输入空间比输出空间大(输入空间是无限的,而输出空间是有限的),一定会有输入字符串映射到相同的输出字符串,也就是说,碰撞是存在的。

打个比方:输入100个值,经哈希函数H之后,输出仅80个值。因为输出的数量小于输入的数量,我们可以确定,某个输出肯定对应多个输入。

也就是说存在x≠y,而H(x)=H(y),存在碰撞;但在计算上,找不出来x和y这两个值,所以称哈希函数H具有碰撞阻力。

哈希函数的碰撞阻力特性常被用来进行完整性验证。完整性是信息安全的3个基本要素之一,是指传输、存储信息的过程中,信息不被未授权的篡改或篡改后能被及时发现。如果原消息在传输过程中被篡改,那么运行哈希函数后得到的新哈希值就会和原来的哈希值不一样,这样就很容易发现消息在传输过程中完整性受损。

在区块链中,某个区块的头部信息中会存储着前一个区块的信息的哈希值,如果能拿到前一个区块的信息,任何用户都可以比对计算出来的哈希值和存储的哈希值,来检测前一个区块信息的完整性。

SHA256是一个主要被比特币世界采用,并且效果还很不错的哈希函数,而且SHA256还获得了安全哈希算法的美名。但是,我们必须谨记,在理论上来讲,世界上是没有哈希函数具有坚不可摧的碰撞阻力的。我们实践中使用的安全哈希算法(SHA256),仅仅是人们经过不懈努力之后,暂未成功找到碰撞的函数。

如果有一天,我们最终找到了SHA256哈希函数的碰撞,那么,就如之前的MD5哈希函数一样,在找到MD5哈希函数的碰撞之后,该函数在实践应用中被逐渐淘汰。

② 原像不可逆

原像不可逆,通俗地说,是指知道输入值x,很容易通过哈希函数H计算出哈希值H(x);但是知道哈希值H(x),却不能通过哈希函数H计算出原来的输入值x。

为什么哈希函数会具有这个特性?因为x的取值来自一个非常广泛的集合(输入空间是无限的)。

原像不可逆的应用是承诺方案(Commitment Scheme),承诺方案被认为是密码学领域中一类重要的密码学基本模型,承诺具有隐藏性和约束性。

承诺模型可以看做一个密封信件的数字等价体。如果Tom想承诺某个信息m,则他可以把m放进一个密封的信封内,无论什么时候他想公开这个信息,则只需要打开信封。这个过程要求数字信件能够隐藏信息,即承诺的隐藏性,同时Tom也不能改变m;而通过承诺的打开,任何人都能验证他所得到的m其实就是Tom最初承诺的信息m,即承诺的约束性。

利用哈希函数的碰撞阻力和原像不可逆两个特性,承诺的隐藏性和约束性均能成立:

隐藏性——如果仅仅知道承诺函数的输出,就如同只看到信封并不能得到信中的内容;

约束性——这就确保了Tom一旦承诺信封内的内容,就不能再改变主意。

③ 谜题友好

通俗地说,难题友好性指的是没有便捷的方法去产生一满足特殊要求的哈希值。也就是说,如果有人想通过锁定哈希函数来产生一些特殊的输出y,而部分输入值以随机方式选定,则很难找到另外一个值,使得其哈希值正好等于y。

哈希函数的难题友好特性,构成了基于工作量证明的共识算法的基础。例如,给定字符串“blockchain”,并在这个字符串后面连接一个整数值串x,对连接后的字符串进行SHA256哈希运算,要求得到的哈希结果(以十六进制的形式表示)以若干个0开头的。按照这个规则,由x=1出发,递增x的值,我们需要经过2688次哈希计算才能找到前3位均为0的哈希值,而要找到前6位均为0的哈希值,则需进行620969次哈希计算。也就是说,没有更便捷的方法来产生一个满足要求的哈希结果。这样通过哈希运算得出的符合特定要求的哈希值,可以作为共识算法中的工作量证明。

正是因为哈希函数具备这三个核心性质,使得哈希函数具备“保证交易数据不能被轻易篡改”的功能。

1.3.2非对称加密算法

非对称加密算法,也叫公钥密码算法。非对称加密算法也是密码学算法,在区块链中的作用是:为交易加密,用于对交易发起、确认、签名、验证。

公钥密码算法是现代密码学发展过程中的一个里程碑。这类密码学算法需要两个密钥:公开密钥和私有密钥。因为加密和解密使用的是两个不同的密钥,另外,私钥可以推导公钥,而公钥不能倒推私钥,所以这种算法也叫做非对称加密算法。

(1)非对称加密算法的特点

加密和解密使用的是两个不同的密钥;公钥是全网可见的,私钥只有信息拥有者才知道;私钥可以推导公钥,公钥不能倒推私钥。

(2)非对称加密算法的用途

非对称加密算法主要有两个用途:一是在发送信息过程中使用公钥加密私钥解密,二是在数字签名过程中使用私钥签名(加密)公钥验证(解密)。

发送信息过程

公钥加密:发送方A用接收方B的公钥对信息加密,并将该加密后的信息传输到区块链网络。

私钥解密:接收方B用其独有的私钥对信息解密,从而确保信息获得传递的同时还保证信息的真实性。

图表5:非对称加密解密过程

数字签名过程

私钥签名:信息发布者用私钥对交易进行签名。用户发起交易时,用私钥对交易信息签名(加密),表明对交易具有所有权,并对真实性负责。

公钥验证签名:矿工用公钥对信息发布者的签名进行验证。矿工收到信息后,用公钥对签名进行验证(解密),若验证通过,则说明:第一,该信息是由特定的私钥的拥有者“签名”的;第二,该信息在签名后没有被改变过。那么,该信息可予以记录到区块链。

在比特币系统中,生成比特币地址的流程中也会用到公钥和私钥。

(3)生成比特币地址流程

①比特币系统随机产生一个随机数为私钥;

②私钥通过Secp256k1椭圆曲线算法生成公钥;

③公钥通过双哈希运算+Base58处理生成比特币地址。

图表6:生成比特币地址流程

私钥生成公钥过程所使用的Secp256K1椭圆曲线算法是一种单向加密函数,公钥生成比特币地址的过程中所使用的也是单向加密哈希函数。基于这些数学函数的密码学,使得生成数字密钥和不可伪造的数字签名成为可能。

(4)非对称加密算法的种类

非对称加密算法主要有以下几种:

图表7:非对称加密算法种类

非对称加密算法在区块链中的使用,具有重大意义。区块链系统中,所有权验证机制的基础是非对称加密算法。从信任的角度来看,区块链实际上是用数学方法解决信任问题。在区块链系统中,所有的规则事先都以算法程序的形式表述出来,人们完全不需要知道交易的对手是“君子”还是“小人”,更不需要求助于中心化的第三方机构来进行交易的信用背书,区块链通过严谨的数学算法就可以建立互信。区块链技术的背后,实质上是算法在为人们创造信用,达成共识背书。

1.3.3共识机制

共识机制,也称为共识算法。在区块链中,共识机制更多的是体现为:一种确保记账一致性的措施、机制。

利用区块链构造基于互联网的分布式账本,需要解决的首要问题是如何实现不同账本节点上的账本数据的一致性和正确性。这就需要借鉴已有的在分布式系统中实现状态共识的算法,确定网络中选择记账节点的机制,以及如何保障账本数据在全网中形成正确、一致的共识。

区块链中常用的共识机制主要有以下几类:

①PoW:工作量证明机制

简单地说,PoW(Proof of Work)就是一份确认工作端做过一定量工作的证明。PoW机制的主要特征是计算的不对称性。工作端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查工作端是不是做了相应的工作。

PoW机制的用例:比特币。

②PoS:权益证明机制

PoS(Proof of Stake)机制在创始区块内写明了股权分配比例,之后通过转让、交易的方式,逐渐分散到用户手里,并通过“利息”的方式新增货币,实现对节点的奖励。PoS机制使用一个确定性算法以随机选择一个持币者来产生下一个区块,该算法中账户余额决定了节点被选中的概率。

简单地说,就是一个根据用户持有代币的数量和时间(币龄),发放利息的一个制度。类似于股票或者银行存款,如果用户想要获得更多的代币,那么就要打开客户端,让它保持在线,这样就能通过“利息”来获益,同时保证网络的安全。

PoS机制的用例:未来币。

③PoW+PoS:PoW发行新币,PoS维护网络安全

PoW+PoS结合的机制是指,采用工作量证明机制PoW发行新币,采用权益证明机制PoS维护网络安全。

这种共识机制最早是于2012年8月,由一个化名Sunny King的极客推出Peercoin时采用。

该机制中,区块被分为两种形式:PoW区块及PoS区块。在这种新型区块链体系中,区块持有人可以消耗他的币龄获得利息,同时获得为网络产生一个区块和用PoS造币的优先权。

在PoW+PoS机制下,只要是持币人,不论持币的数量是多少,都可以挖到数据块,而不用采用任何的矿池导致算力集中;同时,由于多采用币龄生成区块,而不是算力,所以降低了资源消耗,解决了单纯PoW机制在维护网络安全方面的先天不足。

PoW+PoS机制的用例:Peercoin。

④DPoS:授权股权证明机制

PoS面临的挑战是如何通过及时而高效的方法达成共识。为了达到这个目标,每个持币节点可以将其投票权授予一名代表。获票数最多的前100位代表,按既定时间表轮流产生区块。每名代表分配到一个时间段来生产区块,所有的代表将收到等同于一个平均水平的区块所含交易费1%作为报酬。如果一个平均水平的区块含有100股作为交易费,则1名代表将获得1股作为报酬,这样可以大大提高共识效率,这就是DPoS(Delegated Proof of Stake)的核心思想。

这100位代表可以理解为100个“矿池”,这100个“矿池”之间的权利是完全相等的。如果这些代表提供的算力不稳定、计算机宕机、或者试图利用手中的权利作恶,那么,那些手里握着代币的用户可以通过投票的方式随时更换这些代表,后备代表则可以代替他们。

DPoS机制的用例:比特股。

⑤其他分布式一致性算法

除了以上详列的PoW、PoS、PoW+PoS、DPoS等共识机制外,还有一些分布式一致性算法,比如:PBFT、Paxos和Raft等。

这类分布式一致性算法常用于联盟链、私有链。而这些分布式一致性算法又分为解决拜占庭将军问题的拜占庭容错算法(PBFT)和非解决拜占庭问题的分布式一致性算法(Paxos、Raft)。

图表8:共识机制汇总

这些共识机制各有优劣。例如PoW共识机制在安全性和公平性上比较有优势,也依靠其先发优势已经形成成熟的挖矿产业链,但也因为其对能源的消耗而饱受诟病。而PoS和DPoS等则更为环保和高效,但在安全性和公平性方面比不上PoW机制。

在设计了共识机制的区块链网络中,每个节点只有保持诚实记账,才能获得网络中的奖励。本质上,共识的达成,是基于人类的趋利避害的本能。一般而言,各种共识机制并没有严格意义上的优劣之分,只是分别适用于不同的环境。

相关文章

网友评论

    本文标题:1.3区块链核心技术

    本文链接:https://www.haomeiwen.com/subject/rayoaxtx.html