2. p2p

泰岳联盟链实现了在节点发现和节点连接中的证书准入校验,节点连接使用标准秘钥交换流程,后续更新后TLS

2.1. 节点发现

Bootnodes为节点发现中的种子节点,新接入的节点想查询邻居节点,在Ping消息的时候会做证书校验证书验签,分别判断证书有效性和是否为证书持有人签名。验证通过后发送FindNode查询邻居节点。

  • 节点查询前发送pingpong验证对方在线和版本验证,证书校验和证书签名验签
  • 发送findnode消息向对方查询邻居节点,以公钥hash为条件
  • 对方去K桶 按目标值获取16个最近的邻居节点
  • 本地节点连接已满,停止查询,本地没连满,继续节点发现

2.2. 节点管理

正常情况下,节点会连接25个节点,少于8个节点时,节点会主动连接节点,同时启动节点发现,直到高于8个节点连接数,停止节点发现。

2.3. 节点连接

节点在建立连接过程中生成临时会话秘钥,保证信息传输的安全性,会话发起方是知道对方的IP和公钥,涉及到公钥加密和私钥解密。

发起方

  • 发起方本地私钥和对方公钥生成一个静态共享私密(token),生成随机数和token做异或生成待签名信息,随机生成的私钥对信息进行签名
  • 对方公钥对随机数,本地公钥,签名进行加密

接收方

  • 对方拿到数据本地私钥进行解密 ,不是自己公钥加密的将无法解密数据
  • 接收方用本地私钥和数据包解密出对方公钥生成同样的token,token和随机数异或生成签名摘要信息,推算出对方的随机公钥,接收方随机私钥和随机公钥生成的token为AES的输入。
  • 接收方生成随机数,并用发起方的公钥对随机数和随机公钥进行加密

发起方

  • 发起方收到对方数据,用私钥解密出随机公钥跟本地随机私钥生成共享私密(token)

会话秘钥做为节点间AES加密的KEY,节点间消息通信为AES加解密,提高网络的安全性和数据率。

2.3.1. 多协议复用

泰岳链P2P支持多协议复用,全节点和轻节点都可支持,消息在同一加密链路上发送,只需定义好消息码和偏移量即可,减少网络负载。