认识区块链

认识区块链

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。


  • 分布式数据库的技术特性

  • 密码学特性

  • 共识机制

  • 智能合约

1 区块链上的分布式存储技术特性

传统的关系型数据库必然满足ACID原则,这个原则本质上对事务而言的。事务是一个不能分割的操作单元,所以必须具备以下四个特性:

  • 原子性(Atomicity):在事务中,所有操作要么全部执行,要么全部拒绝,没有任何中间状态。在区块链中,数据存储在区块里,一个区块链中的数据要么全部进入要么全部被丢弃。(满足)
  • 一致性(Consistency):数据库的完整性约束不会被任何事务破坏。在区块链中,区块加入区块链之后原有的区块链保持不变(满足)
  • 隔离性(Isolation):多个事务完全隔离开来,一个事务的执行不会被其他事务所影响。在区块链中,所有节点可以同时生成区块,但只有一个区块可以加入区块链。(不满足)
  • 持久性(Durability):一个事务完成之后,该事务对数据库的变更会被永久地存在数据库中。在区块链中,一旦区块加入区块链中,就会永久保存并复制到其他节点(满足)

区块链可以满足上述部分特性。而在当前移动互联网时代,对数据的存储量、数据读写都提出了更高的要求,提出并创建了分布式数据库,分布式数据库有这样一些特性,称为BASE:

  • 基本上可用(basically available):主要的需求是可用,即使出现划分的情况下,应该允许更新,哪怕以牺牲一致性为代价;
  • 软状态(soft state):网络划分可能导致数据库每个副本都有一定程度不同的状态,从而导致整体状态不明;
  • 最终一致性(eventually consistent):当解决完划分后,要求最终所有副本形成一致。

区块链的节点是分布在全世界各个地方的,在一定的时间内,不同节点的区块链存在不一致的情况,但是最终都是一致的。通过对比发现,区块链符合传统的关系数据库和互联网时代的分布式数据库特性。


2 区块链的密码学技术特性

2.1 哈希算法

哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值成为哈希值。(想象一个列表里存有一万首歌曲,想知道某一首是否在其中,最常见的方法是一个个对比,但是太耗时。哈希算法存在的意义就是将这一万首歌曲名做一个变换,映射为某个值,再将想知道的那一首歌曲名做同样的映射,也得到一个值,如果这个值能对应上,该歌曲就很有可能存在于其中,减少了相当一部分工作量)。

如果一段明文更改,哪怕只更改一个字母,随后的哈希值都会发生变化,要找到哈希值相同而输入值不同的字符串,在计算上是不可能的,所以数据的哈希值可以用来检验数据的完整性。

数据存储在区块链中,每个区块都有一个区块头,区块头存储区块中所有数据经过哈希算法得到的一个哈希值,同时每个区块中存储前面一个区块的哈希值,这样就形成了区块链。篡改者需要以被篡改的节点作为起点,重新计算后面所有的区块,但是要让所有节点认可这个篡改,基本是上不可能的事,即使成功成本也会远大于收益。

区块链常用的哈希算法是SHA256和RIPEMD160。SHA256是美国国家安全局设计一系列密码散列函数之一。这些算法主要适用于数字签名标准。SHA256算法在抗碰撞性和效率之间做了一个平衡,在许多区块链系统中得以运用。

2.2 Merkle数(默克尔树)

通过前面我们知道数据是存储在区块中的,一个区块存储了若干数据,区块链是如何保证这些数据不被篡改的?。

在区块链中,整个可以看成一个账本,“块”可以看作是这账本中的页,每页都记录了若干条交易,把一页一页的帐页按照时间顺序装订起来,就形成了一个完整的账本——“区块链”。“块”即是每笔交易的容器,每笔交易都要放在容器里,然后把整个容器用密码学算法进行连接,形成一个完整的链。

这种数据的组织方式最大的好处就是数据易于保证完整,从密码学角度看安全性较高,而代价就是——数据会一直不停的增长。

对于某些企业级应用的区块链系统来说,数据增长会非常快,区块可能会非常大,生成区块的速度也会非常快。

