【03】 区块链分布式网络

打印 上一主题 下一主题

主题 1042|帖子 1042|积分 3126

3-1 P2P网络

传统中心化网络由中央服务器生存全量数据。客户端之间无法直接毗连,必须通过中央服务器作为桥梁。客户端必须和中央服务器创建毗连后访问资源。客户端之间并无连通。
在P2P网络中通过将数据资源分散在网络各个节点中存储以及节点间交互毗连,协同来低落或完全消除对中央服务器的依靠。客户端节点也提供一定的服务端能力。
定义

对等式网络(peer-to-peer,简称P2P),又称点对点技术,是一种分布式网络。依靠节点群(peers)互换信息的互联网体系。和传统中心化网络体系不同,P2P网络的每个节点既是一个应用端,也有服务器的功能,网络中的节点共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络毗连能力等),这些共享资源,能被其他对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(Server),又是资源(服务和内容)获取者(Client)。
核心概念

覆盖网络(overlay network)

一种利用软件创建网络抽象层的方法,该抽象层可用于在物理网络之上运行多个独立的、离散的假造化网络层。覆盖网络中的所有节点都通过逻辑或假造链路相互毗连,并且这些链路中的每一个都对应于底层网络中的一条路径。
底层网络(underlay network)

是创建覆盖网络的物理基础办法。它是负责跨网络传送数据包的底层网络。

核心特点

资源共享(resource sharing)

P2P网络中每一个节点生存部分体系资源,并共享体系资源。
网络化(networked)

P2P网络中所有节点都是直接或间接互连。
去中心化(Decentralization)

可减少或完全消除对中央服务器依靠。整个网络由所有节点决定行为。例如共识,节点发现,节点路由等,是由各个节点根据同步消息主动或被动触发相干功能。
自治(Autonomy)

P2P网络中的参与节点由节点本地设置决定。不需要管理体系决定节点。例如节点加入,退出等行为。
自构造(Self-organization)

构造创建,加入等由节点本地设置决定。各个节点功能基本同等,没有特别节点同一管理构造。
可扩展(Scalable)

随节点加入,整个网络主动扩展。扩张过程不需要管理,节点根据自有功能加入和发现网络等。
优势

P2P网络的一个重要的目标就是让所有的节点都能提供资源,包括带宽,存储空间和计算能力。因此,当有节点加入且对体系哀求增多,整个体系的容量也增大。这是具有一组固定中央服务器的Client-Server布局不能实现的,因为Client/Server这种布局中,客户端的增长意味着访问中央服务器的数目会越来越大,导致中央服务器出现性能瓶颈。
P2P网络的分布特性通过在多节点上同步和复制数据,也增长了网络整体健壮性,并且在P2P网络中,节点不需要依靠一个中央服务器来发现数据。
P2P网络通常以自构造方式创建,并答应节点自由加入和离开。这种环境下,体系具有耐攻击,高容错的优点。体系在部分节点失效的环境能够主动调整网络拓扑,保持与其他有效节点的连通性。不会出现网络整体崩溃。
P2P网络内每个节点既是服务器又是客户端,资源分布在多个节点。因此能更好地实现整个网络的负载均衡。
拓补布局

一般环境下,根据拓扑布局关系可以将P2P网络分为四类


  • 中心化拓扑(Centralized Topology)
  • 全分布式非布局化拓扑(Decentralized Unstructured Topology)
  • 全分布式布局化拓扑(Decentralized Structured Topology,也称作DTH网络)
  • 半分布式拓扑(Partially Decentralized Topology)

 
3-1-1 中心化拓扑布局

一个高性能的索引服务器存储网络中所有活动节点共享资源的目录和索引信息
当需要查询某个文件时,节点向索引服务器发出文件查询哀求
索引服务器进行相应的检索和查询后,会返回符合查询要求的节点地址信息列表
节点接收到应答后,根据地址信息和目标节点创建毗连,并传输数据
新节点加入网络时,需要向索引服务器注册并发送自己的资源目录和索引信息。索引服务器更新自己的数据库
索引服务器监控所有节点处于有效状态
经典应用
MP3共享应用Napster

优势

设立索引服务器存储资源索引
实现了文件查询与文件传输的分离,资源索引在索引服务器生存
有效地节省了索引服务器的带宽消耗,减少了体系的文件传输延时,资源发现效率高
缺点

索引服务器的瘫痪轻易导致整个网络的崩溃,可靠性和安全性较低
随着网络规模的扩大,索引服务器需要存储大量的资源索引信息,为了保证资源的正确性和实时性,必须不停地和节点保持信息同步。当节点数目规模极大时,索引服务器节点受制于自己的算力,内存和网络带宽,很轻易出现性能瓶颈。
 
3-1-2 全分布式非布局化网络

纯分布式的P2P网络不存在中心节点,每个节点在网络中是真正的对等关系
所有节点之间的链接是随机产生。新节点加入只需要随机选择已经存在的一个节点毗连并创建邻居关系
每个节点利用全网广播发送哀求,其他节点收到查询消息后搜索资源列表,检察自己是否有相应资源,假如有则返回搜索结果。假如没有,则向自己的邻居节点发送广播消息。
节点全网广播采取泛洪算法。一种常用消息广播算法
对于给定的网络拓扑布局,可以知道任何两个节点之间都有最短路径。最短的定义可以基于节点跳数。
例如:
节点1到节点6之间最短路径是:节点1→节点3→节点6由于泛洪消息会向节点的所有邻居广播消息,因此消息传播路径中一定包罗最短路径
经典应用


  • Gnutella分布式音乐平台
  • 比特币网络

标准泛洪(Flooding)原理

节点S发起数据哀求,仅向自己的邻居(1-hop邻居:不是间接毗连)传播哀求
所有节点收到哀求后,仅向自己的直接邻居(1-hop邻居)转发哀求
直到目标节点D收到数据哀求,发起相应报文,同时携带路径路由信息(multi-hop多跳路径)
节点D发起相应后,假如再次收到数据哀求,则会保持静默
即使节点S和节点D之间会话竣事,网络中其他节点仍然可能发送哀求或担当哀求。最终所有节点都收到数据哀求消息

泛洪算法性能

泛洪循环
节点1,2,3,4之间组成一个环。原因,节点1发送消息经过节点2,4,3,节点3再次发送给节点1。假如节点1对于收到的消息不做循环判定而再次发送给节点2,则形成泛洪循环。因此在全网任何时间,都可能发生泛洪循环。从而产生大量无效广播消息,大量网络和计算资源被浪费,导致整个网络不可用。
TTL机制
为了控制广播消息发生循环,对每个查询设置TTL(Time to Live)值,例如,TTL=TTL-1。节点每一次转发TTL减1,直到TTL = 0,放弃该消息。假设TTL最大值为4,节点1→节点2→节点4→节点3,消息转发经过3跳,节点3再次转发给节点1,节点1收到该消息的TTL为0,则放弃该消息,不再转发,可避免产生泛洪消息循环。

优势

高度容错,即使部分节点宕机/离线,整个网络不会崩溃。
面对网络的动态变革表现了较好的容错能力,因此网络维护性很高,具有较好的可用性。
可以支持复杂查询,如带有规则表达式的多关键词查询,模糊查询等
缺陷

随着联网节点的不停增多,网络规模不停扩大,通过泛洪算法查找节点的方法将造成网络流量急剧增长,从而导致网络中部分低带宽节点因网络资源过载而失效。
由于没有确定拓补布局的支持,非布局化网络无法保证资源发现的效率。即使需要查找的目标节点存在,发现也有可能失败。
相应消息风暴问题。在某一时刻节点4申请的资源被多数节点拥有。那么很短时间内,大量节点会发送相应消息到节点4.造成节点4瘫痪。

比特币网络机制

基于分布式P2P网络开导,比特币网络采取全分布式非布局化网络拓扑。在比特币网络中没有中心化服务器,没有特别节点充当服务器,没有条理布局,因此整个网络属于扁平的拓扑布局。
所有节点既能提供服务也能消费服务,属于完全去中心化的网络。
网络节点毗连采取比特币P2P协议(bitcoin P2P Protocol)。除此而外,另有矿池协议(pool-mining Protocol)和挖矿协议(Stratum Protocol)。所有协议支撑比特币网络节点间的交互。

比特币节点范例
比特币网络中的节点重要有四大功能:钱包、挖矿、区块链数据库、网络路由。每个节点都参与验证并传播生意业务及区块信息,发现并维持与对等节点的毗连。
全节点
就是包罗了钱包、挖矿、区块链数据库、网络路由功能的一个聚集节点。全节点能够独立自主地校验所有生意业务,而不需要借由任何外部参照。
SPV节点
保存了区块链的一部分(区块头),它们通过一种名为“简易付出验证(SPV)”的方式来完成生意业务验证。又叫“轻量级节点”。
挖矿节点
通过运行在特别硬件设备上的工作量证明(proof-of-work)算法,简称POW,以相互竞争的方式创建新的区块。
SPV挖矿节点
包罗了钱包,挖矿功能的一个聚集节点。
全区块链节点
包罗完整区块链和网络路由信息。
矿池节点
包罗矿池功能和挖矿协议或矿池协议。
矿池和挖矿协议服务节点
网关路由协议,支持节点运行矿池协议或挖矿协议
 

节点发现

比特币计划两种节点发现机制
DNS种子节点
比特币将一部分长期稳定的节点硬编码至代码中,这些节点在初始启动时提供最初接入网络的入口节点。新节点通过这些稳定节点作为中介毗连其他节点,并且可以一连获取区块链网络节点地址列表。
带有IP地址的比特币节点
与该种子节点创建毗连后,通过广播方式毗连其他节点
新节点毗连比特币节点时,首先要通过握手协议。
Version消息包罗协议版本,当前时间,两边IP地址和区块高度等信息。
节点收到version消息后,会检查远端节点版本兼容性,假如兼容则发送verack消息作为回应并创建毗连

新节点通过DNS种子节点或指定种子节点获取地址信息后,广播addr消息给邻居节点,邻居节点转发广播消息到其他邻居节点。
由于节点毗连和退出时刻发生变革,新节点必须不停毗连不同的邻居节点保证创建多个毗连路径,保持多样化。
节点退出时,生存最新毗连的邻居节点记录。下次重启后可以尽快重建毗连。

 
3-1-3 全分布式布局化网络

全分布式非布局化网络由对等节点构成,没有同一路径规划,节点加入和退出完全随机,节点和节点间存在大量路由查询消息创建暂时路由信息。在大规模网络中会引发广播风暴消息。并且节点发现效率不高。
区别于非布局化网络,全分布式布局化网络则将所有节点按照某种布局进行有序构造,比如形成一个环状网络或树状网络。
雷同全分布式非布局化拓扑,不存在中心节点。
应用
以太坊区块链

优势

通过布局化网络,利用较少的路由信息就可以有效地实现资源定位。
能够自顺应节点的动态加入/退出
良好的可扩展性、鲁棒性、节点ID分配的匀称性和自构造能力
扩展性较好,轻易管理
由于网络采取了确定性拓扑布局,DHT可以提供精确的发现。只要目标节点存在于网络中,DHT总能发现它,发现的精确性得到了保证
缺陷

DHT的维护机制较为复杂,尤其是节点频仍加入退出造成的网络颠簸(Churn)会极大增长DHT的维护代价。
DHT仅支持精确关键词匹配查询,无法支持内容/语义等复杂查询
分布式哈希表算法

DHT,Distributed Hash Table,即分布式哈希表,典范的应用场景就是点对点网络(P2P网络)。
全分布式布局化网络中经常采取分布式散列表(DTH)对所有加入节点进行布局规划,把全网维护的路由表和数据,分割成不同的小范围路由和数据块,生存在各个节点中。从而实现整个网络的节点寻址和数据存储。
哈希表是一种能高效进行数据读取/写入的数据布局,通过哈希函数可以将恣意的数据映像到固定长度的随机字符串,由于函数具有单向性与唯一性,因此这个随机字符串可以作为辨识数据的指纹,即Key。读取哈希表的数据(Value),只需提供Key,哈希表即可取得映像到该键值的完整数据。
在布局化P2P网络中,每个节点只存储部分的信息或部分信息的索引。当用户需要在P2P体系中获取信息时,必须知道这些信息(或索引)可以存在于哪些节点中。由于用户预先知道应该搜索哪些节点,避免了非布局化P2P体系中利用的泛洪式查找,因此进步了信息搜索的效率。
DHT经典算法


  • Kademlia算法(二叉树布局)
  • Chord算法(环形布局)
Kademlia算法
所有节点都被当做一颗二叉树的叶子,并且每一个节点的位置都由其ID值的最短前缀唯一的确定
对于恣意一个节点,都可以把这颗二叉树分解为一系列一连的,不包罗自己的子树。最高层的子树,由整棵树不包罗自己的树的另一半组成;下一层子树由剩下部分不包罗自己的一半组成;以此类推,直到分割完整个树。
节点的基本属性:


  • 节点ID,Node ID 160bit
  • 节点IP地址与端标语

异或距离
在Kademlia算法采取简单的异或计算来衡量两节点间的距离,它和地理上的距离没有任何关系,但却具备多少公式的绝大部分特征:

  • 节点和它自己之间的异或距离是0
  • 异或距离是对称的:即从A到B的异或距离与从B到A的异或距离是等同的
  • 异或距离符合三角形不等式:给定三个顶点A B C,假如AC之间的异或距离最大,那么AC之间的异或距离必须小于或等于AB异或距离和BC异或距离之和
  • 对于给定的一个距离,距离A只存在有唯一的一个节点B,也即单向性,在查找路径上也是单向的,这个和地理距离不同。
例如:两个节点间进行异或,计算节点间距离
00110与00011的异或XOR距离为00101,也就是十进制5。即两个节点之间的逻辑距离是5。
路由表和k-Bucket
k-Bucket桶中的k指每个桶中所能容纳的最大节点数。K是一个体系设定参数。桶的节点分别是根据子树分别。k桶的个数跟节点ID的位数有关,假设节点ID的位数为n,则最多有n个k桶。第1个k桶中的节点与本地节点前n-1位ID是相同,第2个k桶中的节点与本地节点前n-2位id是相同,以此类推。
所有k桶合起来假设一个节点的路由表。
以node ID为0011的节点为例,共有4个k桶。第i个k桶中异或距离的范围为

一个具有2的N次方个节点的网络在最坏环境下只需要n步就可以找到被搜索节点或值。在一个包罗n个节点的网络中,kademlia的搜索时间复杂度为O(log(n))。

以node ID 0011为例,查询节点1110的流程
前提:假设0011节点路由表中仅知道1101节点。

  • 首先计算Dis = 0011 XOR 1110节点距离为13
  • 查询本节点路由表中最接近的K桶[3],获取节点1101。然后发送findNode消息。
  • 节点1101收到消息后,计算dis = 1101 XOR 1110距离为3
此时,根据节点1101路由表查询K桶[1]中即可得到目标节点1110。

消息
算法中需要以下消息保证节点的通讯和数据更新


  • PING——验证远程节点是否在线
  • STORE——在某个节点上存储key-value键值对。在节点上存储资源。
  • FIND_NODE——查找节点,给定一个nodeID,被哀求的节点返回与nodeID相近的k个节点
  • FIND_VALUE——查找资源,给定一个Key,被哀求的节点的node id与key相近,并且具有该key,返回与key对应的value。
