HOME
【网络专栏】联盟链的通信安全如何保障?

【导读】

安全性对区块链底层平台而言至关重要,各个关口都需要严格把关安全问题,一旦出现安全漏洞,可能要付出昂贵的代价。区块链平台作为一个去中心化的存储结构,底层通信网络依靠P2P网络,尤其对联盟链来说,网络安全是区块链安全性把关的第一道关口,也是一道关键的关口,它通过一定的机制有效阻止作恶节点的加入以及一些恶意信息的传播,从源头上扼制作恶行为。

以趣链区块链底层平台为例,网络是如何保障区块链平台安全性的呢?下文将从各种安全机制的介绍中揭晓答案。

网络拓扑

不同的网络拓扑,安全性也不同,区块链底层平台无法使用中心化的网络拓扑结构,因为这种拓扑极其依赖中心节点,如果中心节点作恶,将无法验证并严重影响整个网络。而使用去中心化分布式的网络拓扑结构能够有效防止这种现象的发生,这种网络中的每个节点地位是对等平权的,既能作为服务的请求者又可以为其它节点提供服务,具有更强的健壮性,即使存在少数作恶节点,也不影响整个网络的正常运行。

节点类型

区块链中,有多种节点类型,根据节点存储的内容不同分为:

  • 全节点:节点同步全量区块链数据,负责交易的广播和验证,维护整个区块链网络的稳定运行;
  • 轻节点:轻节点也称作简单支付验证(SPV)节点,指的是节点只同步区块头数据,但依赖于全节点通过默克尔树路径来验证一笔交易是否存在于区块中,而不需要下载区块中的所有交易。对于存储容量有限的IoT设备,就可以通过运行一个轻节点参与到区块链网络中。

在联盟链中,节点类型更加的多样化,根据节点是否参与共识可以分为两种:共识节点/验证节点和非共识节点/非验证节点,其中非共识节点/非验证节点又可以进一步分为NVP和CVP:

  • 共识节点/验证节点(VP,Validate Peer):共识节点在有的系统里也称作验证节点,主要负责对交易排序并打包成块,与其他验证节点达成一致的共识,然后执行交易,将交易和执行结果进行存储,拥有全量的数据以及绝对投票权;
  • 非共识节点/非验证节点(NVP,Non-Validate Peer):非共识节点在有的系统里也称作非验证节点,区块链网络中不参与共识验证,仅参与记账的节点,需要依附VP节点存在,有完善的状态恢复机制,可为上层提供读写分离服务;
  • 热备节点(CVP,Candidate VP):区块链网络中共识验证的节点的热备,依附VP节点存在,可动态替换该VP节点而不影响整个网络。

多种类型组成的网络拓扑图

网络分区

在一个区块链网络中,企业间需要的服务可能是多种多样的,因此,要支持在网络中分区,并实现不同网络区中执行不同的业务而不互相干扰。如下图所示,总共存在三个分区,且分区间存在跨分区转接节点,同时存在于两个及以上的分区执行不同的服务。

分区建立支持两种模式:自由模式管理模式,自由模式下节点可自行组成分区,为成功达成共识,最少需要四个节点组成一个分区,不同分区下的节点增删可以自由进行;而管理模式下,其他分区的建立需要依赖于global分区,节点增删也不可自由进行需要依赖global分区的管理。

【节点网络安全性】

以趣链区块链底层平台为例,其共有两种网络端口:

  • P2P端口:该端口用以节点间建立物理连接,组成一个P2P物理网络
  • RPC端口:该端口用以给客户端提供相应的服务,比如发一笔交易,查一笔交易等等类似的服务

暴露端口其实是一件很危险的事情,为了保证安全性,防止恶意信息的发送,接下来我们来分析这两种网络是保障安全性的方法。

P2P网络

P2P网络是节点间进行通信的网络,它主要从两个方面来保障通信的安全性:节点的准入准出网络通信安全保障

1)节点准入准出

对于联盟链来说,节点的加入与退出都是需要严格把关的,不允许不合法的节点加入网络,那这一环节如何保证呢?就需要依靠节点的严格准入准出机制,后续将「权限专栏」《联盟链网络准入准出机制》的推文中详细描述。

2)网络通信安全保障

在趣链区块链网络中,物理连接和逻辑连接是分离的。

  • 物理连接用以进行网络通信,建立起物理连接才能够互相发送消息通信,在逻辑连接建立之前,该链路只能发送相关建立连接的消息以及检活的消息,其他消息即使发送也不会被节点处理;
  • 逻辑连接是建立在物理连接之上的,只有建立起逻辑连接,两个节点之间才能够互相发送业务消息,逻辑连接需要验证节点身份,一旦发现对端节点是一个不合法的节点,立马断开逻辑连接和物理连接。