Merkle Tree同时解决了这两个问题。Merkle是数据结构树种的一种,也称Merkle Hash Tree。组成该树的所有节点都是哈希值。

在比特币区块链系统中,区块的结构如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gby3DwUw-1618887430665)(C:\Users\yujy\AppData\Roaming\Typora\typora-user-images\image-20210419094240553.png)]

每个区块中的Hash1就是本区块中所有交易的哈希值。但是这个哈希值***不是把所有交易连成一个长字符串后计算HASH值***,而是采用了默克尔树算法来计算这个HASH值,我们称之为Merkle根。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8H4TcNUI-1618887430666)(C:\Users\yujy\AppData\Roaming\Typora\typora-user-images\image-20210419094551608.png)]

每笔交易都计算一个Hash值,然后两两连接再次计算Hash,一直到最顶层的Merkle根。

Merkle Tree 算法最大的好处就是,每个交易都可以单独直接删除,只保留这个交易的Hash值即可,这样对于整个区块来说,并没有改变其密码学安全性和完整性,但是数据量可以大大减小,同时也确保了每一笔交易都不可伪造。

2.3 非对称加密算法

非对称加密算法是指为了满足安全性需求和所有权验证需求而集成到区块链中的加密技术。非对称加密在加密和解密过程中,使用两个非对称的密码,分别称为公钥和私钥。非对称密钥具有两个特点:

  • 用其中一个密钥(公钥或者私钥)加密信息后,只有另外一个对应的密钥才能解开;
  • 公钥可向其他人公开,私钥则保密,其他人无法通过该公钥推算出相应的私钥。

非对称加密主要划分为三类方式:

  • 大整数分解问题类
  • 离散对数问题类
  • 椭圆曲线类

比特币系统采用平面椭圆曲线来计算成组非对称特殊值。

非对称加密技术在区块链上的应用场景主要包括信息加密、数字签名和登录认证等。其中信息加密场景主要是由信息发送者(A)使用接收者(B)的公钥对信息加密后再发送给B,B利用自己的私钥对信息进行解密。数字签名场景则是由发送者A使用自己的私钥加密信息后发送给B,再由B使用A的公钥对信息进行解密,从而可确保是A发送的。登录认证场景则是由客户端使用私钥加密登录信息后发送给服务器,后者接收后采用该客户端的公钥解密并认证登录信息。

存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问,从而保证了数据的安全和个人的隐私。区块链系统每个用户都用一对密钥,用户通过自己的私钥对交易进行签名,同时可以利用签名用户的公钥对签名进行验证。

利用椭圆曲线的签名和验证算法,可以保证账号的唯一性和不可冒名顶替性,同时也保证了用户的不可抵赖性。通过这些密码学技术的应用可以使得区块链技术在没有中心服务器的情况下做好数据的不可逆和不可篡改。


3 区块链中的共识机制

区块链中的一个核心概念是 去中心化,在区块链中没有和传统数据库一样的中心数据库,每个节点都是对等的,需要一套算法和机制来保证所有对等节点之间可以有效协作。这套算法和节点称为共识机制。共识机制的存在可以有效保证各个节点之间按照既定的原则共同维护账本。共识机制本质上是区块链系统中实现不同节点建立信任、获取权益的数学算法。在区块链技术出现之前就已经存在了,最早出现在分布式系统中。目前区块链系统中最常用的共识算法有PWO(工作量证明)、POS(股权证明机制)、DPOS(授权股权证明)、PBFT(拜占庭共识算法)。

3.1 POW——工作量证明机制

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

工作量证明系统的主要特征是 客户端 需要做一定难度的工作得出一个结果,验证方 却很容易通过结果来检查客户端是不是做了相应的工作,这种方案是不对称的:工作对于请求方是适中的,对于验证方是易于验证的。举个例子:

给定一个基本的字符串 “ study blockchain! ”,给出的工作量要求是,在字符串后面添加一个整数值,对变更后的字符串进行SHA256哈希运算,如果得到哈希结果(以十六进制表示)是以“0000”开头的,则验证通过,为了达到这个工作量证明的目标。我们需要不停地递增这个整数的值,对得到的新字符串进行SHA256哈希运算。按照这个规则,需要经过79505(实际上写了个程序来跑,跑了好久没出结果)次计算才能找到前四位刚好为0的哈希散列。