Kademlia算法通过关键字(节点ID或数据Key)进行精确查询。
备注:利用Kademlia算法既可以查询节点,也可以查询数据。可以把数据进行Hash署名后作为Key值,假如该数据Key值和某节点ID距离较近,则存储在这个节点中。如许发起节点可以通过查询Key值,找到存储节点,从而获取原始数据。
以太坊网络机制

以太坊网络采取全分布式布局化拓扑。采取DHT算法实现网络布局化。
以太坊全节点:包罗区块链的所有核心组件(块、事务、日记和收据)的完整汗青数据集。重要有七大功能:挖矿、区块链数据库、网络路由、钱包、生意业务和智能合约。每个节点都参与验证并传播生意业务及区块信息,发现并维持与对等节点的毗连。(Geth)
轻节点:轻量级的节点,具体定义是不储存或维护完整的区块链副本,只储存区块链header。参与部分数据验证。通常应用于移动设备
归档节点(Archive Node)即在全节点基础之上多储存了每个区块高度的状态(State)快照,供检索相干用途。
节点发现
一个新的以太坊节点,盼望加入到以太坊网络,首先要获取种子节点地址。通过链接种子节点接入以太坊网络。种子节点地址通常都是硬编码方式。(直接写入代码中)
运行以太坊Kademlia的协议栈,与以太坊网络中的其他节点通讯。
Kad算法利用ID或Key作为关键字查询,通过路由表发现目标节点。理论查询时间复杂度为O(logN)
每个节点包罗256个桶,算法中K=16,即每个桶中最多放16个节点
节点每次同时选择3个邻居节点发送Findnode报文。

 
3-1-4 半分布式网络

半分布式聚集全分布非布局化拓扑和集中式拓扑的优点,将两种方式结合并做了均衡。
半分布式P2P网络由少量超等节点和大量普通节点组成。半分布式网络可以看做是由多个以超等节点为中心节点的集中式网络链接而成。
在各个超等节点上存储了体系中其他部分节点的信息,节点发现算法仅在超等节点之间转发,超等节点再将查询哀求转发给适当的叶子节点。
半分布式布局也是一个条理式布局,超等节点之间构成一个高速转发层,超等节点和所负责的普通节点构成多少条理。
应用


  • KaZaa 一种P2P文件共享平台
  • 超等账本

优势

吸取了中心化布局和全分布式非布局化拓扑的优点,选择性能高(处理、存储、带宽等方面性能)的节点作为超等节点(SuperNodes,Hubs),在各个超等节点上存储了体系中其他部分节点的信息。
有效地节省了中央服务器的带宽消耗,减少了体系的文件传输延时,资源发现效率高
泛洪只在超等节点间发生,减少了广播风暴。多个超等节点备份数据,进步网络整体健壮性。
扩展性较好,轻易管理
缺陷

对超等节点依靠性大,轻易受到攻击。
超等账本网络机制

节点范例
超等账本采取半分布式布局化网络拓扑。将节点分为普通用户节点和超等节点(排序、背书节点等)。超等节点可以由普通节点选举,也可以自行设置,单独一个超等节点停机不影响体系运行。
超等账本所有生意业务必须通过超等节点认证,区块也是由超等节点生成,普通节点间可以互相同步区块。
客户端节点
客户端或应用程序代表由最终用户操纵的实体,它必须毗连到某一个Peer节点或者排序服务节点上与区块链网络进行通讯。
CA节点
fabric的证书颁发节点(Certificate Authority),由服务器(fabric-ca-server)和客户端(fabric-ca-client)组成。
背书节点(Endorser Peer)
执行生意业务并对结果进行署名背书
主节点(Leader Peer)
主节点负责和排序服务节点(Orderer)通讯,从排序服务节点处获取最新的区块并在构造内部同步。可以逼迫设置,也可以选举产生。
排序服务节点(Orderer)
接收包罗背书署名的生意业务,对未打包的生意业务进行排序生成区块,广播给Peer节点。
锚节点(Anchor Peer)
构造之间的互通节点,一个构造内的锚节点作为代表负责同其他构造进行信息互换
记账节点(Committer Peer)
负责验证从排序服务节点接收的区块里的生意业务,然后将块提交(写入/追加)到其通道账本的副本。

节点发现

一个新的超等账本节点,盼望加入到超等账本网络,首先要找到构造,通过节点设置文件设置盼望加入的构造。构造内CA提供新节点身份标识
通过设置文件设置主节点。毗连主节点保证接收Orderer节点区块数据
设置设置文件的锚节点。保证可以和其他构造内的节点毗连
创建通道或加入已有通道。通过Gossip广播消息获取通道内节点毗连。

新节点会采取广播方式获取其他节点的地址。利用Gossip协议中的push/pull机制发送广播消息
Gossip协议中push/pull推拉机制的广播方式效率很高,一条广播消息传播到所有节点的时间是:


 
3-1-5 区块链网络选型

区块链分布式网络

P2P网络发展经历了四个阶段:集中式,纯分布式,分布式布局化以及半布局化过程。每一阶段的发展都有其特点,随着硬件和软件技术的发展,P2P网络的技术越来越成熟。
每种P2P网络布局拥有各自的优缺点,针对不同的区块链应用场景、不同的业务需求,P2P网络的利用也不同。

现在市场主流的区块链网络包括:比特币,以太坊和超等账本。区块链网络技术继承自P2P网络技术。

备注:
SHA2包罗SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
SHA3算法也称为Keccak加密算法,包罗SHA3-224、SHA3-256、SHA3-348、SHA3-512
区块链接入效率

区块链网络节点接入方式
比特币
依靠DNS种子节点列表
依靠固定IP种子节点
接入设置方式简单
以太坊
依靠种子节点
接入或设置方式简单
超等账本
加入构造
设置引导节点
接入或设置方式简单
区块链网络节点发现效率
比特币
全分布式网络,节点可以恣意加入或退出
采取Gossip协议实现节点发现
16小时内,可以毗连成功10459个有效节点
备注:节点毗连依靠节点计算能力,内存和存储能力以及网络带宽。


以太坊
全分布式网络,节点可恣意加入或退出
采取DHT的Kademlia协议实现节点发现
每小时,Geth客户端可创建1K-1.5K毗连,毗连300-400个有效节点
备注:节点毗连依靠节点计算能力,内存和存储能力以及网络带宽。
参考


超等账本
半分布式布局
节点发现采取Gossip协议实现
固然没有实际实验数据,但根据节点接入方式,新节点会加入某一通道,通过广播协议获取通道内节点地址。其广播方式仅仅在通道内发送。不同于比特币和以太坊网络在全网发送。由此可推断节点发现效率一定很高。
区块链区块传播效率
比特币
采取Gossip协议实现区块传播
根据下图概率密度分布函数图形。不区分区块巨细,一个新的block平均传播时延时间为12.6秒。即使过了40秒以后,仍然有5%的节点未收到区块
备注:区块传播依靠节点计算能力,内存和存储能力以及网络带宽。
参考:


以太坊
采取以太坊wire协议实现区块传播
下图根据每一个block的传播时延构造的时间累计分布图。一个区块的平均峰值传播时延约为200毫秒。
备注:区块传播依靠节点计算能力,内存和存储能力以及网络带宽。
参考:


超等账本
半分布式布局
节点发现采取Gossip协议实现
固然没有实际实验数据,但根据超等账本规则,主节点会主动从Orderer节点拉取新区块,然后通过广播方式发送到通道内其他节点。其广播方式仅仅在通道内发送。不同于比特币和以太坊网络在全网发送。由此可推断区块传播效率一定很高。从超等账本生意业务TPS来看,也是可以印证其区块传播方式非常高效。
区块链接入安全

由于比特币和以太坊网络采取全分布式网络,因此节点接入和退出随时发生。同时公有区块链网络通常答应任何人加入并让参与者保持匿名,并且无法控制节点接入的权限和规则,由此造成网络被攻击,节点间毗连失败,数据不能完全同步等问题。
日蚀攻击
举例:以太坊网络,节点发现和节点路由利用Kademlia算法实现。

  • 当我们知道目标节点的NodeID之后,就可以通过一定的方式去伪造生成满意不同Bucket的NodeID,当这个目标节点重启之后,马上以这些NodeID启动节点去毗连目标节点,由于Kademlia的特性,这些特意伪造的NodeID肯定会被填入目标节点的路由表中,从而把路由表占满,以达到日蚀攻击的目标(堵截节点之间正常的路由信息)。
  • 怎样让目标节点重启?可以等待目标节点主动重启或者采取DOS攻击迫使目标节点重启。当重启之后马上进行上面的操纵就可以完成日蚀攻击。
  • 当成功发起日蚀攻击之后,随后就能隔离节点,篡改目标节点的收发数据包了。
女巫攻击
举例:比特币网络,节点身份匿名没有身份确认等功能。
女巫攻击指攻击者将一个节点伪装成多个节点进入比特币网络中,在比特币网络中具有多重身份。通过伪造身份进入网络,干扰路由,干扰信息传递,伪造投票等。
DDoS攻击(Distributed Denial of Service)
指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击,使攻击目标无法正常利用。通常的方式有SYN flood,UDP flood,ICMP flood,connect flood等。
区块链网络中的经典攻击方式对比

区块链隐私掩护

比特币
隐私掩护
比特币的隐私策略就是隔离比特币地址和持有者的肉身身份。但是真正做到肉身身份和比特币地址分离黑白常困难的。公众可以看到所有的转账记录,其中包括发送和接收方的比特币地址、转账金额等信息。
比特币生意业务是可追踪的
比特币是最透明的一个付出体系,所有生意业务汗青都会被保存,这种特质给比特币的隐私安全带来了极大的挑战。别的监听者也会观察生意业务过程中的路由信息,从而推算出生意业务节点位置。
综上,比特币的隐私性欠好。
以太坊
隐私掩护
以太坊隐私掩护很弱。用户钱包信息,生意业务地址等,假如不注意防范或者利用加密方式,很轻易通过以太坊公网获取到。通过搜索以太坊域名和钱包地址就很轻易识别个人身份。
生意业务零知识证明
以太坊2.0出现后,采取零知识证明掩护生意业务的私密性。
综上,以太坊网络层隐私掩护雷同比特币,同样非常弱。用户钱包,域名和生意业务IP,访问时间,汗青信息等个人信息得不到很好的掩护。在账本层,以太坊采取零知识证明,保证不泄漏生意业务的环境下完成生意业务。但是该方案仍然有诸多问题,例如计算量大,部分协议需要第三方可信机构等。
超等账本
隐私掩护
用户可通过CA服务提供匿名身份,即每个生意业务的短期证书,满意一次一密,不可伪造、无关联性和可跟踪性。使得用户不但以匿名方式参与到体系中,而且阻止了生意业务之间的关联性。
生意业务掩护
超等账本具有多通道(Multiple-channel)的支持。利用该特性,账本网络中多少成员可以协商构建一个专属通道与外部隔离,通道外的节点无法看到其中的账本和生意业务数据。各个通道之间的账本和账本之间批次隔离,形成了一个个隐私的共识通道,极大地进步了隐私性。
综上,超等账本的个人隐私掩护可以通过CA节点提供匿名身份保证,同时支持通道(Channel)保证只有通道内的成员生意业务和账本可见。对于非通道成员不可见。超等账本的隐私掩护很显着要好于比特币和以太坊网络。
 
3-2 Gossip协议

Gossip协议介绍

人类社会中八卦和谣言是经常出现的社会征象。小道消息可以通过谣言以极快的速度敏捷传播到全体。通过生物学角度,病毒传播也雷同谣言方式,可以通过1对1,1对多或者多对多敏捷传播。
Gossip Protocol在1987年8月由施乐公司帕洛阿尔托研究中心研究员艾伦.德默斯(Alan Demers)发表在ACM的论文《Epidemic Algorithm for Replicated Database Maintenance》中被提出。
Gossip协议模拟谣言或者病毒的传播方式,通过一定的算法,在大型的分布式网络体系中更新数据,保证所有节点的数据同等性。
Gossip算法作为分布式体系重要算法得以广泛运用,有以下几点原因:


  • 算法复杂度简单,轻易实现。现在已有上百种Gossip协议变种
  • 相对于其他算法,Gossip算法通过模拟病毒或者谣言方式,传播速度快
  • 算法稳定,可靠
  • 可摆设在分布式体系,减少或无需集中式管理
  • 一旦产生新的数据,通过种子节点发起传播,经过一段时间,最终所有节点都会收到更新消息。因此Gossip协议是一个最终同等性协议
前提和定义

假定一组节点互相毗连,每个节点和其他节点都可以互通消息。逻辑上为一个完整和独立的分布式体系。
该体系所有节点利用同一时间
每个节点保持三种状态之一


  • 易感状态 susceptible(S):节点处于易感状态,接收新数据更新
  • 感染状态 infected(I):节点由新数据,将要分享数据给其他节点
  • 免疫状态 removed(R):节点已经更新,处于免疫状态或者死亡状态,不再参与传播数据过程
反熵算法 anti-entropy

每一个节点周期性地随机选择其他节点进行互相互换所有数据,经过一段时间后,最终所有节点间的数据保持同等性。通过实验分析反熵算法非常可靠,但是每次节点两两互换自己的所有数据会带来非常大的通讯负担,以是不是特别高效。通常只用于新加入节点的数据初始化。
传谣算法 rumor-mongering

谣言传播过程是消息只包罗最新数据,谣言消息在某个时间点之后会被标志为removed,并且不再被传播。缺点是体系有一定的概率会不同等,通常用于节点间数据增量同步。初始状态所有节点都是“susceptible”易感状态。当一个节点收到新的数据更新,状态转为“谣传者(Hot rumor)”。当节点为“谣传者”时,定期随机选择其他节点进行数据同步。谣传者节点定义同步共享节点个数,仅在定义的节点个数之内发送数据同步。假如同步数据多次后,发现其他节点数据始终同等。则制止同步(散布谣言),并将该节点从“谣传者(Hot rumor)”改为“removed”免疫状态。传谣算法比反熵算法更高效。但会有一定概率节点会数据丢失。
Gossip协议消息

Push消息

发起信息互换的节点A随机选择联系节点B,并向其发送自己的信息,节点B在收到信息后更新比自己新的数据,一般拥有新信息的节点【感染状态infected(I)节点】才会作为发起节点。

Pull消息

发起信息互换的节点A随机选择联系节点B,并从对方获取信息。一般无新信息的节点【易感状态susceptible(S)节点】才会作为发起节点

Push&ull消息

发起信息互换的节点A随机选择联系节点B,同时从对方获取数据,用于更新自己的本地数据。

假如把两个节点数据同步一次定义为一个周期,则在一个周期内,Push需通讯1次,Pull需2次,Push&ull需3次。固然消息数增长了,但从结果来讲,Push&ull最好,理论上一个周期内可以使两个节点完全同等。
3-2-1 Gossip协议算法

Gossip算法1 SI模式(反熵算法)