同时,上文中还提到了网络分区的概念,在分区的网络拓扑中,节点间有且只有一条物理连接,但是逻辑连接是有多条的,不同分区多路复用这一条物理连接,充分利用带宽,两个节点在不同分区使用不同的逻辑连接进行通信,所以只有当两个节点间的逻辑连接数降为0时才允许真正的端开物理连接。

TLS(Transport Layer Security)是物理连接通信安全的保障,它基于已弃用的SSL协议,运行在Internet的应用层,旨在两个或多个通信计算机应用程序之间提供隐私和数据完整性。它由两层组成 : TLS记录TLS握手协议

目前我们使用的是TLS 1.3版本,它在2018年在[1]中首次定义。TLS记录以特定格式封装要交换的数据,每个记录都可以被压缩、填充、添加消息验证码(MAC)或加密,所有这些都取决于连接的状态。TLS 1.3的握手协议被压缩为一次往返,而在这之前的版本都是两次往返,首先,客户端向服务器发送一条clientHello消息,该消息包含支持按照客户端偏好的顺序排序的密码列表,并猜测使用什么密钥算法,以便在需要时发送密钥共享。在接收到clientHello消息之后,服务器发送一个带有密钥、证书、选择的密码套件和完成信息的serverHello消息,当客户端收到服务器的完成信息后,它再与服务器协调将要使用的密码套件[2]。

在逻辑连接建立过程中,将进行节点间的身份验证并生成对称密钥,之后节点使用对称密钥对分区网络内的业务消息进行加解密。身份验证用于验证节点的身份,防止没有合法身份的节点加入网络并发送恶意信息;消息对称加密的目的是防止消息在发送过程中被恶意篡改,同时,确保同一个节点不同分区网络消息的隐私隔离。具体过程如下图所示,分为四步握手进行节点的身份验证,防止恶意节点建立连接并发送恶意消息。

1)peer1发送clientHello消息,消息中携带本端节点的证书、使用本端节点私钥对消息体做的签名和一个随机数A;

2)peer2接收到clientHello消息后,首先验证证书的合法性,是否是可信证书,接着验证签名,只要有一步验证失败将发送severReject消息并终止连接,如果通过将发送serverHello消息,其中携带本端节点的证书、使用本端节点私钥对消息体做的签名和一个随机数B;

3)peer1收到serverHello消息后,同样的,验证证书和签名,如果验证失败将发送clientReject消息终止连接,否则发送clientAccept消息;

4)peer2收到clientAccept消息后将发送serverDone消息,至此逻辑握手完成。

接下来,peer1会根据随机数A、随机数B、peer2的公钥以及自己的公私钥生成会话密钥,peer2也是同样的根据随机数A、随机数B、peer1的公钥以及自己的公私钥生成会话密钥,在完成逻辑握手后发送的业务消息都需要使用该对称密钥加密解密后才能进行发送和处理。

RPC网络

RPC网络依靠两个方面保障安全性SDKCertHTTPS

SDKCert是节点线下颁发给SDK的可信证书,对于每个HTTP请求,header中必须包含SDKCert以及使用SDKCert的私钥对整个HTTP body签发的签名,节点收到后将会验证该SDKCert以及签名,如果验证失败将不会处理该请求。header中包含的SDKcert是用于对该消息来源的身份验证,确保该请求信息的来源是可信的,而使用私钥进行签名是为了防止该消息在发送中途被拦截恶意篡改。

HTTPS的安全性依赖于前文提到的TLS加密,它的主要目的是对访问的网站进行身份验证,在传输过程中保护交换数据的隐私和完整性。它可以防止中间人攻击,客户端和服务器之间通信的双向加密可以防止通信被窃听和篡改[3,4],它通常使用长期的公钥和私钥来生成短期会话密钥,然后使用该密钥加密客户端和服务器之间的数据流。

【总结】

本文综述了整个趣链区块链底层网络的安全技术,宏观角度解读整个网络的基础框架,从各个部分考虑节点安全性的设计。对于节点准入准出的权限体系控制描述的并不具体,后续将有推文详细描述,敬请期待。

作者简介

陶媛 趣链科技基础平台部 区块链网络研究小组

参考文献

[1] RFC 8446"The Transport Layer Security (TLS) Protocol Version 1.3".

[2] Valsorda, Filippo (23 September 2016). "An overview of TLS 1.3 and Q&A". The Cloudflare Blog.

[3]  "Secure your site with HTTPS". Google Support. Google Inc. Archived from the original on 2015-03-01. Retrieved 2018-10-20.

[4]  "What is HTTPS?". Comodo CA Limited. Archived from the original on 2015-02-12. Retrieved 2018-10-20. Hyper Text Transfer Protocol Secure (HTTPS) is the secure version of HTTP