上述就是工作量证明的雏形,实际上增加很多很多参数来调节计算难度。比特币系统就是基于POW算法,网络中任何一个节点如果像生成一个新的区块并写入区块链中,必须解出比特币网络中给出的工作量证明的谜题。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题所需要的计算量。

3.2 POS——股权证明机制

比特币系统面临三个问题:

  • 区块产量每4年会减半,未来随着比特币网络的产量降低,挖矿的动力会不断减少,矿工越来越少,整个比特币网络有可能会逐步瘫痪,因为大家都减少了运行比特币客户端的时间,越来越难找到一个P2P节点去连接和同步数据网络
  • 当矿工人数下降后,比特币网络很有可能被一些高算力的人、团队挟持,进行51%的算力攻击
  • 比特币的货币总量表面上看起来是固定的,实际上是一个通货紧缩的体系,每年都会有人因为忘记钱包密钥而永远无法拿回钱包里的钱,意味着有一个比特币无法重见天日,造成了是实际上的通货紧缩。

股权证明机制由此而生,解决了以上问题,股权证明机制的基本概念就是产生区块的难度应该与在网络中所占股份的股权成比例。简单来说,就是根据持有币的量与时间给发利息的一个制度。在POS下,有一个币龄的概念,每个币每天产生一个币龄。比如持有100个币,总共持有了30天,此时币龄为100*30=3000。此刻若发现了一个POS区块,币龄被清空,将会从区块中获得3000 * 5% / 365=0.41个币的利息。

此处5%的由来是,每清空365币龄,将会从区块中获得0.05个币,相当于年利率5%,当然这只是举例,不代表真实利息。

针对上面的三个问题:

  • 在POS体系中只有打开钱包客户端程序才能发现POS区块,才会获得利息,使得不想挖矿的人也会打开客户端,增加了网络健壮性
  • 一部分货币不是挖矿产生的而是利息产生,这就要求攻击者还需要持有超过全球51%的货币量,大大提高了攻击难度
  • 一部分币由利息产生,因此整个体系中会源源不断的产生新的货币。

3.3 DPOS——委托权益证明

todo

3.4 PBFT——拜占庭共识算法

todo

3.5 Casper——投注共识

todo


4 区块链中的智能合约

智能合约和区块链原本是两个独立的技术,在区块链诞生之初没有引入智能合约这个概念。随着区块链技术的发展,人们发现区块链在价值传递的过程中需要有一套规则来描述价值传递的方式,这套规则应该让机器来识别和执行而不是人,因此智能合约走进了视线之内。

智能合约的理念可以追溯到1995年,几乎与互联网同时出现,相关技术迟迟无法落地,没有产品出现,产生这种现象的原因是缺乏能够支持可编程合约的数字货币系统和技术。区块链的出现解决了该问题,不仅支持可编程合约、而且具有去中心化、不可篡改、过程透明可追踪等特性,这些特性天然适用于智能合约。

在区块链2.0 引入智能合约后,区块链真正地脱离了数字货币的枷锁,成为了一个独立的技术,可以应用在更加广泛的场景中。

种现象的原因是缺乏能够支持可编程合约的数字货币系统和技术。区块链的出现解决了该问题,不仅支持可编程合约、而且具有去中心化、不可篡改、过程透明可追踪等特性,这些特性天然适用于智能合约。

在区块链2.0 引入智能合约后,区块链真正地脱离了数字货币的枷锁,成为了一个独立的技术,可以应用在更加广泛的场景中。

智能合约本质上就是一段用某种语言编写的程序,运行在区块中,结合区块链所使用的密码学特性,使得智能合约天然具有防篡改和防伪造的特性,其产生的结果也存储在区块之中,这样从源头、执行过程到结果全部在区块链中执行,保证了智能合约的发布、执行、结果记录的真实性和唯一性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值