SI模式中S表示(易感状态susceptible节点)状态,I表示(感染状态infected节点)状态。在SI模式中,节点的最初状态在易感状态(S状态),状态可迁移到感染状态(I状态)。一旦进入感染状态,节点不再改变状态。
第二行表示循环会定时启动,然后随机选择节点
算法利用两个布尔值,push和pull表示发送或接收消息
当push为真时,节点状态是I(infected感染)状态时,发送更新数据到其他节点,可感染其他节点。假如节点状态为S(susceptible易感)状态,则忽略更新发送
假如pull为真时,节点会通过update request拉取新的数据
在OnUpdate过程中,节点会存储更新数据,并且将自己的状态迁移到I(infected感染)状态
在OnUpdateRequest过程中,假如节点为I(infected感染)状态,节点会发送push消息到对方。假如是S(susceptible易感)状态,则什么都不做
算法复杂度(Push消息)


  • 思量一个节点N的分布式体系,只用Push消息更新所有节点数据
  • Pi表示一个节点在第i次传播周期后为易感节点的概率
  • (N-1)/N表示一个节点为感染节点的概率
  • N(1-Pi)感染节点数目
通过以下方程,我们可以推测第i+1次还剩余多少易感节点的概率。

随着易感节点的减少,最终所有节点都会成为感染状态,即所有节点的数据都会被更新。
算法复杂度(Pull消息)


  • 思量一个节点N的分布式体系,利用Pull消息更新所有节点数据
  • Pi表示一个节点在第i次传播周期后为易感节点的概率
通过以下方程,我们可以推测第i+1次还剩余多少易感节点的概率。

随着易感节点的减少,通过Pull消息同步数据同等性更为有效。
比力两个公式

当Pi很大时,即开始传播阶段,利用Push消息可以更快地进行传播,
当Pi很小时,利用Pull消息可以更快地收敛,所有节点数据更快同步。

Gossip算法2 SIR模式(传谣算法)


SIR模式中S表示(易感状态susceptible节点)状态,I表示(感染状态infected节点)状态,R表示(免疫状态removed节点)状态。在SIR模式中,节点的最初状态在易感状态(S状态),状态可迁移到感染状态(I状态)。当感染状态的生命值竣事后,将转为免疫状态,一旦进入免疫状态,节点将不再改变状态。
SIR算法实现目标
定义免疫状态(removed)是为了减少冗余的消息,push和pull消息在整个数据更新后期,会产生越来越多的冗余消息。因为在后期大部分节点已经转变为感染(I infected)节点。已经同步了更新消息,大量更新消息成为冗余,占用了网络流量。以是给节点定义一个生命值,当超过生命值以后,节点迁移到免疫状态(removed),制止发送push或pull消息。
简化协议模型,更好的分析和优化没有感染的节点原因
SIR算法和SI算法的区别在于节点可迁移到免疫状态(removed)。在OnFeedBack过程中,当概率达到1/K时,状态迁移到R(removed)。减少整个体系重发update消息带来的冗余
OnUpdate过程中,当节点收到update消息时,假如节点状态处于I或者R时,发送feedback消息。
OnUpdateRequest过程和算法1 SI算法一样,只有节点处于感染状态(infected)时才发送update消息。
SIR算法中,易感节点(susceptible)和R(removed)状态节点理论上为0,最终所有节点成为感染节点I。
第13行中的概率1/K定义节点迁移到免疫(removed)状态的概率。通过实验分析
当K=1,20%的节点会丢掉update消息,制止传播
当K=5,0.24%的节点会丢掉update消息,制止传播
当K=10,0.00017%的节点会丢掉update消息,制止传播
例如,可假设K=5,节点每次在OnUpdate过程中对K值加1,当K值等于5的时间,节点状态迁移到R(removed)免疫状态。此时节点会丢掉Update消息,不再进行传播。整个体系中会有0.24%的节点制止传播Update消息。

R节点不再参与传播消息
 
3-2-2 以太坊传播协议(以太坊Gossip协议)

以太坊P2P网络

以太坊P2P传播协议并没有采取经典的Gossip协议算法实现。而是在P2P网络中分为两类协议实现消息传播和数据同步机制。在Ethereum(以太层),采取Ethereum Wire Protocol实现生意业务数据和区块数据的传播。节点之间通过Node Discovery Protocol实现节点发现和节点同步机制。
以太坊节点发现协议并未依照经典Gossip协议算法实现,但是以太坊P2P传播协议原理雷同经典Gossip协议算法。
以太坊P2P网络分层

Application Layer 应用层
包罗以太坊上层,Dapp,智能合约,假造机,区块链管理,共识机制,矿工,账户管理,生意业务管理等。应用层通讯需要利用以太层支持
Ethereum Layer 以太层
重要包罗Transactions Exchange和BlockPropagation区块传播模块。
节点间通讯利用Ethereum Wire(以太线)协议,以太线协议负责生意业务Transaction和区块的数据同步和传播。
RLPx协议负责封装以太层协议消息。以太层利用TCP毗连
P2P层
以太坊节点之间通过发现协议(Node Discovery Protocol),利用Kademlia算法(DTH分布式哈希表的算法实现)发现新增节点,保持节点间毗连等功能。NDP协议利用UDP报文毗连

RLPx协议介绍

RLPx协议是基于TCP的传输协议,用于以太坊节点之间的安全加密通讯。
RLPx利用了ECIES(Elliptic Curve Integrated Encryption Scheme)椭圆曲线加密技术,通讯两边生成随机公私钥对,互换各自的公钥,利用自己的随机私钥和对方的公钥生成共享密钥(shared-scret)。后续利用这个共享密钥对称加密传输的数据,即使一方的私钥被泄漏,过去的通讯还是安全的。
在RLPx中,每个节点(Node)维护一个私有密钥(基于secp256k1椭圆曲线算法),用来加密或恢复数据。
节点间创建毗连之前首先要经过握手流程,经过握手流程生成共享密钥(shared-scret)
握手后所有的消息都按帧(frame)传输。一帧数据携带属于某一功能的一条加密消息。分帧传输的重要目标是在单一毗连上实现可靠的支持多路复用协议。即单一毗连通道中创建多个会话(session)逻辑毗连,雷同TCP通道。通过握手生成的密钥对数据帧进行加密和验证。
Hello消息携带节点的能力(Capabilities),即节点能够支持的功能
Disconnect消息,关照节点断开毗连。收到该消息后,节点应当立即断开毗连。

节点发现协议(Node Discovery Protocol)

节点发现协议采取Kademlia算法。Kademlia算法在2002年由美国纽约大学的Petar P. Maymounkov 和 David Mazières提出,是一种去中心化的P2P通讯算法。 Kademlia算法在节点之间利用UDP进行通讯,节点利用分布式散列表(DTH,Distributed Hash Table)存储数据。
Kademlia算法通过独特的以异或算法(XOR)为距离度量基础,创建了一种全新的DHT拓扑布局,相比其他算法,进步了路由查询速度。
本课程介绍的是协议版本是v4。
Kademlia算法原理详细介绍在《P2P网络-全分布式布局化网络》
核心概念
NodeIdentities

Node Records

Kademlia Table

节点发现协议利用4个消息发现和连通节点 NDPV4


  • Ping报文
        测试一个节点是否在线


  • Pong报文
        Ping报文应答消息


  • FindNode报文
        根据节点Node ID查找迩来节点


  • Neighbors报文
        FindNode应答报文
两个节点记录通讯报文


  • ENRRequest报文
        收到此报文后,节点必须发送ENRResponse作为应答,并携带node record


  • ENRResponse报文
节点发现协议流程



  • 每个节点之间利用ping/pong报文监测邻居节点是否正常
  • 查找路由表,迩来的邻居节点
  • 发送Findnode报文
  • 邻居节点收到报文后,在路由表中没有找到N,则把自己的距离迩来的16个节点发送给节点A
  • 节点A收到邻居节点bucket,更新自己的路由表
  • 不停重复查找过程
  • 找到节点N,并取出IP地址和端标语
  • 节点A利用ping/pong报文和节点N创建毗连
           
区块传播算法

以太协议(Ethereum Wire Protocol)
发起节点首先发送Status消息和目标节点创建会话,在会话期,以太协议重要完成三个功能:


  • 键同步
以太坊中的节点获取完整区块链,从创世区块到当前最新区块。


  • 区块传播
挖矿产生的新区块传播给所有节点


  • 生意业务传播
所有节点需要互换正在处理的生意业务数据,然后广播给矿工,矿工最后将生意业务写入区块中
新区块传播流程


  • 区块广播分为两类广播
完整区块广播,选择部分节点广播,减少网络流量。
区块Hash广播,选择所有未包罗新区块节点


  • 广播消息

  • NewBlock消息广播完整新区块
  • NowBlockHash消息广播区块Hash


  • 每个节点并行处理区块广播消息。原理上和Gossip协议中Push/Pull机制雷同。


3-2-3 超等账本Gossip协议

Gossip协议核心功能

Gossip数据传播协议在Fabric网络中起到重要作用。节点利用Gossip广播账本,通道数据等。通道中的一个或多个节点可以一连接收账本数据。这些账本数据来自于通道内其他节点。
每一个Gossip消息都是经过署名的消息,防止参与者发送伪造消息。
在超等账本网络中,Gossip数据传播协议的三个重要功能是:


  • 发现节点和通道成员。标识可用的节点和通道成员,监测下线或不可用的节点和通道成员。
  • 在通道中,把账本数据传播到所有节点。某些节点中假如有丢失的区块或者未同步的区块,Gossip利用反熵算法进行数据同步和更新,最终使通道中所有节点的账本数据保持同等。
  • 通过点对点传输协议,使得新毗连的节点更快地进行账本数据更新。
备注:关于安全,点对点之间传输安全性由节点TLS层保证。节点之间认证在Gossip协议层。账本区块由Orderer节点署名。
Gossip协议在Fabric网络中的几个核心场景应用
Leader election
主节点选举机制。每个构造需要选举出主节点,和Orderer节点通讯,传播新生产的区块到其他节点。
Anchor peer
锚节点是不同构造之间互通的桥梁。同一个通道内的节点可能属于不同构造,恣意两个节点之间的对话首先要经过锚节点对接后,才气互相共享信息。
节点和锚节点对话采取Gossip协议
服务发现,私有数据和区块广播
超等账本中的Gossip协议支撑服务发现,私有数据传输和区块广播
Fabric中Gossip协议消息

pull消息
Gossip协议中Pull消息可以让节点主动拉取更新数据
Fabric中的Gossip Pull消息利用4个消息完成节点间pull消息机制
Fabric中的Gossip Pull机制单独定义Mediator调解人接口,封装pull机制和hello,SendDigest,SendReq和SendRes消息。方便Channel通道,chaincode链码等服务定时发送消息



push消息
在Fabric中push消息封装在batchingEmitter接口中。所有push消息首先Add到一个队列中,再由协程定时发送
batchingEmitter通过底层communication层调用writeToStream和readFromStream,将发送/接收的消息封装成gRPC stream格式,并发送到相应节点。Stream适合大数据量传送,同时满意节点间长时间的数据交互





Fabric中Gossip协议中的一些参数定义

Fabric中缺省定义Gossip协议中需要的设置参数
MaxBlockCountToStore定义为push/pull消息缓存数目
PropagateIterations定义为当节点收到消息,几次后即放弃不再担当。Fabric中缺省为1次。在Gossip协议课程中提到过可以利用K值控制消息重发/重收次数,在Fabric中K值为PropagateIterations。设置为1目标是减少占用网络带宽。
PropagatePeerNum/PullPeerNum是随机选择节点个数。在Gossip协议中节点push/pull时,会随机选择一定数目节点。Fabric中缺省定义了这个随机值

Fabric中与Gossip协议相干核心概念

前提
本课程中的核心概念仅引入与Gossip协议相干的概念。包括


  • Peer 节点
  • Ledger 账本
  • Channel 通道
  • Organization 构造
  • Ordering Service 排序节点
Peer 节点
Fabric网络中最重要的组成部分是由peers节点组成
节点中包罗最重要的信息(账本和智能合约)
每一个节点可包罗多份账本拷贝和多份智能合约拷贝
Peer节点可以被创建,激活,制止,重新设置或者删除
Leader Peer 主节点
每一个构造中的主节点,负责和Orderer节点进行通讯,获取区块文件。Orderer节点生成新的区块文件后,为减少网络流量,不会发给所有peer节点,而是发送给构造内的主节点,再由主节点发给构造内的其他节点。
Anchor Peer 锚节点
构造之间的互通节点,一个构造内锚节点作为代表负责同其他构造进行信息互换。为了Gossip协议能够正常工作,在通道设置中至少有一个Anchor peer锚节点

通道中的节点接收其他节点消息,随机选择一定数目(可在设置文件中设置)的目标节点转发这些消息。
节点除了被动接收Push消息之外,也可利用Gossip协议中的Pull消息机制主动拉取消息
对于新的block区块数据,通道中的Leader peer主节点会利用Pull从Orderer节点拉取,再利用Gossip的传谣算法更新到通道中其他节点。
Ledger 账本
账本信息包罗生意业务记录和当前的状态,不可篡改。
账本布局包罗两个独立部分:
world state - 存储当前账本状态值的数据库
blockchain区块链 - 事务日记,记录了所有生意业务记录变革的账本
所有事务生意业务和变革都会被追加到区块链日记中,最终根据汗青生意业务变革可以推导出当前账本状态值。以是可以说Blockchain区块链决定了world state。
单独在数据库中存放world state非常有用,因为体系会经常访问账本的当前状态值。假如从区块链遍历并计算汗青生意业务,并推导出当前状态,显然是效率很低的操纵。
账本区块生成后,会发送给Orderer节点进行排序,通道中的Leader peer利用pull机制拉取新的区块,然后广播给通道中的其他节点

Channel 通道
通道雷同网络中“subnet”子网概念,在Fabric网络中创建相互隔离的数据共享渠道。
一个通道绑定构造,成员节点,账本和智能合约以及Order Service等,一起构成了完整,可信的区块链事务生意业务。
节点只有加入指定的通道中才气和通道中其他节点互相共享账本。和消息队列(Message Queue)中主体(Topic)概念雷同。只有加入到Topic中的成员才气访问该主题中的消息
通道创建,释放和通道中成员变革等信息,Fabric利用Gossip协议中的push消息进行传播,关照通道中的所有成员。

Fabric Samples中Gossip节点设置

在超等账本自带的演示网络First Network中,包罗Gossip节点设置内容



 
3-3 联盟链网络

3-3-1 联盟链网络身份认证

什么是联盟链?

联盟链是由多个构造管理的多个私有链的集群组成的区块链。每个构造管理一个或多个节点,其数据只答应体系内不同构造进行读写和发送。
联盟链的每个节点通常都有一个与之对应的实体机构构造,只有通过授权才气加入和退出网络。每个机构构造形成长处相干者联盟,以维护区块链的康健运行。
联盟链的特点


  • 部分去中心化
  • 更可控
  • 数据默认不公开
  • 生意业务速度快

联盟链的另一种定义?

