导语:本文主要介绍了区块链的基本概念,对基本术语进行解析,有利于初学者更好地了解什么是区块链,区块链核心的技术有哪些,为后面深入学习打下理论基础。
区块链的三个基本构成
交易:一次账本的操作,导致账本状态的一次改变
区块:一段时间内的所有交易和状态结果,共识机制生成新的区块
链:区块按顺序串链,是整个账本的日志记录
区块链如何工作?(以比特币为例)
比特币客户端发起一笔交易,广播到比特币网络中等待确认
网络中所有节点将一段时间内收到的所有等待确认的记录打包,包含前一个区块头部的hash值,组成一个候选的区块。
通过找到一个合适的随机值放到候选区块中,是的候选区块的hash结果满足一定的条件。找到这个合适hash值的过程,称之为“挖矿”;而寻找这个合适hash值的人或组织机构,称之为“矿工”;由于这一个过程需要花费大量的算力,自热而然就出现了“矿池”。而这种基于算力寻找合适随机串的共识机制,被称之为工作量证明PoW(Proof of Work)。
候选区块在网络中广播,其他节点收到候选区块,进行验证,符合约定条件的区块将会被添加到自己维护的区块链上。
当大部分节点都将候选区块添加到自己的维护的区块链上,该区块就会被网络所接受,区块中的所有交易就会得到确认。
区块链的分类
共有链:任何人都可以参与和维护,信息完全公开,例如比特币
私有链:只有授权的部分人可以使用,信息不公开
联盟链:介于两者之间,有若干组织一起合作维护,带有权限的访问。
目前,私有链和联盟链在现实生活中的商户场景中得到更多的应用和落地。
分布式核心问题
一致性问题:一致性并不代表结果正确与否,而是系统对外呈现的状态一致与否。分为:强一致性和弱一致性(顺序一致性;线性一致性)。
共识算法:分布式系统中多个节点之间,批次对某个状态达成一致结果的过程。
常见的共识算法:
(1)CFT:Crash Fault Tolerance
(2)BFT:Byzantine Fault Tolerance
FLP不可能原理:在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法。(不要浪费时间,去为异步分布式系统设计在任意场景下都能实现共识的算法)
CAP原理
(1)一致性(consistency):任务操作都是原子的。
(2)可用性(availability):在有限的时间内,任何失败的节点都能应答请求。
(3)分区容忍性(partition):网络可能发生分区,即网络节点间的通信不可保障
简单的理解:在网络可能出现分区的情况下,是无法同时保证一致性和可用性的。要么牺牲可用性,要么牺牲一致性。
ACID原则
(1)原子性(atomicity):每次操作都是原子的,要么成功,要么不执行
(2)一致性(consistency):最终状态是一致的,没有中间态
(3)隔离性(isolation):各个操作之间是互不影响的
(4)持久性(durability):状态的改变是持久的,不可改变
Paxos 算法与 Raft算法(系统中存在故障,但不存在恶意节点)
(1)paxos算法
提案者(proposer):提出一个提案,等待大家批准为结案
接受者(acceptor):负责对提案进行投票,接受提案
学习者(learner):获取批准结果,并可以帮忙传播,不参与投票过程
(2)raft算法
领导者(leader):选举
候选领导者(candidate):
跟随者(fllower):
拜占庭问题与算法(系统中存在故障,且存在恶意节点)
N >= 3F+1,其中N为节点数,叛变将军数为F
可靠性指标
(1)服务的可用性
服务承诺SLA
服务指标SLI
服务目标SLO
(2)两个核心时间
MTBF: 平均故障隔间时间,反映故障发生的频率
MTTR: 平均修复时间,反映故障发生后恢复的时间
密码学与安全技术
hash算法:能将任意长度的明文,映射为固定长度的二进制串
[x]正向快速
[x]逆向困难
[x]输入敏感
[x]冲突避免:hash碰撞
常见算法:MD5和SHA系列算法,目前MD5和SHA1算法已经被破解,一般推荐至少用SHA-256或更安全的算法
hash攻击与保护
(1)hash算法并不是一种加密算法,不能用于对信息的保护。
(2)主要的攻击包括字典攻击和彩虹表攻击(只保存一条has链的首尾值,相对字典攻击可用节省存储空间)
(3)防范措施:加盐,hash结果和盐分别存放在不同的地方,只要不是两者同时泄漏,攻击者就很难破解
数字摘要
数字摘要是对数字内容进行hash运算,获取唯一的摘要值来替代原始完整的数字内容
加解密算法
[x]对称加密算法:加密和解密的密钥匙相同
优点:加密效率和强度高
缺点:参与方都需要维护密钥,在不安全通道中分发密钥也是一个问题(可通过Diffie-Helman协议或非堆成加密方式解决)
基本原理:分组密码(DES,3DES,AES,IDEA)和序列密码
适用场景:大量数据加解密,提前分发密钥匙短板
[x]非对称加密算法:加密和解密的密钥匙不相同
优点:公钥可用在不安全通道中分发缺点:加解密速度慢,加密强度不如对称加密,依赖数学问题保证安全性(大数质因子分解,离散对数,椭圆曲线)
基本原理:公钥加密,私有解密
代表算法:RSA,Diffie-Helman密钥交换,ELGamal,椭圆曲线算法,SM2
适用场景:签名和密钥协商,不适用于大量数据加解密
[x]混合加密算法:利用非堆成加密协商一个对成加密密钥,然后再通过对称加密算法对数据加密
消息认证码
含义:消息认证码匙给予对成加密,可用用于对消息完整性进行保护。包括三个要素:K为提前共享的对成密钥;H为协商的hash算法;M为消息内容
场景:证明身份
代表算法:HMAC
数字签名
含义:基于非对称加密,既可以用于证实数字内容的完整性,又同时可用确认来源,具有不可抵赖性。
场景:数字签名
代表算法:DSA,ECSDA
数字证书
数字证书的出现是未来解决非对称加密算法及数字签名中公钥分发带来的安全风险。根据保护公钥的用户,可分为两类
[x]加密数字证书:保护用于加密信息的公钥
[x]签名验证数字证书:保护用于解密签名进行身份验证的公钥
PKI体系
CA:负责证书的颁发和作废,接受来自RA的请求
RA:对用户身份进行验证,校验数据合法性,负责登记,审核通过了就发给CA
证书数据库:存放证书
Merkle树
主要特点:
(1)最下面的叶子节点包含存储数据或hash值
(2)非叶子节点都是它的两个孩子节点内容的hash值
应用场景:
(1)快速比较大量数据:只需要比较根节点hash值是否相同
(2)快速定位修改:某个节点的数值变化
(3)零知识证明
布隆过滤器:某个元素是否在某个集合中
(1)基于hash的快速查找
(2)更高效的布隆过滤器:基于多个hash函数,提高空间利用率,可用使用较少的空间来表示较大集合的存在关系
同态加密
对密文直接进行处理,根对明文处理后再对处理结果加密,得到的结果相同。可以保证实现处理者无法访问数据自身的信息。
比特币原理和设计
基本交易过程
一笔合法的交易,引用某些已存在的交易的UTXO作为交易的输入,并生成新的输出。转账方通过签名脚本来证明自己的事UTXO的合法使用者,并指定输出脚本来限制未来的交易的使用者为收款方。每笔交易总输入不能低于总输出,总输入多于总输出的部分称为交易费用,为生成包含该交易区块的矿工所得。
重要概念
账户/地址:比特币账户地址其实就是用户公钥经过一系列hash(hash160,或先进行sha256,然后进行ripemd160)及编码运算后生成的160位(20字节)的字符串。
交易:
交易脚本:脚本是保障交易完成的核心机制,主要用于教研交易是否合法。包括输出脚本和认领脚本:输出脚本一般又付款方对交易设置锁定,用户对能动用这笔交易输出的对象(收款方)进行权限控制;认领脚本用来证明自己可以满足交易输出脚本的锁定条件。
区块:对完整区块的验证,只需要验证区块头即可
避免作恶:利用经济博弈论,来规避作恶。矿工首先要付出挖矿的代价,进行算力消耗,越想拿到新区块的决定权,意味着抵押的算力越多,一旦失败,这些算力就会被没收掉,称为沉没成本。
负反馈调节:比特币网络中的矿工越多,比特币网络就越稳定,比特币的价值就越高,但挖到矿的概率就越低。反之,比特币中的矿工越少,比特币网络就越不安全,比特币价值就越低,但挖矿的概率会提高。
挖矿:参与维护比特币网络的节点,并协助生成新区块来获取一定新增比特币的过程。矿工综合上一个区块的hash值,上一个区块生成之后的新的验证过的交易内容,用自己的猜测的一个随机数,一起打包到一个候选新区块,让新区块的hash值小于比特币网络中给定的一个数。算力一般以每秒多少次hash计算位单位,记为h/s 。
共识机制:
(1)工作量证明PoW
最长链
(2)权益证明PoS
闪电网络:解决比特币交易网络性能问题:全网每秒7笔左右的交易速度;同时,等待6个区块的可信确认将导致约1个小时的最终确认时间。引入智能合约的思想来完善链下的交易渠道。
(1)RSMC :可撤销的顺序成熟合同,类似于资金池机制。保障两个人之间的直接交易可以在链下完成。
(2)HTLC :哈希的带时钟的合约。保证任意两个人之间的转账都可以通过一条支付通道来完成。
侧链:
侧链协议允许资产在比特币区块链和其他区块链之间互转。比特币区块链作为主链,其他区块链作为侧链,二者双向挂钩,实现比特币从主链转移到侧链进行流通。
(1)简单支付验证证明SPV Proof:SPV客户端只需要下载所有区块的区块头,并进行简单的定位和计算工作,就可以给出验证结论。
(2)双向挂钩:实现比特币在主链和侧链之间的转移和返回,主链和侧链需要对对方的特定交易做SPV验证。
Trade -off:
(1)区块上限 1MB:更大的区块容量可以带来更大的交易吞吐量,但会增加挖矿的成本,带来中心化的风险,同时增大存储的成本。
(2)出块间隔时间:更短的出块时间可以缩短交易的确认时间,但也可能导致分叉增多,降低网络可用性。
(3)脚本支持程度:更强大的脚本指令集可以带来更多的灵活性,但也可能带来更多的安全风险。
分叉:比特币网络的升级会带来分叉
(1)软分叉:旧节点能够接受新节点产生的交易和区块
(2)硬分叉:旧节点不能接受新节点产生的交易和区块
以太坊的核心概念
1.智能合约
以计算机程序来运行各种缔结和合约。通过图灵完备的高级语言,包括solidity,serpent,viper等来开发智能合约,智能合约运行在以太坊虚拟机中。
2.账户
比特币中没有账户的概念,而是通过采用UTXO模型记录整个系统的状态。通过交易历史来推算用户的余额信息,而以太坊采用账户来记录系统的状态,每个账户存储余额信息,智能合约代码和内部数据出存储等。具体可分为两种类型:
(1)合约账户:存储智能合约代码
(2)外部账户:以太币拥有者账户,对应到某公钥。
3.以太币:主要用于购买燃料,支付给矿工,以维护以太坊网络运行智能合约的费用。
4.燃料:控制某次交易执行指令的上限。没执行一条合约指定会消耗固定的燃料。
超级账本—面向企业的分布式账本