山东大学软件学院 区块链技术

Posted 平原上的维克多

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了山东大学软件学院 区块链技术相关的知识,希望对你有一定的参考价值。

期末复习更新中…

1. 定义:

区块链是去中心化的分布式记账系统。

2. 基本概念:

交易:一次对账本的操作,会导致账本状态的一次改变。
区块:记录一段时间内发生的所有交易和结果的数据结构,可视作对当前账本状态的一次共识。
链:区块有序串联而成的数据结构,是整个账本状态改变的日志记录。

3. 特点:

1、不可篡改性:数据保存在每个节点中,不可被销毁或修改 。
2、分布式容错性:通过分布式系统保证区块链能够容忍部分节点的异常状态。
3、隐私保护性:密码学的应用保证即使数据泄露也无法解析。

就上述三大特点而言,前两点与区块链作为分布式系统的特质有关,最后一点则源自密码学的应用。而作为记账系统,保证区块链的不可篡改性尤为重要,具体来说,区块链技术中按照私有链、联盟链及公有链的划分,分别提出了有效的共识算法(详见下文),从而保证数据结构的改变只有在全网达成共识的前提下才能完成,而无法由个别或部分恶意节点修改。分区容错性作为分布式系统本身的三大特性(CAP)之一不再赘述,隐私保护性通过公钥密码等算法保证,同样略过。

4. 分类(根据使用范围及集群中故障节点及作恶节点进行划分):

  1. 私有链:只供内部少数人使用,不考虑集群中存在作恶节点,只考虑故障节点。
  2. 联盟链:由若干组织共同维护,考虑集群中存在作恶节点和故障节点。节点需要通过验证才能加入和退出。
  3. 公有链:任何人都可以参与使用和维护,考虑节点中存在作恶节点和故障节点。节点的加入和退出不需要验证。

5. 运行机制(以比特币为例):

  1. 客户端进行交易并广播交易记录。
  2. 节点验证交易记录并打包组成候选区块。
  3. 计算nonce串放进区块使得候选区块的哈希结果满足特定条件。
  4. 节点完成随机数串的计算并广播候选区块。
  5. 其他节点验证候选区块并将其加入自己的区块链。
  6. 大部分节点都将区块添加到自己维护的区块链上后,该区块被网络接受,交易被确认。

要理解区块链技术,首先要明白其作为分布式系统的本质,因此不得不理解其如何克服CAP问题中一致性与可获得性的矛盾(CAP: consistent, available, and partition tolerant):
1、一致性:考虑到网络中恶意节点的存在,通过共识算法保证数据的一致性。
2、可获得性:整个网络始终处在在趋于整体一致的过程中(指的是网络中可能存在局部节点中的区块链不一致的问题,但是终将按照最长链原则形成一致),我们可能获得局部节点中不一致的信息(分叉后的链中的信息),但最终将获得正确的信息。
3、分区容错性:通过数据的冗余存储(每个节点存储完整区块链)实现

6. 核心:作为一种复杂的动态的分布式网络,我们需要关注区块链如何实现共识(也即上文所述的一致性),下文分别按照联盟链、私有链、公有链的顺序讲解。

6.1 私有链的共识算法:RAFT

6.2 联盟链与公有链中共识算法的理论基础:拜占庭将军问题

6.2.1 基于口头消息

拜占庭将军问题——口头消息

6.2.2 基于签名消息

签名应满足:

  1. 不可伪造
  2. 一旦被篡改即可发现
  3. 可验证

拜占庭将军问题——书面协议

6.3 联盟链的共识算法:实用拜占庭容错算法(PBFT, Practical Byzantine Fault Tolerance)

6.1.2 概念准备

6.1.3 共识形成流程

6.1.4 视图变更流程

6.4 公有链的共识算法:工作量证明(PoW, Proof of work)与权益证明(PoS, Proof of stake)

首先要认识到,和PBFT算法一样,公有链上共识算法的理论基础也是拜占庭将军问题,差别在于前者考虑的是口头消息(Oral Message),后者考虑的是签名消息(Signed Message)

RAFT与PBFT(美图区块链团队)

POS:通过计算困难而无意义的数学难题分配记账的权利并形成共识。

下面是学习过程中产生的一些问题,相信每个初学者都会遇到,因此稍作记录:

Q1: 区块链中各个节点保存了哪些信息,存在哪些动作(操作)?
每个用户都保存完整的区块链。
每个区块由区块头和区块体构成,区块头中包含了上一个区块的哈希值和本区块的哈希值以形成链。
作为客户端,节点可以进行交易并广播交易记录。
作为一般节点,可以接收交易记录并打包成候选区块然后计算nonce值,完成计算后将其加入区块链并广播,或者接收其他节点的候选区块广播并在验证后加入区块链。

Q2: 新加入的区块的区块头中的哈希值是如何计算出来的?区块体中包含哪些记账信息?
区块体中的记账记录来自客户端的交易记录,其实质内容会随着区块链的应用场景而发生变化,可以抽象地概括为对账本[区块链中数据]的操作。
区块头中包括preHash, 版本号,默克尔树的根哈希值,以及作为可变参数的随机数。
使用SHA256算法通过变化的随机数得到符合规定的哈希值后即认定完成计算

Q3: 什么是记账?
对账本(区块链中维护的特定数据)的操作,将导致账本状态的改变。

Q4: 如何加入新节点?
密码学+最长链优先原则

Q5:(存疑)任意两个节点某个时刻收到的交易记录很大概率是不同的,于是它们对不同的交易记录进行打包并计算nonce值,这样来看,节点收到的候选区块中的交易记录亦有可能与其正在计算的候选区块中的交易记录存在差异,那么节点如何验证这些交易记录是正确的?
猜测:由于计算随机数串所需的时间足够长,因此计算出的候选区块中的交易记录已经通过P2P网络传送至其他节点。

Q6: 同时假设集群中存在恶意节点,为何适用于联盟链与公有链的共识算法不同?
公有链中需要限制消息的数量(通过特定机制,如PoW)

为什么区块链无法篡改?
双花问题和51%攻击

以上是关于山东大学软件学院 区块链技术的主要内容,如果未能解决你的问题,请参考以下文章

山东大学 软件学院 区块链技术

区块链之家 | 《区块链应用落地典型案例解读会》加强产学研合作

2018北京理工大学区块链技术讲座

2018北京理工大学区块链技术讲座

哈尔滨工程大学计算机学院2022年区块链技术课程-比特币的双花问题

区块链的技术发展及应用前景