指多个主体达成一定的协议,或创建了一个业务联盟后,多方共同组建的链,加入链的成员需要经过验证,一般是身份可知的。正因为有准入机制,以是也通常被称为“许可链”。
因为许可链从组建、加入、运营、生意业务等环节有准入和身份管理,在链上的操纵可以用权限进行管控,共识方面一般采取PBFT等基于多方多轮验证投票的共识机制,网络规模相对可控,在生意业务时延性、事务同等性和确定性、并发和容量方面都可以进行大幅的优化。
许可链的问题


  • 安全性问题
  • 治理与监管复杂

什么是身份认证?

一个检查个人是否是他们所说的人的过程。例如围绕基于知识的身份认证会提出一些动态问题,这对于另一个人来说很难回答。因为身份认证机构需要生存用于认证的问题,以是中心化的认证机构在所难免。
传统的身份认证有下列几种方法:
基于暗码的身份验证
暗码是一种非常常见且广为人知的身份验证做法。然而,现在利用暗码验证变得越来越困难,因为用户必须想出大量不同的暗码
生物特征验证
此身份验证过程依靠于个人的原始生物学特征来验证其身份。网络用户的生物特征数据,然后生存在数据库中。生物特征数据的重要优势之一是用户不会丢失或忘记它
多因素身份验证
多因素身份验证需要两种或多种不相干的方式来识别用户。例如,验证码测试、语音生物识别、从用户智能手机创建的代码、指纹或面部识别
数字身份是个人身份在数字天下的投影,因此首先需要一段数字信息标识一个数字身份,最常见的方式是利用用户名。但是用户名与以上身份验证的信息相似,都需要生存在中心化的认证机构,以是并不适实用于部分去中心化的联盟链应用。
区块链数字身份标识

区块链中,可采取公钥、地址(公钥哈希)、数字证书等方式来标识链上参与者的数字身份,具体对比如下表所示:
标识方法标识长度外部依靠附加信息数字证书大依靠CA颁发数字证书可在证书字段中附加构造、脚色等额外信息公钥中无不能附加额外信息地址小无不能附加额外信息分布式数字身份(DID)小依靠DID支撑平台不能附加额外信息 附加信息在这里尤为重要,是因为认证的目标是为了获得对应的许可权限,对于可以存储附加信息的标识则可以不通过额外的存储生存许可信息,从而低落体系的复杂度。
数组地址认证概述

公有链利用账户来标识和区分每一个独立的用户。在采取公私钥体系的区块链体系里,每一个账户对应着一对公钥和私钥。其中,由公钥经哈希等安全的单向性算法计算后得到地址字符串被用作该账户的账户名,即账户地址,为了与智能合约的地址相区别,账户地址也常被称作外部账户地址。而仅有用户知晓的私钥对应着传统认证模式中的暗码。用户需要通过安全的暗码学协议证明其知道对应账户的私钥,来声明其对于该账户的所有权,以及进行敏感的账户操纵。
因为账户地址不包罗额外的信息,以是账户的许可权限信息需要生存在链下存储体系中。

账户的创建和存储

以太坊的账户可利用OpenSSL生成ECDSA椭圆曲线公私钥
区块链平台会提供账户创建脚本
也可利用Java SDK创建账户
用户可以根据需求选择将账户私钥存储为PEM或者PKCS12格式的文件。其中,PEM格式利用明文存储私钥,而PKCS12利用用户提供的口令加密存储私钥
Java SDK支持通过私钥字符串或者文件加载,以是账户的私钥可以存储在数据库或者本地文件

账户的读取

区块链平台会提供脚本以在启动时加载私钥存储文件
也可利用Java SDK加载私钥文件

账户的利用

当一个账户发起生意业务(也叫发出消息)时,需要利用自己的私钥对生意业务进行数字署名,图中是账户A利用数字署名向共识节点传输生意业务数据的过程
首先,生意业务内容经过单向散列函数的处理得到一份生意业务内容的摘要。其中,生意业务内容和生意业务的摘要具有很强的对应关系,只要生意业务内容发生改动,经过单向散列函数处理后得到的摘要都会不一样。
账户A利用自己的私钥对摘要进行加密,得到加密的摘要。
账户A把生意业务、加密的摘要和公钥一起发给共识节点。
共识节点收到A传过来的信息后,首先将其中的内容也采取第一步一样的单向散列函数处理得出一份摘要,然后利用A的公钥对收到的加密的摘要进行解密得到另一份摘要。
把上一步得到的两份摘要进行比力,假如两份摘要相称,说明生意业务经过账户A署名之后,在传输过程中没有被更改,同时也验证了此生意业务就是由账户A发起的,完成了对A的身份验证。

数组公钥认证概述

因为联盟链是私有链的集群,而对于私有链来说最简单的办法就是将身份相干信息经过暗码学处理后上链生存。因此这里的数字公钥认证与上一节数字地址认证的区别并不但指身份标识为公钥:


  • 利用地址是因为身份信息无法上链,也就无法可信地将简短的身份唯一标识与账户公钥绑定。因此利用公钥计算得出的唯一地址作为身份标识,既方便记忆,又减少了区块链上存储此身份相干生意业务的数据巨细,还可通过数字署名进行认证;
  • 假如可将身份信息上链生存,只要在区块链上记录数字身份与某一ID体系的对应关系,则可在链上利用较短的身份ID记录此身份相干生意业务数据,比如脚色、权限等。
本节讨论利用公钥作为数字身份上链的认证方法,重要以长安链(ChainMaker)作为研究对象。下图为长安链弱权限控制场景,因为此场景对普通用户没有准入限制,以是普通用户的认证同上一节数字地址认证完全相同,即也属于匿名公钥认证。

ChainMaker弱权限控制场景
一条链上有多个链管理员,在创世块中定义链管理员。共识节点是由共识算法和创世块中共识算法设置决定的。其他用户可以自由参与发生意业务,同步数据等链上活动。
数组公钥认证方法

下图为长安链强权限控制场景。
由于公钥无法承载用户或节点的构造信息以及脚色信息,因此需要把这些信息存到链上,并跟节点或者用户的公钥绑定。实现此公钥绑定管理的体系合约需要构造的管理员署名,从而将该构造下的用户或节点的公钥的绑定信息存储至链上。而构造管理员是启动区块链时,默认注册到链上的。别的,共识节点的构造和脚色信息,也是通过在链设置中默认注册的。
当一个用户发起生意业务时,需要利用自己的私钥对生意业务进行数字署名。此处与上一节数字地址认证中对生意业务进行署名的方法相似。唯一不同的是署名后生意业务数据中可以不含用户公钥而以用户的身份ID代替,因为共识节点可通过区块链上的用户公钥绑定信息查找到此身份ID对应的公钥,从而完成验签即用户的认证过程,继而通过链上绑定信息进行鉴权。
而节点之间也可通过相同的数字署名过程进行身份认证,以确保联盟链上的节点身份的合法性。

ChainMaker强权限控制场景
一条链由多个构造构成,每个构造下拥有一个或多个区块链节点和用户。每个构造在创世块中定义构造的管理员公钥和构造的共识节点列表。其他用户需要通过合法的生意业务注册身份才气成为链上的合法用户。
数字证书认证概述

数字证书与数字公钥的最大区别,就是其包罗与证书持有者相干的属性。最常见的证书范例是符合X.509标准的证书,它答应在其布局中编码一些用于身份识别的信息。别的,公钥私钥对可以自己生成,证书却需要别人的署名来背书,一般把给别人签发证书的权威机构称为证书颁发机构。对于每个加入区块链网络中的节点和用户,需在加入前获得经此区块链认可的证书颁发机构颁发的数字证书。
而数字证书认证与数字公钥认证最大的不同是不需要将每个参与者的证书都上链生存,而是通过数字证书的信任链,利用生存在区块链上的上级证书进行认证。而利用证书代替数字署名中的公钥认证通过后,可以直接读取封装在数字证书中的身份信息。

封装在数字证书中的身份

区块链网络中的不同参与者包括节点、客户端应用程序、管理员等。每一个参与者(网络内部或外部能够利用服务的活动元素)在基于数字证书认证的联盟链中,都具有封装在X.509数字证书中的数字身份。这些身份确定了对资源的确切权限以及对参与者在区块链网络中拥有的信息的访问权限。
别的,证书中的数字身份还具有用于确定权限的一些其他属性,并且它为身份和关联属性的并集提供了特别名称——主体(Principle)。主体就像userID或groupID,但更灵活一点,因为它们可以包罗参与者的身份的各种属性,例如参与者的构造,构造单元,脚色乃至是参与者的特定身份。当我们谈论主体时,它们是决定其链上资源权限的属性。

如概述中所述,要使身份可以被验证,它必须来自可信任的颁发机构。颁发机构是否能被信任,是由对应的联盟链定义的权威机构决定的。
对于HyperLedger Fabric,成员服务提供者(Membership Service Provider, MSP)是可以信任的权威机构,具体地说,一个MSP是Fabric中定义管理构造有效身份规则的组件。Fabric中默认的MSP实现利用X.509证书作为身份,采取传统的公钥基础布局(Public Key Infrastructure, PKI)分层模型。后面将在证书体系中对PKI相干知识进行详细的介绍。
下面举一个简单的场景来解释Fabric中身份的利用:
想像你去超市购买一些杂货。在结账时,你会看到一个标志,表明只担当付出宝和银联卡。假如你尝试利用其他付款方式(比如“VISA卡”)无论该种付款方式是否真实可行、或你的账户中是否有足够的资金,都可有可无,它不会被担当。
拥有有效的银行卡或数字付出账户是不敷的,它必须被市肆担当!PKI和MSP以相同的方式协同工作,PKI提供身份列表,MSP决定哪些是参与网络的给定构造的成员。
PKI就像一个银行卡或手机付出提供商,它分配了许多不同范例的可验证身份。另一方面,MSP雷同于市肆担当的支持的付出方式列表,确定哪些身份是市肆付出网络的可信成员(参与者)。MSP将可验证的身份转变为区块链网络的成员。

区块链用户身份标识总结

标识方法标识长度外部依靠附加信息应用实例认证方式数字证书大依靠CA颁发数字证书可在证书字段中附加构造、脚色等额外信息联盟链(HyperLedger Fabric,R3 Corda)证书中已含足够信息,利用链上存储的根证书对用户证书认证公钥中无不能附加额外信息联盟链(chainMaker) 弱权限模式下同地址标识认证;
强权限模式下构造管理员公钥存入创世块;公钥标识对应的构造、脚色、权限等信息上链存储
地址小无不能附加额外信息 联盟链(Enterprise Ethereum Alliance,FISCO BCOS)
公有链(Ethereum)
对账户发起的生意业务进行数字署名,从而认证其身份;账户对应的构造、脚色、权限等信息可链下存储分布式数字身份(DID)小依靠DID支撑平台不能附加额外信息  
3-3-2 联盟链网络证书体系


上一章我们介绍了联盟链身份认证方式按照身份标识分类可分为地址认证、公钥认证和证书认证,上表总结了这些认证方式的异同点。因为联盟链重要针对某一领域的互助构造,因此对外部体系的依靠反而标识重要缺陷,而认证方法的安全性和可控性成为主流联盟链的重要思量因素。何况安全的数据传输需要依靠安全传输层协议(TLS),此协议也依靠于数字证书体系,因此大多数联盟链都支持或必须利用数字证书作为认证方式。
数字证书定义

数字证书是一种文件或电子暗码,它通过利用暗码学和公钥基础办法(PKI)来证明设备、服务器或用户的真实性。
数字证书身份验证可帮助构造确保只有受信任的设备和用户才气毗连到他们的网络。数字证书的另一个常见用途是向Web欣赏器确认网站的真实性,这也称为安全套接字协议(SSL)证书。
数字证书包罗可识别信息,例如用户名、公司或部门以及设备的Internet协议(IP)地址或序列号。数字证书包罗来自证书持有者的公钥副本,需要与相应的私钥匹配以验证其真实性。公钥证书由证书颁发机构(CA)颁发,证书颁发机构签订证书以验证哀求设备或用户的身份。
以下是三种不同范例的公钥证书:
传输层安全(TLS/SSL)证书
TLS/SSL证书位于服务器(例如应用程序、邮件或Web服务器)上,以确保与其客户端的通讯是私密和加密的。该证书为服务器向客户端发送和接收加密消息提供身份验证。TLS/SSL证书的存在由同一资源定位符(URL)或Web地址开头的超文本传输协议安全(HTTPS)名称表示
代码署名证书
代码署名证书用于确认通过Internet下载的软件或文件的真实性。开发者或发布者签订该软件以确认它对下载它的用户来说是正版的。这对于在第三方站点上提供其程序下载并需要证明文件未被篡改的软件提供商很有用
客户端证书
客户端证书是一种数字ID,用于一个用户或机器识别另一个用户,或从一台机器识别另一台机器。一个常见的例子是电子邮件,其中发件人对通讯进行数字署名,其署名由收件人验证。客户端证书也可用于帮助用户访问受掩护的数据库。
数字证书和数字署名

数字证书
数字证书是由认证中心颁发的包罗证书持有者的身份信息、公开密钥信息等信息的一段数据凭证。
数字证书是公钥基础办法(PKI)中的一个关键元素,PKI定义了利用数字证书进行身份认证的方法。
数字证书中包罗发行者对这份身份文件的数字署名,但不含发行者的公钥,而是包罗持有者的公钥。
数字署名
数字署名是基于非对称密钥加密技术与数字摘要技术的应用,是一个包罗电子文件信息以及签发者身份,并能够鉴别发送信息是否被篡改的一段数据。
数字署名是公钥基础办法(PKI)中的一个关键元素,数字署名方法并没有规定怎样鉴别签发者的公钥,因此可以通过伪造公钥进而通过伪造署名发送虚伪的信息。
可见,数字署名只能保证当前的消息是由对应的公钥相干的私钥签发的,因此假如用公钥或地址(公钥哈希值)标识数字身份,那么是没问题的。但一旦我们需要将数字身份与更多的身份信息绑定,那么通过将数字身份公钥和此身份信息通过数字证书一起发送,则可以避免伪造数字身份公钥的问题。
当联盟链由多个构造管理,每个链上成员的身份一定要求具有所属构造信息,因此利用数字证书可以安全高效地标识联盟链网络中的参与者(用户、节点等)。
别的数字证书提供了信任链模型,借助不同范例的信任模型,联盟链的授权中心可以很灵活地实现细粒度的权限管理。
什么是PKI?

公钥基础办法(PKI)是一组互联网技术,可在网络中提供安全通讯。比如我们常用的HTTPS协议,其中S代表安全,这里的安全就是由PKI提供的,假如你在网页欣赏器上学习这个视频,你可能正利用PKI来确保它来自一个认证过的网址。

公钥基础办法(PKI)的构成元素:PKI由向各方(例如,服务的用户,服务提供者)发布数字证书的证书授权中心组成,然后利用这些数字证书在与其互换消息的环境中对消息发布方进行身份验证。CA的证书取消列表(CRL)构成不再有效的证书的参考。证书的取消可能由于多种原因而发生。例如,因为与证书相干联的加密私有材料已被公开,以是证书可能被取消。
PKI关键要素

固然联盟链网络不但仅是一个通讯网络,但它依靠于PKI标准来确保各个网络参与者之间的安全通讯,并确保在区块链上发布的消息得到适当的认证。
PKI有四个关键要素:


  • 数字证书
  • 公钥和私钥
  • 证书授权中心
  • 证书取消列表
