区块链核心技术与应用/核心技术篇
第4章 密码学
一。哈希算法/哈希函数
碰撞:两个不同的消息在同一个哈希函数作用下,具有相同的哈希值。
哈希函数:
(1)抗碰撞性(可做区块和交易的完整性[是否被篡改]验证)
(2)不可逆:通过输入值能够计算函数值,但知道函数值很难计算输入值。(哈希函数隐藏了原始消息)
(3)指纹:哈希值作为原始消息的指纹(很难找到碰撞)
(4)固定长度:输入长度不同,但哈希后的结果长度固定
最小熵:是信息理论中衡量某个结果的一个可预测性指标,用于度量最坏情形下的随机性。
高最小熵:指的是变量呈平均分布(随机分布)
区块链中的哈希函数:
(1)MD5和SHA-1:广泛应用的哈希函数。(均被破解,找到碰撞)
(2)SHA-2一族:SHA-224, SHA-256, SHA-384, SHA-512
(3) SHA-3一族:Keccak算法为官方唯一的标准SHA-3算法
比特币系统:应用两个密码学哈希函数
(1)SHA-256:是构造比特币区块链所用的密码学哈希函数,比特币地址的生成过程也用到了SHA-256
比特币系统基于寻找给定前缀的SHA-256哈希值,设计了pow的共识机制。
SHA-256算法被认为容易导致硬件矿机和矿池的出现,引发算力集中,违背去中心化原则。
(2)RIPEMD160:主要用于生成比特币地址
以太坊:
(1)以太坊使用Ethash算法实现工作量证明机制。
(2)以太坊工作量证明基于改进的DaggerHashimoto算法
(3)以太坊的sha3_256, sha3_512哈希不是标准的sha-3算法,而是一种变体,通常称为Keccak-256和keccak-512
莱特币:
(1) SCRYPT算法被用来设计莱特币(Litecoin)的工作量证明机制
(2)SCRYPT算法具有更强的抵御矿机的能力
夸克币(Quark):应用6种公认的安全哈希算法(BLAKE,BMW,GROESTL,JH,KECCAK,SKEIN)
达世币(前身暗黑币):应用了11种哈希算法(BLAKE,BMW,GROESTL,JH,KECCAK,SKEIN,SKEIN,LUFFA,CUBEHASH,SHAVITE,SIMD,ECHO)
二。Merkle树--默克尔树,也称哈希树
Merkle树是一类基于哈希指针的树。利用Merkle树可快速方便的进行信息完整性验证。
1。哈希指针:是一种数据结构
它除了指示信息存储的位置外,带有这些信息的哈希函数值存储在一起。使得哈希指针不仅可以检索信息,也可检测所指向信息的完整性。
(1)哈希指针 与 哈希指针链
注:初始区块/创世区块内容不可改变,即使将所有区块hash值全部修改,到初始区块也可检测内容是否具有完整性。
2。Merkle哈希树:是一类基于哈希指针的二叉树或多叉树
Merkle哈希树其叶子节点上的值通常为数据块的哈希值;
非叶子节点上的值是该节点的所有子节点的组合结果的哈希值。
验证数据是否被篡改只需要验证Merkle树根即可。
Merkle哈希二叉树
三。公钥密码算法
1。密码算法简介
简化的加密模型:
Ka加密密钥与Kb解密密钥是否相等,分为:
(1)对称加密算法(Ka=Kb):效率高
(2)非对称加密算法(Ka != Kb,公开密钥[公钥]和私有密钥[私钥]):效率低
注:由公钥导出私钥是困难的。
现实应用:
使用非对称加密算法为通信双方传输或协商一个会话密钥,
双方通过这个密钥,使用性能更高的对称加密算法进行通信。
2。公钥密码算法
(1)RSA算法:典型,基于大整数因子分解的困难性
(2)DLP问题:离散对数的计算困难性
(3)椭圆曲线公钥密码算法:建立在椭圆曲线的点的离散对数的计算困难性问题上
3。区块链中使用的椭圆曲线
(1)比特币区块链中采用了椭圆曲线公钥密码技术:所使用的椭圆曲线为Certicom推荐的secp256k1椭圆曲线
4。数字证书:是一个证书权威机构(CA)对一个实体所拥有的公钥的认证证书
(1)A 向 B提供公钥Pk,如何确定B收到的Pk就是A提供的Pk--解决方案(数字证书)
(2)CA是证书的签发机构,为通信双方所共同信任。承担公钥体系中公钥合法性检验的责任。
(3)大量采用的数字证书格式遵循X.509国际标准
数字证书结构:
四。数字签名
数字签名是公钥密码体制的一个重要应用模式。
A(发送方):私钥加密发送的信息形成数字签名+原始信息 -》B(接收方):使用A公钥验证签名(解密),确认信息确实为A所发送。
(1)数字签名标准(DSA算法)与ECDSA算法
DSA算法:ElGamal签名算法变种,其安全性基于离散对数难题
ECDSA算法:DSA算法变种,使用的是椭圆曲线群。
区块链中应用的数字签名算法是ECDSA算法。
其他的数字签名方法:
(1)群签名:
基本思想:一群人中的作何一个人可生成一群签名(可追踪签名者)
(2)环签名:一种特殊的群签名
基本思想:从一群人中选择部分成员构成群,生成一环签名(完全匿名)
(3)盲签名:保护所签署消息的具体内容
基本思想:签名者对盲化的消息进行签名,消息拥有者对签字除去盲因子,得到签名者关于原消息的签名。
盲签名算法,消息内容对签名者是不可见的,且在签名被接受者公开后,签名者不能追踪签名。
(4)多重数字签名:需要多个用户对同一消息进行签名和验证
A。有序多重数字签名方案
包括:消息发送者,消息签名者,消息验证者
由消息发送者规定消息签名顺序,A发送消息(消息签名)-》B(验证A签名,B签名)-》C......
B。广播多重数字签名方案
包括:消息发送者,消息签名者,消息验证者,消息收集者
A消息发送者同时将消息+消息签名 -》B,C(签名)-》消息收集者(整理)-》签名验证者(验证多重签名有效性)
五。零知识证明/最小透露的证明
零知识证明:证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
简明非交互零知识证明(zkSNARKs)是成功应用于区块链中的零知识证明技术,可在无须泄漏交易数据情况下,向验证者证明某个交易是合法的。
Zcash使用了zkSNARKs,以太坊和Polkadol也计划采用zkSNARKs.
六。区块链中的隐私问题
区块链目前的隐私保护方案包括:
(1)混币
通过割裂输入地址和输出地址之间的关系实现匿名。
(2)环签名:简化的群签名
允许一个成员代表一组人进行签名而不泄漏签名者的信息。
A(私钥)+B(公钥)+C(公钥)+......+N(公钥)生成签名(A不需要B,C..允许即可使用其公钥)
验证者仅知道签名来自于这个环,并不知道真正签名者。
(3)同态加密
对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。
加法同态:如果存在有效算法⊕,E(x+y)=E(x)⊕E(y)或者 x+y=D(E(x)⊕E(y))成立,并且不泄漏 x 和 y。
乘法同态:如果存在有效算法 ,E(x×y)=E(x) E(y)或者 xy=D(E(x) E(y))成立,并且不泄漏 x 和 y。
混合乘法同态:如果存在有效算法 ,E(x×y)=E(x) y 或者 xy=D(E(x) y)成立,并且不泄漏 x。
减法同态:如果存在有效算法○- ,E(x-y)=E(x)○- E(y)或者 x-y=D(E(x)○- E(y))成立,并且不泄漏 x 和 y,则称 E 为减法同态。
除法同态:如果存在有效算法○/ ,E(x/y)=E(x)○/ E(y)或者 x/y=D(E(x)○/ E(y))成立,并且不泄漏 x 和 y,则称 E 为除法同态。
代数同态:如果 E 既是加法同态又是乘法同态。
(4)零知识证明
证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
第5章 共识算法
1。分布式共识算法背景
分布式共识算法是分布式系统中保证系统状态一致性的重要技术,是分布式文件系统,分布式DB的重要基础。
(1)两阶段提交与三阶段提交
均不能作为一个分布式共识算法,只能在通常情况下保障分布式系统的一致性。
(2)拜占庭将军问题
定义1:拜占庭缺陷(Byzantine Fault)。任何从不同观察者角度看表现出不同症状的缺陷。
定义2:拜占庭故障(Byzantine Failure)。在需要共识的系统中由于拜占庭缺陷导致丧失系统服务。
定义3:宕机缺陷(Fail-Stop Fault)。在需要共识的系统中导致进程停止运行发生的缺陷;该缺陷不对系统产生其他副作用。
定义4:宕机恢复故障(Fail-Recovery Failure)。在需要共识的系统中导致进程停止运行发生的故障;该故障在重启进程后恢复,不对系统产生其他副作用。
(3)FLP(Fisher-Lynch-Paterson)定理
在一个多进程异步系统中,只要有一个进程不可靠,那么就不存在一个协议,能保证有限时间内使所有进程达成一致。
FLP定理不考虑拜占庭故障,而只是一般的宕机故障。
FLP定理是关于分布式系统的共识问题
FLP定理,在异步通信情况下,不能同时满足安全性和活性
(4)CAP(Consistency,Availablity,Partition Tolerance)定理
Partition Tolerance:对网络分隔的容忍
Consistency:一致性
Availablity:可用性
任意一个数据共享系统,最多只能在三个属性中选择满足两个属性。
CAP定理主要讨论关于原子性数据存储的一致性及和可用性的关系。
2。强一致性非拜占庭共识算法
假设条件不需要考虑拜占庭故障,而只是处理一般的宕机恢复故障。
3个处理宕机恢复故障的协议:
(1)Viewstamped Replication协议:VR
第一个分布式共识算法,主要用于分布式系统状态复制服务(主从节点状态复制)。
异步通信环境的共识协议
(2)Paxos协议
异步通信环境的共识算法,能容忍半数以上的宕机恢复(非拜占庭故障)节点并达成共识。
其他类Paxo共识协议:Raft, Chubby, Zookeeper, etcd...这些共识算法广泛用于各种分布式系统。
谷歌GFS和BigTable使用Chubby分布式锁协议
Yahoo的Hadoop系统和OpenStack,Mesos等采用了Zookeeper
kubernetes和CoreOS采用了etcd协议。
超级账本fabric1.0采用基于Zookeeper的kafka做排序引擎。共识模块将被设计成可插拔模块,支持像PBFT, Raft等共识算法。
(3)Raft协议(区块链项目中常见非拜占庭容错的分布式共识算法)
Raft是一个基于Paxos的共识协议,也是基于状态机复制的协议。
Raft将共识问题分解为3个相对独立的子问题:
A。leader选举 B。记账 C。安全
3。强一致性拜占庭容错共识算法
拜占庭容错(PBFT)共识算法
应用于联盟链和私有链(需要保证系统各节点的强一致性,即保证系统各节点按相同顺序执行相同命令,形成相同结果,这些结果一旦共识则不可改变)
PBFT协议正常流程:
其他拜占庭共识算法:Fab Paxos,XFS,Zyzzyva,SBFT等。
4。非强一致共识算法PoW机制
PoW:工作量证明/算力
比特币系统中使用的工作量证明函数是SHA-256
比特币PoW共识算法流程:
比特币的共识算法不适合于私有链和联盟链。因为它是一个最终一致性共识算法而不是一个强一致性共识算法,且共识效率低。
5。PoS机制
(1)点点币Pos机制:
权益证明要求用户证明拥有某些数量的货币(即对货币的权益),点点币(Peercoin)是首先采用权益证明的虚拟货币。
它采用混合共识机制,既用PoW工作量证明挖矿机制,同时又用权益证明PoS机制。采用币龄概念。
点点币引入了一个中心化的Checkpoint广播机制,在每天几次广播checkpoint消息,以确认区块链中的交易。确认后即为最终交易。
(2)未来币NXT PoS机制
未来币完全使用PoS权益证明的虚拟货币。它不采用币龄概念。
(3)Tendermint PoS机制
Tendermint共识算法是第一个实现BFT的PoS共识算法。
(4)Ethereum Casper PoS机制
以太坊的casper的pos机制也具有BFT容错能力
(5)LPoS(Leased Proof of Stake)机制--租借权益证明
Waves是采用LPoS的区块链项目
(6)DPoS(Delegated Proof of Stake)机制--股份授权证明机制
DPoS主要解决PoW和PoS机制不足,比特股是一类采用DPoS机制的密码货币。
TeZoS和EOS项目采用DPoS机制。
6。Ripple(瑞波)共识算法
UNL(Unique Node List)可信节点名单
Ripple共识算法只适合于许可链(Permissioned chain)
Ripple共识算法流程:
Ripple共识算法独特之处在于它不是在全网一次性达成共识,而是在UNL子网中达成共识。
第6章 P2P网络
1。P2P(Peer-to-Peer networking,对等网络)网络简介
(1)TCP/IP与UDP协议
电脑要想相互交换信息必须使用“同一种语言”,这个语言就是所谓的“通信协议”。(类比不同国家人相互沟通)
互联网协议族(Internet Protocol Suite,IPS)也称为“TCP/IP协议族”(TCP/IP Protocol Suite | TCP/IP Protocols)
TCP/IP协议族两个核心协定:TCP(传输控制协议)和IP(网络协议)
互联网协议可分为OSI分层模型和TCP/IP分层模型 (可理解为一门语言的不同解释,如美式英语和英式英语)
A。OSI模型,即开放式通信系统互联参考模型
B。TCP/IP参考模型
P2P网络大部分应用UDP(User Datagram Protocol:用户数据报文)协议
--不可靠的数据报文协议(数据一旦发送出去,不保留数据备份)
TCP与UDP区别:
A。TCP是一种面向连接的协议(两台主机要建立可靠连接,类比两个人通电话),
B。UDP是一种无连接的协议(不用建立可靠连接,类比电台广播和收音机)
(2)SSL相关知识
A。Http与Https
a。Https将Http明文传输的协议进行加密,即使信息被截取,也无法破解
b。Https使用的加密方式是“对称加密”
c。Https配置流程只需要申请pem和key文件(CA证书
),在nginx中配置规则,开启443端口即可
d。C端与S端https通信
C端与S端验证对方证书的合法性
C端产生一个随机数1
,用S端公匙加密,产生随机密码1
S端用自己的私匙解析
随机密码1
,获取随机数1
,此时,C端与S端使用相同的方式对随机数1
进行运算得到一个通讯密码
C端与S端使用相同的通讯密码对数据进行对称加密
B。SSL是一种安全协议(
1。SSL针对HTTP进行了特别设计,HTTP协议能够在SSL运行
2。https = http + ssl
3。https运行在443端口,http运行在80端口
4。https需要申请证书CA
)
C。TSL(传输层安全性协议)与SSL(协议层安全性协议)区别(
1。TSL使用x.509认证
2。SSL认证是客户端到服务端的认证
3。TLS工作在传输层,应用层协议能透明地运行在TLS协议之上
)
(3)P2P原理
P2P网络通信的原理主要包括:节点添加,消息路由,节点发现,节点删除。
举例:
若小明想通过P2P网络发消息给小红,但距离有点远,超过了蓝牙的最大通信距离,但他们中间刚好有个小芳,
小芳的手机刚好可以通过蓝牙跟小明和小红通信,即小明要发消息给小红,必须通过小芳这个第三方节点。
此时:
小明的手机会不停地从P2P网络发现并查找到合适的第三方节点(最短通信距离衡量),直到找到小芳手机,此过程叫“节点发现”;
发现可靠节点后,小明手机就会跟小芳手机通信,并通过小芳手机把他的消息发给小红,此过程叫“消息路由”;
若小芳手机没电了,小明手机又要重新查找新的第三方节点。这时小刚出现,刚好在小明与小红间可以通过蓝牙通信,小刚就加入到这个P2P网络中,这叫“节点添加”;
而小芳的手机就可以从这个P2P网络中直接删除,这叫作“节点删除”。
2。P2P网络核心数据结构与算法
P2P协议分为非结构化的系统和结构化的系统
(1)非结构化的系统
每个节点存储自身的信息或信息的索引(如指针和IP地址)
洪泛查找:广播
(2)结构化的系统
每个节点只存储特定的信息或特定信息的索引
DHT(分布式哈希表[Distributed Hash Table])技术
DHT网络类比整个城市地图,每个client相当于只包括一个街道的小地图。
DHT协议:
A。缓冲队列路由协议(CARP)
B。一致性哈希
一致性哈希基本解决了P2P环境中最为关键的问题
--如何在动态的网络拓扑中分布存储和路由(缺点:路由算法不足)
--每个节点仅需维护少量相邻节点的信息,并且在节点加入/退出系统时仅有相关的少量节点参与到拓扑的维护中
C。Chord协议
--解决如何在P2P网络中找到存有特定数据的节点
D。内容寻址网络(CAN:Content-Addressable Network)
CAN是DHT的一个变种。
E。Pastry
包括:PAST和SCRIBE
3。区块链P2P网络协议
(1)比特币区块链
完整功能的比特币网络节点:
名词:
全节点:是指维持包含全部交易信息的完整区块链的节点(完整区块链节点)
种子节点:长期稳定运行的节点
SPV节点/轻量节点:通过SPV(简易支付验证)方式完成交易验证的节点
创世区块:第一区块(不可改变)
交易池:比特币网络中几乎每个节点都会维护一份未确认交易的临时列表,该表称为“内存池”/“交易池”
UTXO池:有些比特币客户端还维护一个UTXO数据库,也称“UTXO池”,是区块链中所有未支付交易输出的集合
(2)以太坊区块链
技术文档:https://github.com/ethereum/devP2P/blob/master/rlpx.md
以太坊应用:DHT数据结构和类Kademlia算法(通过分布式哈希表实现的协议算法,UPD通信)