试图自带信任化和防止篡改的分布式记录系统
一次操作,导致账本状态的一次改变
记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识
由一个个区块按照发生顺序串联而成,是整个状态变量的日志记录。
nonce 随机数 ,生成hash值前面0的个数表示难度
-
公链 任何人都可以参加,信息完全公开,比如比特币
-
联盟Consortium 介于两者之间,由若干组织一起合作维护一条区块链,该区块链的使用必须是由权限的管理
-
私链 集中管理着进行限制,只能得到内部少数人可以使用,信息不公开
- 分布式容错性
- 不可篡改性
- 隐私保护性
交易本质上交换的是价值的所属权,但是往往撞见存在着不充分信任的情况
保证所有进程看到的全局执行顺序一致,并且每个进程自身的执行跟实际发生顺序一致。
共识算法解决的是对某个提案Proposal 大家达成一致性意见的过程。
非拜占庭错误:故障不响应的情况
拜占庭错误:恶意响应的情况
非拜占庭错误应对:Paxos、Raft变种
容忍拜占庭错误的情况:PBFT、Pow系列算法
PBFT系列算法:PBFT系列算法是确定的,一旦达成共识就不可逆转。
POW系列算法:PoW算法是不确定的,随着时间推移,被推翻的概率越来越小。
即便在网络通信可靠情况下,一个可扩展的分布式系统的共识问题的下限是无解。被称为FLP不可能性原理,可以看做分布式领域的 测不准原理
在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。
该原理告诉人们,不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法
科学告诉你什么是不可能的,工程则告诉你,付出一些代价,我可以把它变成可能的
-
一致性 Consistency 任何操作应该都是原子的
-
可用性 Availablity 在有限时间内,任何非失败节点都能应答请求
-
分区容忍性 Partition 网络可能发生分区,即节点之间的通信不可保障
弱化可用性:Paxos、Raft等算法
弱化分区容忍性:zookeeper
-
Atomicity 原子性
每次操作是原子性,要么成功,要么不执行 -
Consistency 一致性 数据库的状态是一致性的,无中间状态
-
Isolation 隔离性 各种操作彼此相互不影响
-
Durability 持久性 状态的改变是持久的,不会失效
相对的原则是BASE ,Basic Availiability
paxos问题是指分布式的系统中存在故障,但不存在恶意节点场景(消息丢失或重复)下的共识达成问题
算法中将节点分为三种类型:
proposer:提出一个提案,等待大家批准为结案。往往是客户端担任该角色
acceptor:负责对提案进行投票。往往是服务端担任该角色
learner:被告知结案结果,并与之统一,不参与投票过程。可能为客户端或服务端。
safety:保证决议结果是对的,无歧义的,不会出现错误情况。
决议只有在被proposers提出的proposal才能被最终批准
在一次执行实例中,只批准一个最终决议,意味着多数接受accept的结果能成为决议
liveness:保证决议过程能在有限时间内完成
决议总会产生,并且learners能获得被批准的决议。
基本过程:
1、proposer提出提案
2、争取大多数acceptor的支持
3、超过一半支持时,则发生结案结果给所有人进行确认。
paxos能保证在超过一半的正常节点存在时,系统能达成共识
paxos里面对这两阶段分别是准备prepare和提交
- 准备阶段
提案这发送自己计划提交的提案的编号到多个接受者,试探是否可以锁定多数接受这额支持
接受者时刻保留收到过提案的最大编号和接受的最大提案。
- 提交阶段
提案者如果收到大多数的回复,则可准备发送刚才提案号的接受消息。
接受者收到接受消息后,如果发现提案号不小于接受的最大提案号,则接受该提案,并更新接受的最大提案。
Raft算法是Paxos算法的一种简化实现 三种角色:leader、candidate、follower
-
leader选举 每个candidate随机经过一定时间都会提出选举方案,最近阶段中得票最多者被选为leader
-
同步log leader会找到系统中log最新的记录,并强制所有的follower来舒心到这个记录
讨论的是允许在少数节点作恶场景下的一致性达成问题
拜占庭算法讨论的是最坏情况下的保障
面向拜占庭问题的容错算法,解决的是网络通信可靠,但节点可能故障情况下的一致性达成
pow Proof of work :一个是限制一段时间内整个网络中出现提案的个数,另一个是放宽对最终一致性趣儿的需求,
提高可靠性:
- 让系统中的单点变得更可靠
- 消灭单点
hash算法一般都是算力敏感性,
数字摘要:解决确保内容没被篡改过的问题
对称加密:DES、3DES、AES
非对称加密:RSA、EIGamal、椭圆曲线算法ECC
混合加密机制:先用就算复杂度高的非对称加密协商一个临时的对称加密密钥,然后双方再通过对称加密对传递的大量数据进行加解密处理。典型的就是https
数字签名:用于证实某数字内容的完整性和来源不可抵赖性
Hash-based Message Authentication Code :基于Hash的消息认证码
基本过程为对某个消息,利用提前共享的对称密钥和Hash算法进行加密处理,得到HMAC值。
签名者在无法看到原始内容的前提下对信息进行签名
主要是为了实现防止追踪,签名者无法将签名内容和结果进行对应
环签名是一种简化的群签名
签名者首先选定一个临时的签名者集合,集合包括 签名者自身。
数字证书用来证明某个公钥是谁的,并且内容是正确的
对非对称加密算法和数字签名来说,很重要的一点就是公钥的分发。
一旦公钥被人替换(典型的如中间人攻击),则整个安全体系都将被破坏掉
怎样确保一个公钥确实是某个人的原始公钥?这就需要数字证书机制
证书 证明信息合法性。由证书认证机构ca来签发
非对称加密中,公钥则可以通过证书机制来进行保护,如何管理和分发证书则可以通过PKI来保障
PKI不代表某个特定的密码技术和流程,
PKI是建立在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架
- CA Certification Authority :负责证书的颁发和作废,接受来自RA的请求,是最核心的部分
- RA Registration Authority :对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给CA
- 证书数据库:存放证书,一半采用LDAP目录服务,标准格式采用X.500系列
常见流程:用户通过RA登记申请证书,CA完成证书的制造,颁发给用户
默克尔树是又叫哈希树,是一种二叉树,由一个跟节点,一组中间节点和一组叶节点组成。
最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值
底层数据的任何变动,都会传递到其父亲节点,一直到树根。
快速比较大量数据:当两个默克尔树根相同时,则以为着所有的数据必然相同
是一种特殊的加密方法,允许对密文进行处理得到仍然是加密结果,即对密文直接进行处理,跟对明文进行处理再加密,得到的结果相同。从代数的酵素讲,即同态性。
比特币网络是一个分布式的点对点网络,网络中的矿工通过挖矿来完成对交易记录的记账过程,维护网络的正常运行。
比特币账户采用了非对称的加密算法,用户自己保留私钥,对他发出的交易进行签名确认,并公开公钥。
一个区块主要包括如下内容:
- 4字节的区块大小信息
- 80字节的区块头信息
- 版本号4 字节
- 上一个区块头的SHA256hash值;连接到一个合法的块上,32字节;
- 包含的所有验证过的交易Merkle树根的哈希值,32字节
- 时间戳 4 字节
- 难度指标 4 字节
- Nonce 4 字节,pow问题的答案;
- 交易个数计数器1-9字节;
所有交易的具体内容,可变长
经济博弈原理
三个人分蛋糕,分的人最后一个选
越想拿到新区块的决定权,意味着抵押的算力越多,一旦失败,这些算力都会成为沉没成本
矿工越多,系统就越稳定
传统的共识问题是考虑在一个相对封闭的体系中
将大量交易放到比特币区块链之外进行。
hashed timelock contract 哈希的带时钟的合约,就是限时转账