对应的,一个典范、完整、有效的PKI应用体系至少应该具有以下部分:


  • 注册机构(RA)——负责担当用户的申请,稽核用户的真实身份
  • 认证中心(CA)——数字证书的签发机关,CA必须具备权威性
  • 证书资料库——存储已经签发的数字证书和公钥,以及相干证书目录,便于用户获取
  • 证书取消体系——在有效期内吊销的证书列表,在线证书状态协议OCSP是获得证书状态的国际协议
  • 密钥备份及恢复——为避免因用户丢失解密密钥而无法解密合法数据的环境,PKI提供备份与恢复密钥的机制。
下面对PKI的关键要素逐一详细形貌。
数字证书

在概述部分我们已经对数字证书做了一个概括,对于联盟链来言,数字证书是包罗与证书持有者相干的属性的文档。最常见的证书范例符合X.509标准的证书,它答应在其布局中编码一些用于身份识别的信息。
例如,浙江杭州的蚂蚁集团的蚂蚁链部门的马毅可能有一个带有SUBJECT属性为C=CN,ST=Zhejiang,L=Hangzhou,OU=Yi Ma + OU = Ant Group,CN = yi.ma@antchain.com的数字证书,如下图黄色高亮部分。马毅的证书雷同于他的身份证(提供了马毅的信息),可以用来证明关于他的重要事实。最重要的是,马毅的公钥是他的证书中分发的,而他的私人署名密钥则不是。此署名密钥必须保密。
马毅的所有属性都可以利用称为暗码学的数学技术进行记录,如许篡改将使证书无效。只要对方信任证书颁发者,即证书授权中心(CA),暗码学就答应马毅将证书提交给其他人以证明其身份。只要CA安全地生存某些加密信息(CA的私钥),任何阅读证书的人都可以确定有关马毅的信息没有被篡改,它将始终具有马毅的特定属性。将马毅的X.509证书视为无法改变的数字身份证。

公钥、私钥和数字署名

身份验证和消息完整性是安全通讯中的重要概念。身份验证要求确保互换消息的各方创建特定消息的身份。对于具有“完整性”的消息意味着在其传输期间不能被修改。例如,你可能盼望确保与真正的马毅而不是模拟者进行沟通。或者,假如马毅向你发送了一条消息,你可能盼望确保其在传输过程中没有被其他任何人篡改过。
传统的身份验证机制依靠于数字署名,顾名思义,它答应一方对其消息进行数字署名。数字署名还可以保证署名消息的完整性。
从技术上讲,数字署名机制要求署名方生存两个加密毗连的密钥:广泛可用的以充当授权锚的公钥,以及用于在消息上产生数字署名的私钥。数字署名消息的接收者可以通过检查附加署名在预期发送者的公钥下是否有效来验证接收消息的来源和完整性。
私钥和公钥的唯一关系是保证安全通讯的保证。密钥之间唯一的数学关系使得私钥在消息上的署名,只有对应公钥在相同的消息上才可以与之匹配。
在下面示例中,马毅利用他的私钥对邮件进行署名。任何利用他的公钥检察署名消息的人都可以验证署名。

证书授权中心

联盟链上的职员或节点能够通过由体系信任的机构为其发布的数字身份参与联盟链网络。在最常见的环境下,数字身份(或简称身份)的形式为,符合X.509标准并由证书授权中心(CA)颁发的经过加密验证的数字证书。
CA是互联网安全协议的常见部分,你可能已经听说过一些比力流行的CA:Symantec(最初是Verisign),GeoTrust,DigCert,GoDaddy和Comodo等。
证书授权中心向不同的参与者颁发证书。这些证书由CA进行署名,并将参与者的公钥绑定在一起(并且可选是否具有全部属性列表)。因此,假如一个成员信任CA(并且知道其公钥),则可以信任与参与者绑定的证书中包罗的公钥,并且通过验证参与者证书上的CA署名来获取所包罗的属性。
证书可以广泛传播,因为它们既不包括参与者也不包括CA的私钥。因此,它们可以用作信任的锚,用于验证来自不同参与者的消息。
CA也有一个证书,它们可以广泛利用。这就可以让给定CA获取身份证书的消费者验证自己的身份,因为只有对应的私钥才可以生成该证书。
在区块链设置中,盼望与网络交互的每个参与者都需要一个身份。在此设置中,你可能会说利用一个或多个CA从数字角度定义了构造的成员。CA是为构造的参与者提供可验证的数字身份的基础。

根CA,中间CA和信任链

CA有两种形式:根CA和中间CA。因为根CA(Symantec,GeoTrust等)必须安全地向互联网用户颁发数亿个证书,以是将这个过程分散到所谓的中间CA中是很有用的。这些中间CA具有由根CA或其他中间CA颁发的证书,答应为链中的任何CA颁发的任何证书创建“信任链”。追溯到根CA的能力不但让CA的功能在仍然提供安全性的同时进行扩展(答应利用证书的构造布满信心地利用中间CA),还限制了根CA的暴露,假如根CA受到侵害,将会危及整个信任链。另一方面,假如中间CA受到侵害,则曝光量会小得多。
只要每个中间CA的证书的颁发CA是根CA自己或具有对根CA的信任链,就在根CA和一组中间CA之间创建信任链。
中间CA在跨多个构造颁发证书时提供了巨大的灵活性,这在联盟链体系(如Fabric)中非常有用。例如,你将看到不同的构造可能利用不同的根CA,或者利用具有不同中间CA的相同根CA,这取决于网络的需求。

信任链中的证书的布局

上图中的信任链中的每个证书的布局是怎样的呢,信任是怎样传递下去的?
假如要验证绿色成员的终端实体证书,那么发现其签发者名称为ICA3,通过某种方式找到此中间CA证书,假如当前验证者信任ICA3的证书,则提取ICA3公钥就可验证绿色成员的终端证书;
假如不信任ICA3的证书,则可发现其签发者名称为ICA2,通过某种方式找到此中间CA证书,假如当前验证者信任ICA2的证书,则提取ICA2公钥就可验证ICA3的证书,从而信任ICA3证书,然后通过上一步步调验证绿色成员的终端证书;
假如不信任ICA2的证书……
以是验证者至少要信任此信任链中的某一级CA证书,则可以完成绿色成员终端证书的验证。

证书取消列表

证书取消列表(Certificate Revocation List, CRL)很轻易理解,它是CA知道由于某些原因而被取消的证书的引用列表。
当第三方想要验证另一方的身份时,它首先检查颁发CA的CRL以确保证书尚未被取消。验证者不是必须要检查CRL,但假如不检查,则他们冒着担当无效身份的风险。
利用CRL检查证书是否仍然有效。假如模拟者试图将无效的数字证书传递给验证者,则可以首先检查颁发证书的CA的CRL,以确保其未被列为无效。
注意,被取消的证书与证书过期非常不同。取消的证书尚未过期,假如不做CRL检查,它们是完全有效的证书。

Fabric证书签发认证机制概述

HyperLedger Fabric是最著名的开源通用模块化联盟链平台。下面我们用Fabric的证书签发认证机制作为例子,形貌一个PKI体系是怎样工作的。
Fabric提供了一个内置的CA组件,答应在你的区块链网络中创建CA。此组件称为Fabric CA,是一个私有CA提供者实现,能够管理具有X.509证书形式的Fabric参与者的数字身份。由于Fabric CA是针对Fabric的CA需求的自定义CA实现,因此它无法为欣赏器提供SSL证书。但是,由于Fabric必须利用某种CA实现用于管理身份(即使在测试环境中),因此可以利用Fabric CA来提供和管理证书。
因为Fabric不是由公有链发展而来,因此其中有许多专有的名称或单一,下面的形貌会努力利用之前通用的名称对其标注。如下图中的Peer是Fabric对同步节点或称见证节点的称呼。他们存储了账本和智能合约,并负责验证生意业务和同步账本。而下文中的Fabric排序节点也相当于之前提到的共识节点。

Fabric成员服务提供者(MSP)

在数字证书身份认证章节中,我们提到因为联盟链是一个认证性的网络,利用区块链参与者需要一种向网络中的其他参与者证实自己身份的机制从而在网络中进行生意业务。上一节展示了公钥基础布局怎样通过信任链提供可认证的身份信息。那么区块链网络是怎么应用信任链的?
证书机构通过生成可以用来证实身份的由公钥和私钥形成的键值对来发放认证信息。因为一个私钥永世不会被公开,以是引入了一种可以证实身份的机制即MSP。例如,一个peer节点用它的私钥进行数字署名或背书生意业务。接着排序节点(共识节点)包罗的该peer节点的公钥会被用来验证生意业务携带的署名是否合法。私钥被用作生成生意业务信息上的,只与私钥相对应的且作为MSP一部分的公钥可以匹配的署名。因此,MSP是一个可让身份被信任和被网络中其他参与者公认的,而不需要暴露成员的私钥的机制。
回想一下上一章提到的身份认证相干的手机或信用卡付出场景,证书颁发机构就像一个手机或信用卡付出提供商,它分发许多不同范例的可验证的身份。另一方面,MSP确定市肆担当哪些提供商。通过这种方式,MSP将一个身份(付出账户)转换为一个脚色(在市肆购买东西的能力)。
这种将可验证身份转换为脚色的能力是Fabric网络功能的基础,因为他给予构造、节点和通道(不同区块链账本)创建MSP的能力,使其确定谁可以在构造、节点和通道条理上运作。
证书签发认证流程

Fabric联盟链的证书签发认证流程包罗以下步调


  • 拥有一个由网络信任的CA颁发的身份
  • 将成员的证书添加到构造的MSP中
  • 将MSP添加到网络上的一个联盟或者通道
  • 确保MSP包括在网络中的策略定义
拥有一个由网络信任的CA颁发的身份
因为联盟链网络并不是公共网络,以是联盟链网络信任的CA并不需要为互联网的根CA(Symantec,Geotrust等)。联盟中的构造可以单独创建自己信任的根CA,也可以为一个联盟创建一个可信的根CA。
如本节概述中所述,我们可以用构造已有的CA/RA去为Fabric联盟链上的成员颁发电子证书,也可以利用Fabric CA去完成此部分的工作。Fabric还提供了一个脚本工具,“cryptogen”帮助创建自署名的根证书和为重要成员(节点、构造管理员等)签发电子证书,但此工具只用于测试网络,以是这里不做赘述。下面重要介绍利用Fabric CA签发身份。
Fabric CA在区块链网络上执行以下功能:


  • 身份注册,或毗连到轻量级目录访问协议(LDAP)作为用户注册表。
  • 颁发注册证书。注册是Fabric CA颁发证书密钥对的过程,由署名证书和形成身份的私钥组成。Fabric CA客户端首先在本地生成私钥和公钥,然后将公钥发送到CA,CA返回一个编码证书,即署名证书。
  • 证书更新和取消
可以看出Fabric CA不但仅实现了PKI中认证中心(CA)的功能,还实现了注册机构(RA)、证书资料库、证书取消体系和私钥存储的功能。其中RA功能主动完成重要是通过用户注册表实现的,其可以设置为利用数据库作为用户注册表,也可以设置为从轻量级目录访问协议(LDAP)服务器读取。别的,Fabric CA也可设置为通过PKCS11 API将私钥存储在HSM(硬件安全模块)中,从而实现密钥备份及恢复功能。因此Fabric CA就是一个Fabric中的PKI体系完整实现。
将成员的证书添加到构造的MSP中
实际上成员服务提供者并不提供任何东西。相反,MSP的实现是一组添加到网络设置中的文件夹,用以定义一个构造。证书颁发机构生成了代表身份的证书,但此证书需要添加到对应构造的MSP中,因为MSP包罗一个被答应的身份的列表。


  • MSP通过列出其成员的身份,或通过确定哪些是为其成员授权颁发有效身份的CA,来识别和确定担当来自这些根CA和中间CA所定义的信任域的成员。
  • MSP的能力不但仅是简单地列出谁是一个网络参与者或一个通道的成员。MSP通过标识参与者在节点或通道上拥有的特定特权,将身份转换为脚色。Fabric中的脚色包括管理员(admin)、peer节点(peer)、客户端(client)、排序节点(orderer)4种。
  • MSP还可以识别被取消的身份列表。通过附加的Revoked Certificates文件夹,内里存储着取消证书的Subject Key Identifier(SKI)和Authority Access Identifier(AKI)。
在区块链网络中,MSP出现在两个位置:


  • 在参与者节点本地(本地MSP)
  • 在通道(账本)设置中(通道MSP)
本地MSP和通道MSP之间的关键区别不在于它们怎样运作——它们都将身份转化为脚色——而是它们的范围。每个MSP列出特定管理级别上的脚色和权限。


  • 本地MSP是为客户端和节点(peer节点和排序节点)定义的,每个节点都必须定义一个本地MSP。
  • 通道MSP在通道层面上定义了管理权和参与权。通道MSP识别谁在通道条理拥有权限。每个参与通道的构造都必须为其定义一个MSP。体系通道MSP包括参与排序服务的所有构造的MSP。
综上所述,一个MSP是一个构造按照Fabric规定好的目录层级放置不同目标(成员认证或TLS传输)的根证书和中间证书的布局。
将MSP添加到网络上的一个联盟或者通道
由于通道MSP对通道内的所有节点都可用,它们在通道设置中逻辑上仅定义一次。然而,通道MSP也在通道中的每个节点的文件体系上实例化,并通过共识保持同步。因此,只管每个节点的本地文件体系上都有每个通道MSP的副本,但从逻辑上讲,通道MSP存在并被维护于通道或网络上。下图是一个通道上生存MSP列表。

同理,对于Fabric上的联盟(所有参与Peer和排序节点的构造),他们的MSP需要添加到体系通道的联盟MSP列表和排序构造MSP列表中。
对于本地MSP的摆设可见下图。peer节点和排序节点的MSP是本地化的,而一个通道(包括网络设置通道,又称为体系通道)的MSP是全局化的,被该通道的所有参与者共用。在该图中,网络体系通过由ORG1管理,而另一个应用程序通道可以由ORG1和ORG2管理。peer节点是ORG2的成员并由ORG2管理,而ORG1则管理图中的排序节点。ORG1信任来自RCA1颁发的身份,而ORG2信任来自RCA2颁布的身份。需要注意的是,这些管理身份标识,反映了谁可以管理这些组件。以是当ORG1管理网络时(因为ORG1管理了网络设置通道,包括共识设置等),网络定义中确实存在ORG2的MSP,以是经ORG2 peer背书的生意业务可被ORG1的排序节点验证。

确保MSP包括在网络中的策略定义
策略是使Fabric不同于其他区块链体系(比如以太坊或者比特币)的内容之一。在其他体系中,生意业务可以在网络中的恣意节点生成和验证。治理网络的策略可以在任何时间实时修复,并且只可以利用和治理代码相同的方式进行变更。因为Fabric是授权区块链,用户由底层基础办法识别,以是用户可以在启动前决定网络的治理方式,以及改变正在运行的网络的治理方式。
策略决定了哪些构造可以访问或者更新Fabric网络,并且提供了逼迫执行这些决策的机制。策略包罗了有权访问给定资源的构造列表,比如一个用户或者体系链码。他们同样指定了需要多少构造同意更新资源的提案,比如通道或者智能合约。一旦策略被写入,他们就会评估生意业务和提案中的署名,并验证署名是否满意网络治理规则。
在Fabric中,策略中明确的署名利用Signature语法,隐含的署名利用ImplicitMeta语法。其中署名(Signature)策略定义了要满意策略就必须署名的特定用户范例,比如Org1.Peer OR Org2.Peer。这里的用户范例就是之前提到的Fabric中的4种脚色Admin,Peer,Client和Orderer。
下图中为构造Org1定义的署名策略。


