区块链技术是由多方共同记录和维护的一个分布式数据库,通过哈希索引形成一种链状结构,数据的记录和定义 维护通过密码学技术来保护其完整性,使得任何一方难以篡改、抵赖、造假。
关键技术:分布式存储 加密算法 点对点传输 共识机制
特性:分布式、可共享、隐私性、防篡改、安全性、智能化
工信部区块链参考标准:区块链是一种在对等网络环境下,通过透明和可信规则,构建不可伪造、不可篡改和可追溯的块链式数据结构,实现和管理事务处理的模式。
关键技术
点对点通信
p2p
分布式存储
每个节点都有账本的副本
加密算法
公钥与私钥
-
私钥的本质
一串足够随机的随机数,即密码
私钥的本质就是一串数字,这串数字非常长,如果用16进制表示的话,有64位。
私钥的总数是10的77次方
宇宙中原子的总数是10的80次方
所以我们如果完全随机的生成私钥,那么完全不可能和别人的私钥一样 -
从私钥到公钥
现在我们有了一串随机的数字,那么基于这个数字,我们就能生成一个对应的数字,这个数字就是公钥,即私钥对应的一串数字
私钥可以推导出公钥,反之,公钥不能推导出私钥
我们用私钥对任意内容进行了签名。只要我们将公钥公开,那么任何人都可以通过拿着这个公钥,验证出这个签名是否是由掌握私钥的人签署的。 -
从公钥到地址
公钥太长了,所以在实际的系统中,我们通过哈希算法对公钥进行了缩写,得到和公钥等价的地址,来作为实际收款的账户也即,公钥进行转化后的一串数字
-
加密
公钥负责加密,私钥负责解密
-
签名
私钥负责签名,公钥负责验证;数字签名,只负责保证数据没有被篡改,而不负责加密数据。是数据加密的逆过程
-
私钥文件类型:PEM(.pem)、PKCS12(.p12)
哈希函数
哈希值的特点:定长、单向、原文改动即哈希变化
作用:哈希、索引
SHA256
交易哈希
非对称加密
RSA
既可以用于签名,又可以用于加密
与DSA相比,RSA的签名验证速度更快,但生成速度较慢
DSA(数字签名算法)
与RSA相比,DSA的签名生成速度更快,但验证速度较慢
ECDSA(椭圆曲线数字签名算法)
是DSA(数字签名算法)的椭圆曲线实现。椭圆曲线密码术能够以较小的密钥提供与RSA相对相同的安全级别。它还具有DSA对不良RNG敏感的缺点。
EdDSA(爱德华兹曲线数字签名算法)
是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。签名创建在EdDSA中是确定性的,其安全性是基于某些离散对数问题的难处理性,因此它比DSA和ECDSA更安全,后者要求每个签名都具有高质量的随机性。
Ed25519
是EdDSA签名方案,但使用SHA-512 / 256和Curve25519;它是一条安全的椭圆形曲线,比DSA,ECDSA和EdDSA 提供更好的安全性,并且具有更好的性能(人为注意)。
国密算法
SM2
SM3
区块结构
每个节点都包含了账本的副本,即所有区块的副本
区块包含
-
索引
-
时间戳
-
事务列表
-
校验
-
前一个块的散列值
区块头
- PrevHash:6b86b273ff34fce…
- Hash:d4735e3a265e16e…
块高
- 链式结构
- 区块数据结构
- 区块链类的实现
- 新区块函数的实现
区块中,previousblockhash和merkleroot是两个最重要的字段
前者是一个哈希指针,它其实是前一个 Block 的哈希,通过 previousblockhash
我们能递归地找到全部的 Block,也就是整条主链,后者是一个 Merkle 树的根,Merkle 树中包含整个 Block 中的全部交易,通过保存 merkleroot
,我们可以保证当前 Block 中任意交易都不会被修改
哈希指针
总结:保证了区块之间的连接
Block 结构体中的哈希指针在区块链中有两个作用,它不仅能够连接不同的区块,还能够对 Block 进行验证,保证 Block 中的数据不会被其他恶意节点篡改。
Merkle树
总结:保证了一个区块中所有交易的连接
另一个字段 merkleroot
其实就是一个 Merkle 树 的根节点,它其实是一种使用哈希指针连接的数据结构;虽然 Merkle 树有叶节点和非叶节点,但是它只有叶节点会存储数据,所有的非叶结点都是用于验证数据完整性的哈希。
每一个 Block 中的全部交易都是存储在这个 Merkle 树中并将 merkleroot
保存在 Block 的结构体中,保证当前 Block 中任意交易的篡改都能被立刻发现。
小结
prev_hash
和 merkleroot
分别通过『指针』的方式保证所有的 Block 和交易都是连接起来的,最终保证 Block 和交易不会被恶意节点或攻击者篡改,几乎全部的区块链项目都会使用类似方式连接不同的 Block 和交易,这可以说是区块链项目的基础设施和标配了。
节点共识算法
提出背景
无论是 Bitcoin、Ethereum 还是 EOS,作为一个分布式网络,首先需要解决分布式一致性的问题,也就是所有的节点如何对同一个提案或者值达成共识,这一问题在一个所有节点都是可以被信任的分布式集群中都是一个比较难以解决的问题,更不用说在复杂的区块链网络中了。
共识算法,即各个节点达成一致的策略和方法,也即用来保证分布式系统一致性的方法。
分布式系统一致性所面临的难题
- 节点失效
- 节点之间网络通信收到干扰甚至阻断
- 分布式系统运行速度之间的差异
拜占庭将军问题
该问题讨论的是在少数节点有可能作恶(消息可能被伪造)的场景下,如何达成共识问题。拜占庭将军问题是分布式领域的容错问题;是分布式领域中最复杂、最严格的容错模型
该问题描述的场景是,一组将军每人都会发出一个指令,但最终遵循的指令由他们共同投票选举出来。指令状态有四种:未知、进攻、撤退、消息不可靠。由于将军的队伍中出了一个叛徒或者信息在传递的过程中被拦截,会导致一部分将军会选择进攻,剩下的一部分会选择撤退,它们都认为自己的选择是大多数人的选择,这时就出现了严重的不一致问题。
一般地,把出现故障(Crash 或 Fail-stop,即不响应)但不会伪造信息的情况称为“
非拜占庭错误(Non-Byzantine Fault)
”或“故障错误(Crash Fault)
”;伪造信息恶意响应的情况称为“拜占庭错误”(Byzantine Fault)
,对应节点为拜占庭节点
。显然,后者场景中因为存在“捣乱者”更难达成共识。根据是否允许拜占庭容错的情况,共识算法可以分为CFT和BFT(拜占庭容错)
注:
非拜占庭场景的典型例子是通过报数来统计人数,即便偶有冲突(如两人同时报一个数)也能很快解决;
拜占庭场景的一个常见例子是“杀人游戏”,当参与者众多时很难快速达成共识。
非拜占庭容错:(特点:性能比较好,处理较快,容忍不超过一半的故障节点)
- Paxos(1990 年)
- Raft(2014 年)
拜占庭容错:(特点:性能比较差,处理速度慢,容忍不超过1/3的故障节点)
- PBFT(Practical Byzantine Fault Tolerance,1999 年)
- POW(工作量证明,1997年)
- Algorand(基于PBFT改进,2017年)
问题的解决:节点总数为 N,故障节点数为 F,则当 N >= 3F + 1 时,问题才能有解,由 BFT 算法进行保证
FLP (不可能定理)
它是分布式系统领域最重要的定理之一,它给出了一个非常重要的结论:在网络可靠并且存在节点失效的异步模型系统中,不存在一个可以解决一致性问题的确定性算法。FLP 不可能原理告诉我们,不要浪费时间去试图为异步分布式系统设计面向任意场景的共识算法。也就是说,异步系统完全没有办法保证能在有限时间内达成一致。
PaXOS
是一类能够解决分布式一致性问题的协议,它能够让分布式网络中的节点在出现错误时仍然保持一致;Paxos 可以在没有恶意节点的前提下保证系统中节点的一致性,也是第一个被证明完备的共识算法,目前的完备的共识算法包括 Raft 本质上都是 Paxos 的变种。
POW(proof of work,工作量证明)机制
工作量证明的关键特点就是,分布式系统中的请求服务的节点必须解决一个一般难度但是可行(feasible)的问题,但是验证问题答案的过程对于服务提供者来说却非常容易,也就是一个不容易解答但是容易验证的问题。
这种问题通常需要消耗一定的 CPU 时间来计算某个问题的答案,目前最大的区块链网络 - 比特币(Bitcoin)就使用了工作量证明的分布式一致性算法,网络中的所有节点计算通过以下的谜题来获得当前区块的记账权。
由于工作量证明需要消耗大量的算力,同时比特币大约 10min 才会产生一个区块,区块的大小也只有 1MB,仅仅能够包含 3、4000 笔交易,平均下来每秒只能够处理 5~7(个位数)笔交易,所以比特币网络的拥堵状况非常严重。
POS(proof of stack,权益证明)机制
引入奖励和惩罚机制,与工作量证明相比,权益证明不需要消耗大量的电力就能够保证区块链网络的安全性,同时也不需要在每个区块中创建新的货币来激励矿工参与当前网络的运行,这也就在一定程度上缩短了达成共识所需要的时间,基于权益证明的 Ethereum 每秒大概能处理 30 笔交易左右。
DPOS(Delegated Proof-of-Stake,委托权益证明)机制
能够让每一个人选出可以代表自己利益的人参与到记账权的争夺中,这样多个小股东就能够通过投票选出自己的代理人,保障自己的利益。整个网络中选举出的多个节点能够在 1s 中之内对 99.9% 的交易进行确认,使用委托权益证明的 EOS 能够每秒处理几十万笔交易,同时也能够比较监管的干预。
PBFT机制
PBFT(Practical Byzantine Fault Tolerance)共识算法可以在少数节点作恶(如伪造消息)场景中达成共识,它采用签名、签名验证、哈希等密码学算法确保消息传递过程中的防篡改性、防伪造性、不可抵赖性,并优化了前人工作,将拜占庭容错算法复杂度从指数级降低到多项式级别,在一个由(3f+1)个节点构成的系统中,只要有不少于(2f+1)个非恶意节点正常工作,该系统就能达成一致性,如:7个节点的系统中允许2个节点出现拜占庭错误。
容错节点数:f
需要节点数(即为了保障整个系统正常运转所需要的正常节点数):2f+1
系统总结点数:3f+1
节点类型
- 共识节点
- 观察节点
节点ID
节点索引
视图
PBFT共识算法使用视图view记录每个节点的共识状态
Raft机制
Raft(Replication and Fault Tolerant)是一个允许网络分区(Partition Tolerant)的一致性协议,它保证了在一个由N个节点构成的系统中有(N+1)/2(向上取整)个节点正常工作的情况下的系统的一致性,比如在一个5个节点的系统中允许2个节点出现非拜占庭错误,如节点宕机、网络分区、消息延时。Raft相比于Paxos更容易理解,且被证明可以提供与Paxos相同的容错性以及性能,其详细介绍可见官网及动态演示。
节点类型
- Leader:主要负责与外界交互,由Follower节点选举而来,在每一次共识过程中有且仅有一个Leader节点,由Leader全权负责从交易池中取出交易、打包交易组成区块并将区块上链;
- Follower:以Leader节点为准进行同步,并在Leader节点失效时举行选举以选出新的Leader节点;
- Candidate:Follower节点在竞选Leader时拥有的临时身份。
rPBFT机制
POW类算法的缺陷
POW算法因如下特点,不适用于交易吞吐量大、交易时延要求低的联盟链场景:
- 性能低:10分钟出一个区块,交易确认时延一个小时,耗电多
- 无最终一致性保证
- 吞吐量低
rPBFT共识算法的提出
- FISCO BCOS v2.3.0版本提出
- 旨在保留BFT类共识算法高性能、高吞吐量、高一致性、安全性的同时,尽量减少节点规模对共识算法的影响
rPBFT节点类型
-
共识委员:执行PBFT共识流程的节点,有
轮流出块权限
-
验证节点:不执行共识流程,验证共识节点是否合法、区块验证,经过若干轮共识后,
会切换为共识节点
核心思想
epoch_block_num轮共识后,将共识委员节点替换为验证节点;将部分验证节点替换成共识委员节点
2个关键参数
-
epoch_sealer_num
:每轮共识过程中参与共识的节点数目,可通过控制台发交易方式动态配置该参数 -
epoch_block_num
:共识节点替换周期,为防止选取的共识节点联合作恶,rPBFT每出epoch_block_num个区块,会替换一个共识节点,可通过控制台发交易的方式动态配置该参数
算法流程
- 确定各共识节点编号IDX
- 链初始化
- 共识委员节点运行PBFT共识算法
- 动态替换共识委员列表:rPBFT算法每出epoch_block_num个区块后,会从共识委员列表中剔除一个节点作为验证节点,并加入一个验证节点到共识委员列表中
- 节点重启
算法分析
- 算法复杂度与节点数量无关,性能衰减远小于PBFT
- 一致性、可用性要求:至少2/3节点正常工作
- 安全性:正在规划中,未来的打算引进VRF算法,随机、私密的替换共识委员,增强共识算法的安全性
CA
数字证书认证机构(英语:Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
区块链中的交易与共识
区块链账户的组成部分:
私钥、公钥与地址
交易包含:
- TxHash(交易哈希):发起交易后生成的,如,c960578d5c7364c…
- From:如,0x496dC0Ac7f6a5c15a63c862e7532Ffe59122d89F
- To:如,0x6D3720a0937F684c6B88Aa474264F905d07Fec82
- Value:如,100
交易步骤:
-
交易签名:即From用其私钥签名后生成交易哈希
-
交易广播
-
打包区块(即多笔交易共同打包为区块)
-
广播区块,将打包后的区块广播给其它节点
-
共识,所有节点对该区块进行共识
比特币
是什么?
只具备发币、记账功能的世界银行
世界上第一个被证明成功的区块链APP
目标
争夺记账权、确保账本的唯一性
比特币私钥的形式
- WIF
- Private Key WIF Compressed
区块链基础架构模型
文章来源:https://www.toymoban.com/news/detail-786446.html
应用场景
文章来源地址https://www.toymoban.com/news/detail-786446.html
到了这里,关于区块链入门二:概念篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!