3-3-3 联盟链网络加密通道


联盟链网络安全介绍

联盟链是多个构造共同管理的区块链,对数据的安全性有更高的要求。
除了子网隔离、隐私数据、访问控制、账本加密等方式,网络成员间通讯需满意秘密性、身份认证和数据完整性并需防止通讯被窃听和篡改。
传输层安全协议(Transport Layer Security,TLS)是现在主流联盟链同等利用的通讯加密协议。
TLS是一种旨在提供计算机网络上的安全通讯的加密协议。TLS创建在网景(Netscape)开发的安全套接字层(Secure Socket Layer,SSL)规范基础之上;SSL从网景移交到国际互联网工程任务组(Internet Engineering Task Force,IETF)后,IETF将其更名为TLS。
TLS作为安全通讯的协议,以安全与性能为计划核心,能够有效解决下列重要完全通讯威胁:


  • 消息窃听
  • 消息篡改
  • 中间人攻击
  • 密钥窃听
加密通道面临的威胁及解决方案

消息窃听解决方案
对消息加密用以生存消息的秘密性
利用加密速度较快的对称加密算法来实施加密
消息篡改解决方案
背景概念
消息常常具有一些固定的格式,一些场景下可以无需破解原文,直接对密文中的某些字段进行修改来施加攻击
方案
通讯两边对消息的内容完整性进行验证,以防消息被篡改。
在消息末尾添加消息认证码(Message Authentication Code,MAC)。
将秘密性和消息完整性解决方案组合在一起,构成认证加密(Authenticated Encryption,AE)技术。
中间人攻击
背景概念
指主动攻击者混入发送者和接收者的中间,对发送者伪造成接收者,对接收者伪造成发送者的攻击方式。
方案
在消息报文上署名。该做法在数字领域即为数字署名:即发送方通过私钥对消息进行加密,而接收方通过对应公钥进行解密。现实中常用的署名算法有:RSA,DSA,ECDSA等。
信任锚点(Trust Anchor):颁发根证书的机构,称作信任锚点。

  • 利用数字署名需确保署名的公钥属于真正的发送者,因此需要一个权威机构在署名上盖章以作证明,即背书。该做法在数字领域被称为公钥证书。
  • 服务器的证书由中间证书来背书,中间权威机构由根证书来背书,此类认证链接关系称为信任链。颁发根证书的机构即为信任锚点。
如安在不存在权威机构的环境下防止密钥互换窃听
Diffe_Hellman(迪菲-赫尔曼)算法,也叫DH算法,是一种密钥互换技术的算法协议。
DH密钥互换技术的目标在于使两边在不泄漏密钥的环境下协商出一个密钥来方便之后的数据加解密。
DH密钥互换技术是一种创建密钥的方法,而非加密方法,实际利用中必须和其他加密算法结合利用。
DH密钥互换算法的有效性依靠于计算离散对数(
 mod q)的难度。其利用过程如下例:
前提:小王和小李都知道密钥互换过程中需要用到的素数q和q的一个原根p,这两个值可以由发起通讯的那一方选择并发送给通讯的另一方。
小王选择自己私钥Sa,计算出自己的公钥,
 mod q,然后把
传给小李;
小李选择自己私钥Sb,计算出自己的公钥,
 mod q,然后把
传给小王;
小王根据小李的公钥,自己的私钥、p和q计算出对称加密的加密密钥,
 mod q = 
 mod q;
小李根据小王的公钥,自己的私钥、p和q计算出对称加密的加密密钥,
 mod q = 
 mod q;
最终,小王和小李得到了用于对称加密的加密密钥K。而窃听者固然得到了p,q,
但无法计算出K。
TLS与安全通讯解决方案

TLS中最常用的暗码套件(Cipher Suite)如下图:

TLS协议是算法套件及模式的应用,用于解决前述威胁并提供解决方案

TLS协议层级架构概述

TLS协议位于传输层协议和应用层协议之间
TLS交互信息偶然序要求,依靠下层协议提供时序服务,因此TLS不能利用UDP来传输。
TLS协议内部基于分层架构,分为两层:


  • 下层记录层协议,重要负责验证、分片/重组、加密/解密的任务;
  • 上层在TLS1.2包罗4种子协议:握手协议(Handshake Protocol)、警报协议

TLS1.2握手协议

TLS毗连以握手开始。假如客户端此前并未与服务器创建会话,两边执行一次完整的握手流程来协商TLS会话。
握手过程中,客户端和服务器将进行以下四个重要步调:


  • 互换各自支持的功能,对需要的毗连参数达成同等
  • 验证出示的证书,或利用其他方式进行身份验证
  • 对将用于掩护会话的共享主密钥达成同等
  • 验证握手消息并未被第三方团体修改
如下图,TLS1.2的创建过程总共有13个包,第一次创建至少需要9个包。

第一阶段:创建安全功能
客户端首先发送ClientHello消息到服务端,其中包罗


  • 可用TLS版本
  • 客户端随机数
  • 会话ID,假如是新的会话则为空
  • 可用暗码套件
  • 支持的压缩方法
  • 扩展块由恣意数目标扩展组成,其会携带额外数据
服务端担当ClientHello消息后,发送ServerHello消息回应,其中包括


  • 可用TLS版本
  • 服务器随机数
  • 服务器生成的会话ID,假如客户端发送之前的会话ID,可重用缓存而无需完全握手
  • 可用暗码套件
  • 支持的压缩方法
  • 扩展块

第二阶段:服务器认证和密钥互换
服务器向客户端发送消息,该阶段分为四步:


  • 证书(可选):服务器将数字证书和到根CA的整个证书链发给客户端,使客户端能认证服务器。一般环境下,除了会话恢复时不需要发送该消息,在TLS握手的全流程中,都需要包罗该消息。除匿名Diffe-Hellman(DH)方法外,其他密钥互换方法均需要证书消息。
  • 服务器密钥互换(可选):根据之前在ClientHello消息中包罗的暗码套件信息,决定了密钥互换方式(例如RSA或者DH)。假如服务器发送了带有固定DH参数的证书或利用RSA密钥互换则不需要此消息。
  • 证书哀求(可选):服务端可能会要求客户自身进行验证,即可以是单向的身份认证,也可以双向认证。该消息中包罗服务器端支持的证书范例(RSA、DSA、ECDSA等)和服务器端所信任的所有证书发行机构的CA列表,客户端会用这些信息来筛选证书。
  • 服务器握手完成:第二阶段的竣事,第三阶段开始的信号,接下来等待客户端的消息。

第三阶段:客户端认证和密钥互换
客户端向服务器发送消息,该阶段分为3步:


  • 证书(可选):假如在第二阶段服务器要求发送客户端证书,客户端便会在该阶段发送证书。服务器端在之前发送的CertificateRequest消息中包罗了服务器端所支持的证书范例和CA列表,因此客户端会在本地证书中选择满意这两个条件的第一个证书发送过去。若客户端没有证书,则发送一个no_certificate告诫。
  • 客户端密钥互换:此消息的内容依靠于密钥互换的范例:

    • RSA客户端生成48字节的次密钥,并利用服务器证书中的公钥或服务器密钥互换消息中的暂时RSA密钥加密。它被用于后续的主密钥计算。
    • 匿名Diffe-Hellman,发送客户端Diffe-Hellman公钥参数。
    • 固定Diffe-Hellman此消息内容为空

  • 证书验证(可选):提供对客户端证书的精确认证。此消息只有客户端具有署名能力时发送。其目标都是为了利用私钥验证客户证书的客户所有权。

第四阶段:完成握手协议创建TLS毗连
该阶段重要由4个步调组成:


  • 客户端编码改变关照:客户端发送一条消息,关照服务器更改为加密模式。
  • 客户端握手竣事关照:客户端关照服务器已准备好开始安全数据通讯。
  • 服务器编码改变关照:服务器发送一条消息关照客户端更改为加密模式。
  • 服务器握手竣事关照:服务器关照客户端它已准备好开始安全数据通讯。SSL握手到此竣事。
握手协议中客户端先发ClientHello给服务器,而后服务器发送ServerHello等消息给客户端,第三步客户端发送,第四步服务器发送竣事消息握手。因此称为四步握手。
加密通道创建完成后,开始进行加密数据传输。客户端和服务器利用对称加密算法和ClientHello和ServerHello期间协商的暗码散列函数进行通讯,并利用客户端在Client Key Exchange发送给服务器的密钥。此时可以重新协商握手。
关闭消息:毗连竣事时,每一方都会发送一个close_notify警报,关照对端毗连已关闭。

TLS记录协议

记录层位于TLS内部下层
记录协议接收一个要传送的应用消息,将段分为块,压缩(可选)、加上MAC、加密、添加TLS头,将得到的最终数据单元放入一个TCP段中
记录协议接收的数据被解密、验证、解压、重组后,再传递给高层。


  • 加密/解密:将压缩消息和MAC用对称加密方法加密。加密内容增长长度不能超过1024字节,以便整个长度不能超过2^14+2048;
  • 分片/重组:这里的分片不是由下层协议的帧长度限制的,而是因为解密方需要收完整个record,才气解密。长度过长会导致解密方需要等待更多的RTT,增大延迟,破坏用户体验,因此TLS协议规定length必须小于2^14字节;
  • 认证/验证:包括报文时序是否满意协议规定、MAC消息认证码是否正确、填充是否正确等内容。

TLS1.3概述

TLS1.2于2008年发布,大多数联盟链都基于TLS1.2创建加密通道
TLS1.3于2018年发布,现在主流联盟链都可以支持。例如HyperLedger Fabric从v2.2版本以后支持TLS1.3协议。
TLS1.3的核心原则是简化:


  • 除一种带有内置参数的DH密钥互换算法之外的所有密钥互换算法都被删除。
  • 除了进步安全性之外,减少的参数聚集简化的握手也有助于进步整体性能。
  • 放弃了向后兼容性,性能、隐私和安全性有了显著进步。
  • 升级到TLS1.3时需要思量兼容性风险重要包括:

    • TLS1.3支持的暗码套件与TLS1.2及更早版本不同。假如应用程序对不再支持的暗码套件进行硬编码,则它可能无法在不修改其地面的环境下利用TLS1.3,例如TLS_AES_128_GCM_SHA256(1.3及更高版本)与TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(1.2及更早版本)。
    • TLS1.3会话恢复和密钥更新行为与TLS1.2和更早版本不同。假如应用程序依靠于TLS协议的握手细节,则可能存在风险。

TLS1.3握手协议身份验证

TLS1.3由三个阶段组成:密钥互换、服务器参数和身份验证。
密钥互换


  • 客户端向服务器发送ClientHello消息。
  • 服务器处理ClientHello消息并确定毗连的加密参数。然后它以自己的ServerHello消息确定密钥和暗码选项。
服务器参数:服务器发送两条消息创建服务器参数


  • EncryptedExtensions:此消息包罗加密扩展信息,这些信息包括不涉及特定于单个证书的那些加密参数。
  • CertificateRequest(可选):假如需要基于证书的客户端身份验证,则服务器发送此消息,其中包罗该证书所需的参数。假如不需要客户端身份验证,则省略此消息。
身份验证


  • 服务器发送这些身份验证消息:

  • 证书(可选):此消息包罗认证证书和证书链中的任何其他支持证书。假如服务器未利用证书进行身份验证,则省略此消息。
  • CertificateVerify(可选):此消息包罗在整个握手过程中利用与证书消息中的公钥对应的私钥的署名。假如服务器未利用证书进行身份验证。则省略此消息。


  • 完成:整个握手过程中的MAC(消息验证码)。
客户端利用自己的Certificate、CertificateVerify和Finished消息进行相应。假如服务器没有发送CertificateRequest消息,则省略Certificate消息。假如客户端未利用证书进行身份验证,则省略CertificateVerify消息。

TLS1.3利用预共享密钥恢复会话

预共享密钥(PSK)是在需要利用之前利用某个安全通道在两方之间共享的共享密钥。
在一次TLS握手期间创建PSK,然后在另一次握手中利用它创建新毗连;称为利用PSK恢复会话。
PSK对应于初始握手派生的唯一密钥。假如服务器在创建新毗连时担当PSK,则此毗连的安全上下文以加密方式绑定到原始毗连,并且从初始握手派生的密钥用于引导加密状态,而不是完整的TLS握手。下图表现了第一次握手创建PSK:


  • 客户端向服务器发送带有key_share扩展的ClientHello消息。此扩展列出了客户端支持的密钥互换加密方法。
  • 服务器以带有key_share扩展名的ServerHello消息进行相应。此扩展包罗要用于密钥互换的加密方法。
  • 服务器将其服务器参数发送给客户端。
  • 服务器和客户端都互换身份验证消息。
  • 服务器向客户端发送一条NewSessionTicket消息,其中包罗一个PSK,然后客户端可以通过将其包罗在其ClientHello消息中的pre_share_key扩展中来将其用于未来的握手。
  • 客户端和服务器互换加密的应用程序数据。

第二次握手怎样利用PSK如下图所示:


  • 在后续握手中,客户端向服务器发送带有key_share和pre_shared_key扩展的ClientHello消息。pre_shared_key扩展包罗在NewTicketSession消息中发送的PSK。
  • 服务器相应带有pre_shared_key和key_share扩展的ServerHello消息。pre_shared_key扩展包罗服务器同意利用的PSK。
  • 服务器将其参数发送给客户端。
  • 服务器和客户端相互发送完成消息。他们不执行身份验证,因为此毗连的安全上下文以加密方式与原始毗连相干联。
  • 客户端和服务器现在可以互换加密的应用程序数据。
利用PSK可极大地减少握手的消息发送量,进步性能。

OpenSSL概述

OpenSSL项目开发和维护OpenSSL软件。项目标技术决策由OpenSSL技术委员会(OTC)管理,项目治来由OpenSSL管理委员会(OMC)管理。OpenSSL是在Apache风格的许可下获得许可的,这基本上意味着您可以根据一些简单的许可条件自由获取和利用它用于商业和非商业目标。
OpenSSL是一个功能丰富且自包罗的开源安全工具箱。它提供的重要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书哀求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。
OpenSSL采取C语言作为开发语言,这使得它具有优秀的跨平台性能。OpenSSL支持Linux、Unix、Windows、Mac等平台。
现在OpenSSL最新的稳定版本是支持到2026年9月7日的3.0系列。这也是长期支持(LTS)版本。之前的LTS版本(1.1.1系列)也可用,并且支持到2023年9月11日。所有旧版本(包括1.1.0、1.0.2、1.0.0和0.9.8)现在都不再支持,应该不被利用。
毗连到TLS服务器

OpenSSL附带一个客户端工具s_client,可用于毗连到安全服务器。雷同于Telnet或netcat,s_client负责处理加密方面的工作,其他的工作则由用户完全控制。


  • 首先毗连到服务器,需要提供主机名和端口。例如:



  • 输入下令后,将看到大量诊断输出:

    • 前几行表现有关服务器证书的信息




  • 下一部分按交付次序列出了服务器提供的所有证书,对于每个证书,第一行表现主题,第二行表现颁发者信息:



  • 输出中的下一项是服务器证书内容;简便起见,这里删除其中大部分内容:



  • 再往下是关于TLS毗连的大量信息:

证书验证

能够毗连到TLS服务器,并不意味着该服务设置正确,即使该服务器支持所有正确的协议和暗码套件。设置的证书与正确的DNS名称匹配同样重要。
上一节示例中,验证状态码(表现在倒数第二行)为20(无法获取本地颁发者证书),这意味着未正确设置受信任的根证书。
可以利用-CApath开关指向正确的保存所有根证书的目录位置;
假如此根证书(当前为digicert签发)不在OpenSSL的根证书目录下,可以利用-CAfile开关指定此根证书在本地的位置,如:

即使获得了成功的状态码,也并不意味着证书设置正确。这是因为s_client工具不会检查给定主机名的证书是否正确,必须手动执行此操纵并告诉它利用哪个主机名:

假如不匹配,您可能会看到状态码62:

其他TLS验证相干的OpenSSL工具

OpenSSL还包罗其他30多个下令工具,下面简单介绍一下与验证TSL相干的一些工具:


  • sess_id:SSL/TSL协议的会话处理工具
对于利用s_client配合-sess_out导出的毗连状态记录文件,可以利用此下令读取。


  • x509:一个多用途的证书工具。它可以表现证书信息、转换证书格式、署名证书哀求以及改变证书的信任设置等。
因为TLS协议中会利用证书进行身份认证,因此许多验证工作都要利用此工具。


  • ocsp:在线证书状态工具
如需提交在线证书状态协议(OCSP)哀求以检查OCSP程序相应状态,可以利用此工具。


  • crl:用于处理PME或DER格式的证书取消列表(CRL)文件。
此工具可用来将CRL转换为可读的格式。
 
假如没有TLS服务器,想通过OpenSSL简单创建一个测试环境,则还会用到下面的工具:


  • req:用于生成和处理PKCS10证书哀求。
  • ca:此工具是一个小型CA体系。它能签发证书哀求和生成CRL。它维护一个已签发证书状态的文本数据库。
  • s_server:此工具是OpenSSL提供的一个SSL服务程序。利用此程序前,需要生成各种证书。
 
3-4 蚂蚁链分布式网络

 

3-4-1 蚂蚁链P2P优化网络

蚂蚁链P2P网络体系

在蚂蚁链中,节点重要分成共识节点和非共识节点。为了进步网络通讯效率,共识节点之间重要采取了全互联(Full Mesh)模式;而非共识节点不参与共识过程,对通讯的实时性要求不高,网络布局上采取了部分毗连(Partial Mesh)模式


  • CA认证

    • 基于CA签发证书完成节点身份识别和认证

  • 读写区分

    • 支持非共识节点和共识节点,兼容读写分离模式

  • 流量控制

    • 能够控制网络流量负载和消息报文巨细,支持数据压缩

  • 黑白名单

    • 能够设置黑白名单,有效控制节点毗连数目

  • 多接入点

    • 支持单节点多接入点能力,兼容内网和公网地址


蚂蚁链P2P网络体系新增节点


蚂蚁链P2P网络体系节点接入网络

基于区块链平台的SDK可以实现高效的网络链路接入和会话管理能力,基于证书的TLS链路保证链路数据的传输安全性


  • 证书体系

    • 支持CA证书体系,完成身份识别、有效期校验和吊销列表能力,支持多种校验方式

  • 多接入方式

    • 支持TCP、TLS、 HTTP、HTTPS的网络链路接入方式

  • 欣赏器支持

    • 支持欣赏器JavaScript的访问,兼容欣赏器会话管理机制

  • 流量控制

    • 可以有效控制网络流量负载,支持数据压缩低落资源负载

  • 黑白名单

    • 支持节点个性化设置答应接入的黑白名单列表,安全控制网络链路

  • 多协议支持

    • 支持JSON文本协议和RLP的紧凑二进制编码协议

蚂蚁链P2P网络体系节点管理特性

节点管理
利用链上管理合约来管理加入联盟的节点
链上管理员发起节点管理操纵,经过联盟链所有节点的共识达成同等,来完成对节点联盟资格的管理
节点发现
联盟链的所有节点信息记录到链上合约状态中,一个新节点接入联盟链后,所有节点都可以通过关注合约事件感知到节点变革,从而可以获取到新的节点信息,主动发起到新节点的P2P毗连。
节点高可用


  • 支持多地址

    • myChain节点可以有多个网络地址,可以同时添加内网地址和外网地址,如许方便同一个局域网的区块链节点走内网毗连。

  • 支持域名

    • myChain节点的网络信息可以包罗一个域名,如许节点摆设后,支持恣意迁移并利用新的IP地址,只要更新域名对应的IP地址即可。在云上机器摆设时,这是一个非常有用的特性,因为云上迁移更加常见。

蚂蚁链P2P网络体系网络特性

网络分层
联盟链节点支持共识节点和非共识节点多种脚色分别,共识节点负责进行生意业务共识、生意业务打包;非共识节点同步生意业务结果但不参与共识过程,如许可以减少共识节点规模低落共识过程复杂度。共识节点之间进行高性能、低时延通讯,保障生意业务和共识的实时性;非共识节点利用自身的服务能力,可以让整个链服务更多DApp,实现了生意业务数据读写分离,整个P2P网络也实现了实时通讯和流量通讯的网络分层。
弹性组网
myChain的P2P网络支持不同规模的节点灵活组网,是一种自顺应的网络拓扑管理能力。在几个节点时,可能会构建成全毗连(full-mesh)网络拓扑布局;在几千个节点时,可以构建成去中心化的网络布局,采取去中心化全局树状路由表,实现高效的数据传输。myChain P2P网络在节点规模变革时,不需要任何外部干预,可以自顺应地维护网络布局,实现了一个弹性的组网能力。
蚂蚁链P2P网络体系安全特性

身份认证


  • 节点身份认证

    • 加入联盟链的所有节点都是经过授权的,为了更好地管理网络接入,myChain的通讯节点都会被颁发一个SSL证书
    • 在联盟链的应用场景中,一般采取自建CA的方式,联盟链管理方会持有这个联盟链的CA权限
    • 节点的接入证书由联盟管理方负责签发

  • 应用层握手验签

    • 每个区块链节点都有自己的一对公私钥,它标识了这个节点的身份
    • 两个节点完成P2P毗连之后,第一个应用消息就是握手验签,即节点对一个特定信息利用自身的私钥进行署名,通过握手消息发送给P2P的对端节点;对端节点在收到这个握手消息后,取来源节点的公钥进行验签,如许即可以判定消息来源节点是否持有这个公钥身份。P2P的两个节点都做如许的操纵过程,即可以互相验证对方链上的身份。

  • 加密通讯

    • TLS加密通讯

      • P2P通讯的节点之间进行毗连时,采取了TLS毗连
      • TLS毗连保障了通讯两头节点之间的数据不会被链路上的第三方获取到。

    • 黑名单机制

      • myChain支持利用SSL证书吊销机制实现网络层黑名单管理,如许可以防止离开联盟的节点,可以恣意毗连链上节点,减少节点利用汗青证书进行网络攻击的时机,低落网络安全风险


网络治理


参数治理


动态组网

需求背景
某些联盟参与方盼望以较小的成本参与多个业务
某些联盟参与方盼望只加入关心的业务,无需同步所有业务的数据
参与方在不同业务中担当不同身份,如非共识节点,只对数据同步
利用Fabric Channel的部分业务盼望MyChain有对应的能力,方便业务迁移
功能特性
灵活组网:根据业务需求的不同可以灵活组建小范围的拓扑子网,答应云上、私有化混淆组网的摆设形态
独立的治理能力:子网具有独立的共识机制、账户体系
物理隔离:独立的数据存储,子网DB的访问也是隔离的

多维度动态组网


大规模节点P2P


 
3-4-2 BTN网络

区块链规模化发展的需求

区块链与应用融合发展的需求
链上链下数据协同,区块链与应用融合,是区块链技术发展的重要方向。


  • 物联网领域
结合区块链、安全计算等技术,将物联网设备可信上链,解决终端身份确认与数据确权问题,打造分布式智能物联网;


  • 边沿计算能力
边沿内容分发网络、分布式算力网络等,结合区块链实现贡献(内容、资源)量认定,可信计费等


  • 人工智能领域
结合区块链在数据层提供可信数据,人工智能负责主动化的业务处理和智能化的决策,实现区块链的主动化、自治化和智能化
区块链互联互通的需求
随着区块链应用的扩展,链与链之间数据通讯的需求越来越多,需要创建通用的网络基础办法和通讯协议,去支持灵活、安全的链间通讯


  • 通讯通道
网络通讯的底层基础就是通讯链路,当前重要是通过互联网完成毗连。而链间通讯,除了互联网链路还需要一个安全可信的逻辑通道。这个逻辑通道包罗两个层面,一个是链间消息中继通道,另一个是链间通讯协议


  • 链及节点网络路由
灵活的链间通讯,需要对分布式身份进行同一标识,以支持对链和节点的动态寻址
区块链网络面临的挑战

随着区块链应用的推广,越来越多的商业流程在区块链上发生,参与方越来越多链上节点的规模越来越大业务流程长,涉及环节多,链上参与节点数目大、分布广存在性能、稳定性等诸多技术挑战
网络通讯性能挑战
在区块链网络通讯中,通常每一个节点都需要把自己的消息发送给全链的其他所有节点,即应用层消息广播。随着节点规模变大,一个节点无法和其他所有节点创建直连,只能毗连网络中的一部分节点;以是,一个节点的消息必须通过其他节点进行中继转发,随着中继次数增长,通讯延迟也会渐渐增长,节点规模越大通讯性能越低。P2P模式下,区块链的扩展性和性能无法兼得,而通讯的性能是制约区块链整体吞吐量的关键因素
网络稳定性挑战
区块链中的节点一般都是分布式摆设在多地,节点与节点之间通常通过公网通讯。相对于公链,联盟链上节点数目有限,对网络状态更加敏感。一旦链上部分节点因为网络状态差而无法稳定参与共识或转发生意业务,可能导致整个链的工作状态受到影响。联盟链多用于支持高性能生产应用,要求比力高的生意业务吞吐量和服务稳定性,而直接基于公网的P2P通讯有太多不可控因素,网络颠簸时常发生,达不到业务对网络质量的要求。在全球摆设场景下,网络稳定性问题更加突出
典范网络拓扑布局

在互联网应用网络中,有多种网络拓扑布局,应用最广泛的就是层级布局和对等布局
层级布局网络及特点
互联网中广泛利用的CDN网络(Content Delivery Network)就是典范的层级布局网络。CDN是构建在Internet网络上的应用网络,有中心节点(源服务器)、区域节点、边沿节点(边沿服务器)等组成。中心节点作为拓扑布局的最高层,边沿节点作为拓扑布局的最低层,数据从中心节点流向边沿节点,边沿节点之间一般不需要直接通讯。这种模式下,体系能够提供极大的弹性,吞吐量可以随着边沿节点的增长不停提升。CDN边沿cache、就近服务的计划,可以节省骨干网带宽,提升访问速度,实现网络加快能力。CDN网络特别适合下行数据通讯,即从中心节点分发数据到边沿节点和用户
对等网络布局及特点
对等网络是一种在对等者(peer)之间基于对等计算模型构建的应用层网络,也称为P2P(peer to peer)网络。典范的P2P网络应用出现在2000年左右,相继涌现Napster、GnutElla、eDonkey等体系。P2P网络最突出的特点是去中心化,这个特点也带来了网络可扩展性和健壮性方面的优势。在文件分发场景下,P2P网络能够充实利用分散的资源(如磁盘、带宽等),发挥出了较好的性能优势。但在全局通讯场景下,由于P2P网络的节点连通性,单节点负载能力,消息转发效率等原因,造成通讯实时性差,全局数据同等慢,在区块链网络通讯中这一点的影响比力突出
区块链网络优化

为了提升区块链网络的扩展性和性能,区块链技术领域出现了多个网络优化方案
Falcon
Falcon网络是一个科研项目,由康奈尔大学几位教授创建。它是用于bitcoin区块的新型中继网络,基于应用层路由算法,加快区块传输减少孤儿区块;同时可以有效改善比特币网络的扩展性
FIBRE
FIBRE是一个开源项目,由比特币项目标核心开发职员发起和维护。同样致力于提升比特币网络扩展性和吞吐量,加快区块传输,低落生意业务延迟
BloXroute
BloXroute是一个商业化项目,属于每个BloXroute Labs公司。BloXroute Labs致力于搭建高效且中立的区块链分发网络BDN(Blockchain Delivery Network)为所有区块链解决扩容瓶颈。BDN网络帮助区块链节点更快完成大区块广播和生意业务池同步,从而减少不须要的资源浪费,使区块链能够更高效地运行,进一步分散并最终消除区块链扩容瓶颈。为了实现这种扩容,BDN利用了多种优化技术,如生意业务压缩与缓存、流式数据转发(直通路由)、网络拓扑优化等。区块链可以在不更改协议、不牺牲安全性或去中心化的前提下接入BDN。BDN在区块链底部的网络层运行,因此它不但兼容作用于第一层和第二层的扩容解决方案而且支持所有范例的共识机制。现在,BloXroute已经支持以太坊(Ethereum)、比特现金(Bitcoin Cash)、本体(Ontology)等区块链节点利用
互联网实时通讯(RTC)
互联网实时通讯(RTC)领域的网络优化技术是当前互联网领域比力热门的低延迟、高并发通讯方案。其特有的传输优化能力,能部分应用到区块链网络中来。但现在RTC技术在区块链中的实际应用还比力少,仅个别区块链项目采取了QUIC协议(Quick UDP Internet Connection)
Falcon、FIBRE、BloXroute项目借鉴了CDN网络的技术思想,以加快区块分发为重要技术手段实现区块链网络性能提升,也一定程度上改善了区块链的扩展性
蚂蚁链BTN网络定位

蚂蚁区块链传输网络(BTN:Blockchain Transmission Network)是面向全球的区块链传输骨干网络,通过搭建多链共享的通讯网络,提升区块链节点的稳定性、连通性和实时性,实现全球区块链网络高速、安全互联。
为了解决传统P2P网络中Peer到Peer网络不稳定的问题,通常采取的方案是摆设网络专线,但是专线摆设周期长、成本高,尤其在全网状(full-mesh)网络中更是无法做到所有节点的通讯都通过专线毗连。BTN结合了蚂蚁集团优化全球网络用户体验的多年技术积累,通过摆设在全球的高吞吐骨干网络专线和大量的POP(Point-of-presence)点,将区块链节点的流量就近就优引入到骨干传输网络中,将节点到节点不可靠的网络转换成了节点到POP点以及专线内的传输,极大的优化了网络传输的稳定性和效率,提升了用户体验。传统的网路加快产品,如DCDN,也可以提供就近接入、动态加快能力,但是利用在区块链产品中存在一些问题,如需要区块链节点必须具有公网IP、无法结合区块链的语义做协议层优化等。区块链传输网络需要对通讯加快,还需要针对区块链网络特征进行优化
BTN具备能力

  • 覆盖全球的大规模POP点,区块链节点能够就近就优接入POP点;
  • 优化的POP点之间网络传输能力,可以提供高吞吐、低延时的网络数据传输;
  • 具备边沿计算能力的服务点,可以理解区块链语义并基于应用特征优化网络传输性能,如应用层组播等;
  • 具备高可用、可运维、强大的容灾能力和安全防护能力,不会因为接入BTN导致区块链节点的服务SLA低落
蚂蚁链BTN服务概念及架构

BTN服务重要是由数据面和控制面两部分组成,数据面负责根据节点路由信息对区块链消息进行分发,控制面负责区块链节点的就近接入、节点路由的管理和跨区域流量调度等。
边沿代理 EdgeProxy
分发节点的消息,全球摆设,边沿代理之间具备网络通讯能力,可以是一台物理机或者云服务器;
节点 Session
节点Session标识一个节点的可路由状态以及收发消息状态
路由表
节点Session同EdgeProxy的关系表,可以根据此路由表将消息转发给具体的节点Session进而将消息分发到节点
Region
节点的调度单元,调度器根据节点特性调度节点到某个Region获取BTN的服务
可用区
为了具备高可用和容灾能力,一个Region内部具备至少2个可用区。在一个可用区出现故障时,节点可以从其他可用区继承获取服务
区块链消息
承载具体区块链语义的消息(如共识消息)

蚂蚁链BTN服务架构的数据面

BTN模型下数据面重要功能承载在EdgeProxy中,EdgeProxy可以通过购买公有云厂商的服务器来实现(如阿里云的ECS或者ESK边沿节点),EdgeProxy的处理区块链消息的三个步调为:接收消息、解析消息、依据路由转发消息到目标EdgeProxy或转发给区块链节点
EdgeProxy的互通
一个EdgeProxy构成了接收区块链节点数据前沿服务站。可以快速稳定地接收区块链节点的消息。同样的,EdgeProxy之间的高效数据分发能力也至关重要,在BTN模型中,对具体的EdgeProxy之间仅要求能够网络互通,可以利用公有云上VPC、MPLS专线、或者更低成本的SD-WAN技术,乃至可以直接通过公网进行通讯,不同的互通方案可能会导致不同的控制面计划,控制面的复杂度也需要作为一个观察维度
数据容灾
数据面容灾本质上是消息可靠投递的保障,可以通过消息重试,多网络通道等技术保障整体的SLA等级
蚂蚁链BTN服务架构的控制面

控制面提供区块链节点的路由能力,通过调度器调度区块链节点的就近接入,并且控制EdgeProxy之间的网络流量调度
区块链节点的就近接入
就近接入能够进步区块链节点消息首发的成功率,典范的就近接入体系就是CDN,通过就近服务用户,能够进步更好的网络体验,BTN可以根据用户的来源地、运营商等属性将其调度到距离节点迩来的EdgeProxy
路由表和消息的路由
每个区块链节点都有唯一的nid,消息路由是EdgeProxy根据路由表查找到消息的下一跳并投递的过程。控制面根据区块链节点的Session信息来更新路由表,如通过全局摆设的一个分布式的KV存储提供的更新和查找功能,实现路由维护与路由选择
EdgeProxy之间的流量调度
由于BTN的全球摆设特性,EdgeProxy之间的网络通讯带宽、延迟等特性不同,控制面需要调度EdgeProxy之间的流量以保障整体的可用性。BTN借鉴了传统的流量工程思路和Segment Routing流量工程方法
蚂蚁链BTN服务架构的整体流程

区块链节点的消息重要包括应用层单播和广播两种范例。下图以点对点的单播消息为例说明区块链节点在接入BTN之后具体的消息流程

  • 区块链节点B向调度节点哀求可用的EdgeProxy
  • 区块链节点B根据获取到的EdgeProxy IP地址和其创建通讯,此过程中EdgeProxy会进行安全验证,确保节点的合法性
  • EdgeProxy调用控制面接口更新节点的路由信息
  • 路由管理模块更新路由表项
  • 节点A发消息给节点B时,先把消息发给EdgeProxy
  • EdgeProxy解析消息之后发现该消息是发送给节点B的,调用控制面接口查询节点B的路由
  • 节点A毗连的EdgeProxy将该消息发送给节点B所毗连的EdgeProxy
  • 节点B毗连的EdgeProxy将消息发送给节点B

蚂蚁链BTN中区块链节点接入

BTN网络与区块链节点之间的毗连采取基于SSL协议的安全通讯信道。
每个区块链节点都有一对非对称公私钥对,利用其生成一个证书签订哀求(Certificate Signing Request)文件,提交给蚂蚁CA进行署名;蚂蚁CA署名后生成区块链节点的接入证书(client.crt)。区块链节点在本地设置上接入证书就可以和BTN创建SSL安全毗连了。接入证书除了实现通讯信道安全,也实现了对节点身份的验证。

BTN可路由区块链消息传输协议

BTN创建以对象标识(ID)为中心的路由表。通过该路由表查询,区块链上的业务利用BTN进行通讯时,就不必再关心节点位置,而仅利用目标对象的ID即可。BTN网络基于该协议,可以支持全范例、异构化的区块链通讯
联盟链网络接入
联盟链的广播语义实在是应用层的组播,是对每个节点发应用层消息,即一个相同的消息发给多个节点。假如借用BTN网络,这种应用层组播消息可以在发送端聚合成一个消息,即只需要发出一份组播消息,而进步BTN网络在边沿复制,如许能显著低落节点的发送带宽,同时也可以接入区块链传输网络(BTN)实现消息聚合、网络拓扑简化等,实现低带宽、高吞吐,进而提升链的性能和扩展性
公链网络接入
公链的共识算法种类许多,但通讯内容是生意业务消息、区块同步消息和共识消息这三种重要消息范例;比如对BTC来说,区块同步消息和生意业务消息是重要内容,区块同步消息关系共识结果的有效性,区块同步消息分发越快越轻易确定共识结果。因为公链通常有激励机制,对矿工而言,公链的消息传播影响其收益,以是公链在接入区块链传输网络时对网络中立性有更突出的要求
网络基础办法优化

在区块链P2P网络通讯中,达成共识的速度取决于参与共识节点的网络状况,网络吞吐对区块链业务TPS具有决定性作用,在区块链节点接入BTN之后,BTN提供的网络吞吐能力至关重要。BTN通过如下三个方面进行网络优化来进步区块链接入BTN网络的吞吐能力。
就近接入
在BTN网络中区块链节点直接通讯被分割成了3段:区块链节点到EdgeProxy、EdgeProxy到目标地EdgeProxy,目标地EdgeProxy到目标节点。
这中间的某一段出现丢包时,仅在该段重传,不需要从发送节点开始重传数据包,进而提升了节点之间的网络传输吞吐
网络专线
为了优化跨国、跨境等长距离网络通讯,在EdgeProxy之间利用专线是一种常见的手段,不过专线成本高、摆设慢的问题导致无法成为通用解决方案。在BTN中,一方面通过利用云厂商提供的假造专网中的专线快速构建高质量的网络通讯能力,另一方面,通太过析通讯包的不同优先级,对于较低优先级的数据包利用较为便宜的SD-WAN或者公网来达到成本优化
传输协议优化
通过BTN将区块链节点之间P2P的通讯转换到区块链节点同BTN通讯,以及BTN中的EdgeProxy和EdgeProxy之间的通讯,可以通过优化跨链节点同EdgeProxy以及EdgeProxy之间的传输协议达到优化区块链通讯体验的目标。BTN支持利用QUIC协议来计划一种针对区块链的传输协议,低落区块链节点接入BTN的延迟,利用改进的拥塞控制算法和流量调度算法,提升区块链通讯实时性和稳定性
业务应用层优化

BTN别的一个典范的能力是针对区块链业务的具体特性做优化
PBFT达成共识的消息复杂度为O(n2),在P2P的full mesh网络拓扑环境下,每个区块链节点的网络通讯负担都非常大,使得链的扩展能力随着节点数的增长急剧降落。在BTN网络下,节点仅需要和EdgeProxy进行通讯,那么当节点发起一次共识时,其仅需要将广播消息发送给BTN,由BTN来进行广播,那么该节点的上行消息量将由O(n2)变为O(1),大大低落了节点的通讯负担。
在BTN网络传输中,定义了基于Qos的分层加快技术。由于不同的消息范例对实时性的要求不同,比如共识消息、生意业务消息等,要求极致的低延迟;而区块同步消息特别是汗青区块同步,对实时性要求弱于共识消息的实时性。为了保障体系整体工作的低延迟特性,采取了多优先级队列进行消息列队,保障高优先级消息最先得到处理,进而保障了共识、生意业务类消息的实时性。

安全通讯特性

联盟链各个节点进行数据传输的过程中必须要确保数据不被外部窃听、修改、重放等,针对这个目标,蚂蚁区块链计划了端到端的安全通讯方案,其中重要包括三个方面:节点身份安全、链路传输安全、数据传输安全,具体如下图所示:
节点身份安全
重要是指节点在接入BTN网络时的身份认证,节点通过BTN网络进行数据传输时,首先需要向BTN Server申请证书,毗连时证书认证通过后,节点才可以通过BTN与其他节点之间创建逻辑毗连,然后节点需要向其他节点发送自己的公钥和链节点证书,该证书通过认证后,节点与节点之间才气正式创建毗连。节点在创建安全毗连后,需要按照自己所属的区块链节点组发送注册组消息,这是为了验证该节点在某个区块链节点组的身份是正确的,是经过大部分节点认同的。这两项身份认证通过后,节点才气真正开始发送业务数据消息
链路传输安全
节点在传输过程中,通过SSL协议对网络传输链路进行安全保障,从而能够解决数据在传输过程中可能出现的丢失、窃听等问题,保证数据能够安全可靠地在每条链路中进行传输
数据传输安全
数据传输安全是为了解决节点与节点之间的传输安全,在节点通过BTN网络进行传输时,首先需要将数据传输到BTN网络中,通过BTN网络来进行消息路由转发,在此过程中,很轻易发生消息泄漏,以是利用BTN网络传输时,首先需要对数据进行加密,数据到达目标节点处后,目标节点对数据进行解密处理

BKE(Blockchain Key Exchange)协议

BTN通过定义了一种BKE(Blockchain Key Exchange)协议来完成区块链节点之间端到端加密传输,重要包括密钥生成和互换BKE
节点在创建毗连后,节点之间进行密钥信息协商,包括对称密钥、非对称密钥算法选择等,协商成功后,节点分别生成BTN网络传输需要的非对称公私钥和对称密钥对,节点向其他节点发送哀求获得其他节点的公钥,其他节点收到后将公钥发送给本节点,节点利用其他节点的公钥对自己的BTN对称密钥进行加密,将加密后的数据发送给其他节点,其他节点收到后,利用自己的私钥进行解密,并将节点的对称密钥存储在自己本地,别的,节点每隔一段时间更新BTN对称密钥,以防止BTN密钥对发生泄漏导致消息泄漏

网络中立特性

 BTN网络中立性是指创建的网络基础办法必须同等对待区块链中的所有节点,不能歧视性对待任何节点的任何消息。BTN提出了基于暗码学和统计学的可验证中立性模型,重要通过数据完整性验证、数据正确性验证、时延公道性验证、消息隐私性验证四个维度的指标来保证其中立性。
节点对要发送的消息进行加密,然后做哈希署名,发送给区块链中恣意接收节点;通过技术手段来保证数据的完整性,隐私性,正确性,和统计的随机性,别的,统计发送方和接收方节点的数据量和时延,用来验证数据的时延公道性

节点在创建通讯链路之后,首先进行密钥协商,协商完成后进行密钥互换,密钥互换成功后,节点开始发送数据。为了保证消息的隐私性和安全性,节点需要对消息数据进行加密,为了保证消息的正确性,节点需要利用链上节点私钥对该消息的哈希值做署名,然后将所有的数据发送给接收节点。
接收节点收到消息后,首先验证署名是否正确,假如正确,则代表消息发送方无误,然后对加密消息做哈希,并验证该哈希值是否与署名中的哈希值同等,假如同等则代表消息没有被篡改,验证通过后,接收方利用密钥对消息进行解密,并进行处理
 

消息时延重要依靠统计消息的时延和数据量来实现
A节点发送数据给B节点,A节点记录自己发送给B节点的数据量,B节点记录自己收到的A节点的数据量,然后将这两部分数据进行整理,返回给用户作为判定,验证消息总量的巨细,同时,A节点定时向B节点发送哀求,获得B节点本地的统计数据,B节点收到哀求后,将自己收到的A节点的统计数据消息发送给A节点,并附带自己的署名信息。A节点收到后验证署名,并更新自己与B节点的RTT,然后将B节点返回的统计数据与自己本地存储的发送给B节点的消息统计数据一起整理发送给用户进行判定,从而验证时延和其他数据的正确性
 

全球摆设的国际信用证联盟平台

 信用证业务是银行常见的国际业务之一,是国际商业中的重要金融工具,信用资质良好的企业通过开立银行信用证来保证其在国际商业中的付出答应。该平台利用区块链所有节点数据同等性,结合隐私计算技术,可以获得更好的时效性和成本收益
挑战


  • 网络不稳定
节点之间网络毗连非常不稳定,经常有节点掉线,共识延迟高


  • 节点扩展困难
新节点加入需要协调新机构和已加入机构点对点开通网络策略,人力成本和时间成本高


  • 网络复杂,难维护
节点运行环境的差异进一步带来机构内部网络映射的复杂性,不同机构需要不同的网络设置方案
国际信用证联盟链特点


  • 节点数目多且分散在亚欧各地,节点之间物理距离遥远,公网通讯时延非常大
  • 节点私有化摆设在浩繁机构,机构网络隔离策略多样,网络策略变更时间久,协调成本高
  • 节点摆设环境多样,物理机,假造机,容器等方式均有涉及
该联盟链的节点在全球就近接入BTN网络后,充实利用了BTN优化的网络,稳定性大幅提升,共识时延显著降落。节点只需要单向开通到迩来接入点的网络即可。联盟链扩展新节点时只需协调新机构开通单向访问接入点网络即可。沟通成本和时间成本大幅降落。基于纯BTN毗连所创建的联盟链,机构内部的网络映射可以大大简化,摆设方式趋于同一且节点可以自由迁移物理位置,根据实际观测结果,接入BTN之后,该黎明链整体提升显着,通过BTN网络,区块链实现了将物理P2P网络转化成了逻辑P2P网络。网络毗连结果大大简化但同时又保证了区块链节点的对等性

混淆摆设的数字安全区块链平台 

数字安全应用链采取了混淆摆设方式,有私有化机房,有云上节点,也有私有云环境,多种环境混淆,加上私有化网络特性多,造成多种网络挑战

 
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表