具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链中继通信网络可以适用于各种类型的区块链网络,包括公有链、私有链和联盟链等。譬如,应用于公有链的区块链中继通信网络主要包括Falcon、Fast BitcoinRelay Network(FBRN)、Fast Internet Bitcoin Relay Engine(FIBRE)等,而应用于联盟链的区块链中继通信网络主要包括BloXRoute、Blockchain Transmission Network(BTN)等。本说明书并不限制所采用的区块链中继通信网络。
虽然区块链中继通信网络具有如前所述的若干优势,但是区块链节点在使用区块链中继通信网络进行消息传输时,需要确定该区块链中继通信网络具有中立性,不会对消息传输造成负面影响。因此,本说明书提出了一种区块链中继通信网络的中立性验证方案,能够对区块链中继通信网络的中立性进行有效验证。
图1是一示例性实施例提供的一种区块链中继通信网络的中立性验证方法的流程图。如图1所示,该方法可以包括:
步骤102,源区块链节点通过区块链中继通信网络向目标区块链节点发送中立性验证消息,所述中立性验证消息包括由第一对称密钥对第一消息内容进行加密生成的第一加密后消息内容和由所述源区块链节点的身份私钥为所述第一加密后消息内容生成的数字签名,所述第一消息内容包含中立性验证消息类型标识。
通过在一物理设备上运行区块链平台代码(即链代码),可以在该物理设备上形成相应的节点实例。如果不考虑该物理设备所实现的其他功能,可以不对物理设备和节点实例加以区分,此时该物理设备或节点实例均可以称为区块链节点。如果考虑到该物理设备所实现的其他功能,比如除了节点实例之外还可以运行其他的业务实例,此时可以将该物理设备称为节点设备、将该节点实例称为区块链节点。总之,区块链节点可以是物理设备层面的概念,也可以是逻辑层面的概念,需要根据实际情况来确定。
需要说明的是,区块链中继通信网络中的中继节点,除了可以是物理设备之外,也可以是逻辑设备。对于逻辑设备而言,例如区块链中继通信网络可以是基于云处理平台搭建的骨干通信网络,此时中继节点可以为针对云处理平台上的云处理资源进行虚拟化而创建的虚拟设备。
在本说明书的技术方案中,与中立性验证相关的功能逻辑可以属于上述的区块链平台代码的一部分,则源区块链节点和目标区块链节点可以为相应的节点实例,也可以为节点实例所处的物理设备。或者,与中立性验证相关的功能逻辑也可以属于一业务实例,该业务实例与节点实例处于同一物理设备上,则源区块链节点和目标区块链节点可以为相应的物理设备。不论对区块链节点的理解为何,本说明书中与中立性验证相关的功能逻辑可以与区块链节点所实现的其他功能逻辑来自同一开发方,也可以分别来自不同的开发方。例如,当来自不同开发方时,与中立性验证相关的功能逻辑可以基于SDK(SoftwareDevelopment Kit,软件开发工具包)的形式而实现,以便于不同开发方之间的协同。
源区块链节点和目标区块链节点均为接入区块链中继通信网络的任意区块链节点。实际上,已接入区块链中继通信网络的每个区块链节点均可以作为源区块链节点,也可以作为目标区块链节点。对于任一源区块链节点而言,相应的目标区块链节点的数量可以为一个或多个,例如此时的目标区块链节点可以为已接入区块链中继通信网络的所有其他区块链节点中的一部分或全部区块链节点。在一实施例中,已接入区块链中继通信网络的所有区块链节点可以同时参与到中立性验证过程中:每个区块链节点都作为源区块链节点,并同时作为其他区块链节点对应的目标区块链节点,从而使得所有区块链节点都可以针对自身所接入的区块链中继通信网络实现中立性验证。
由于在生成中立性验证消息的过程中,需要通过源区块链节点的身份私钥生成数字签名,且该身份私钥通常由源区块链节点自行维护,因而通常由源区块链节点主动生成中立性验证消息。当然,如果源区块链节点的身份私钥可以交由其他可信对象进行维护,那么也可以由该可信对象生成中立性验证消息并提供至源区块链节点。源区块链节点和目标区块链节点可以分别维护有区块链节点列表。某一区块链节点所维护的区块链节点列表,通常用于记录该区块链节点所处区块链网络中的所有区块链节点的信息。当然,在一些情况下,譬如涉及到多条区块链网络之间的跨链场景时,区块链节点列表也可以维护其他区块链网络中的区块链节点的信息。因此,源区块链节点与目标区块链节点可以属于同一区块链网络,也可以分别属于不同的区块链网络。区块链节点列表中所维护的区块链节点的信息,譬如可以包括区块链节点的节点标识、链上节点身份公钥、节点IP和端口信息等。链上节点身份是基于非对称加密算法生成的,每个区块链节点的链上节点身份包含链上节点身份公钥和链上节点身份私钥。由于链上节点身份属于区块链节点之间实现链上交互的信任基础,因此区块链节点的链上节点身份可以用于实现本说明书中对数字签名的生成和验证,比如源区块链节点通过自身的链上节点身份私钥生成上述的数字签名,而目标区块链节点通过源区块链节点的链上节点身份公钥对该数字签名进行验签。当然,除了链上节点身份之外,源区块链节点与目标区块链节点可以采用其他的公私钥对,比如源区块链节点与目标区块链节点通过区块链中继通信网络协商的动态身份公私钥对,该动态身份公私钥对可以专门用于中立性验证,以实现对数字签名的生成和验证,本说明书并不对此进行限制。
除了数字签名之外,中立性验证消息还包含第一加密后消息内容。源区块链节点可以通过第一对称密钥对第一消息内容进行加密以生成上述的第一加密后消息内容。当然,如果源区块链节点将第一对称密钥交由其他可信对象进行维护,那么也可以由该可信对象生成第一加密后消息内容并提供至源区块链节点。第一对称密钥由源区块链节点与目标区块链节点分别维护,本说明书并不限制该第一对称密钥的生成方式。例如,第一对称密钥可以由密钥管理服务器(Key Management Server,KMS)生成并分发至源区块链节点和目标区块链节点。再例如,第一对称密钥可以由源区块链节点与目标区块链节点之间通过相关技术中的密钥协商技术进行协商得到,这里的密钥协商技术譬如可以包括DH(Diffie-Hellman)算法等。又例如,第一对称密钥可以由源区块链节点与目标区块链节点中的任一方生成后,分发至源区块链节点与目标区块链节点中的另一方。接入区块链中继通信网络的所有区块链节点可以共同维护统一的第一对称密钥;或者,当这些区块链节点存在分组(比如同一区块链网络内的节点属于同一组,再比如基于业务需求划分的组等)时,同一组内的区块链节点可以维护统一的第一对称密钥、不同组的第一对称密钥不同;或者,每个区块链节点所采用的第一对称密钥可以各不相同。实际上,无论采用何种第一对称密钥,只要确保该第一对称密钥的安全性、避免区块链中继通信网络获得该第一对称密钥,以及目标区块链节点能够通过正确的第一对称密钥来实施解密操作,即可保证顺利完成本说明书的中立性验证方案。
若确定由源区块链节点将第一对称密钥分发至目标区块链节点,该源区块链节点通过区块链中继通信网络向目标区块链节点发送密钥分发消息,该密钥分发消息中包含由目标区块链节点的身份公钥对第一对称密钥进行加密后的密钥密文,以及由源区块链节点的身份私钥为密钥密文生成的数字签名;相应的,目标区块链节点接收到密钥分发消息后,根据源区块链节点的身份公钥对密钥分发消息中的数字签名进行验签,以及用自身的身份私钥对密钥密文进行解密,并在验签成功的情况下将解密得到的对称密钥确定为第一对称密钥。密钥分发消息包含上述的密钥密文和针对该密钥密文的数字签名。该密钥分发消息可由源区块链节点生成,或者由其他可信对象生成后提供至源区块链节点,本说明书并不对此进行限制。如果由其他可信对象生成密钥分发消息,那么源区块链节点可以将自身的身份私钥托管至该可信对象,以便该可信对象可以据此为密钥密文生成相应的数字签名。其中,源区块链节点获取该目标区块链节点的身份公钥,并基于非对称加密算法将该身份公钥用于对待分发的第一对称密钥进行加密,从而生成相应的密钥密文。那么,由于该密钥密文仅能够由目标区块链节点所维护的身份私钥所解密,因而能够安全地通过区块链中继通信网络进行传输,而不必担心第一对称密钥在区块链中继通信网络中暴露。进一步的,可以通过源区块链节点的身份私钥为上述的密钥密文生成数字签名,目标区块链节点可以根据源区块链节点的身份公钥对该数字签名进行验证,从而确定密钥密文在传输过程中是否发生了缺失、替换等,防止由于中间人攻击等带来的安全性问题。如前文所述,源区块链节点向目标区块链节点分发第一对称密钥的过程中,所涉及到的身份公私钥对可以为区块链节点的链上节点身份公私钥对,也可以为协商出的诸如动态身份公私钥对等,本说明书并不对此进行限制。
上述的第一消息内容包含中立性验证消息类型标识,该中立性验证消息类型标识用于表明其所处的交互消息为中立性验证消息,而非源区块链节点所发送的其他交互消息。因此,在实施中立性验证的过程中,源区块链节点仍然可以向目标区块链节点正常发送其他交互消息,譬如共识消息、区块同步消息等业务消息,不需要中断区块链业务,从而降低中立性验证对区块链业务的影响。除了中立性验证消息类型标识之外,第一消息内容是否包含其他信息以及包含何种信息,均不影响本说明书的中立性验证方案的实施。
源区块链节点通过区块链中继通信网络发送中立性验证消息时,与相关技术中通过区块链中继通信网络进行消息传输的过程无异。以图2所示的场景为例,如图2所示:假定源区块链节点为Node A、目标区块链节点为Node B,Node A与区块链中继通信网络中的中继节点a相连、Node B与区块链中继通信网络中的中继节点b相连。Node A可以将中立性验证消息发送至中继节点a,由中继节点a将该中立性验证消息路由至中继节点b后,由中继节点b进一步将该中立性验证消息发送至Node B。
在一实施例中,区块链中继通信网络可以对需要传输的消息进行广播,使得所有连接至该区块链中继通信网络的区块链节点均可以接收到消息。例如,中继节点a在收到中立性验证消息后,在区块链中继通信网络中对该中立性验证消息进行广播,并进一步由每个中继节点都将接收到的中立性验证消息转发至自身相连的区块链节点,比如中继节点c会接收到中立性验证消息并转发至区块链节点Node C。当然,如果某一区块链节点并不参与中立性验证,该区块链节点即便收到中立性验证消息也可以不做任何处理,比如可以直接丢弃。
在另一实施例中,中立性验证消息中可以包含接收方节点指示信息,以使区块链中继通信网络将中立性验证消息发送至该接收方节点指示信息对应的区块链节点。此时,区块链中继通信网络对于中立性验证消息的转发将具有针对性,而不会发送至与目标区块链节点无关的中继节点。接收方节点指示信息可以包括目标区块链节点的节点标识。如果存在多个目标区块链节点:一种情况下,每条中立性验证消息中的接收方节点指示信息可以仅为一个目标区块链节点的节点标识,此时需要针对每一目标区块链节点分别发送一条中立性验证消息;另一种情况下,一条中立性验证消息中的接收方节点指示信息可以包括多个目标区块链节点的节点标识,此时仅需要发送一条中立性验证消息。或者,接收方节点指示信息可以包括目标区块链节点所属区块链节点集合的集合标识,尤其是当多个目标区块链节点属于同一个区块链节点集合时,通过该集合标识可以减少接收方节点指示信息的长度。这里的区块链节点集合可以为预先向区块链中继通信网络注册形成,同一区块链节点集合中的区块链节点可以为同一区块链网络中的全部或部分区块链节点,也可以同时包括来自多个区块链网络的区块链节点,可以根据业务需求进行注册,且该区块链节点集合中所含的区块链节点可以根据需求进行增删。
区块链中继通信网络中的各个中继节点可以维护有:各个中继节点之间的连接关系、每个中继节点与区块链节点之间的连接关系。基于所维护的上述信息,中继节点可以生成相应的路由策略,以用于进行消息传输。例如,当中继节点a读取中立性验证消息中的接收方节点指示信息时,确定目标区块链节点为Node B,该中继节点a会确定出自身与连接至该Node B的中继节点b之间的转发路径,并通过该转发路径对中立性验证消息进行转发至中继节点b。如果中继节点a与中继节点b之间存在直接相连的链路,上述转发路径为“中继节点a-中继节点b”,即中继节点a可以将中立性验证消息直接发送至中继节点b,而不会发送至中继节点c。如果中继节点a与中继节点b之间不存在直接相连的链路,或者直接相连的链路出现故障等,上述的转发路径可以为“中继节点a-中继节点c-中继节点b”,则中继节点a可以将中立性验证消息转发至中继节点c;与中继节点a相类似的,中继节点c在确定目标区块链节点为Node B后,也会确定出自身与连接至该Node B的中继节点b之间的转发路径,并通过该转发路径对中立性验证消息进行转发至中继节点b,譬如确定出的转发路径为“中继节点c-中继节点b”,即中继节点c可以将中立性验证消息直接发送至中继节点b。
如果存在上述的区块链节点集合,各个中继节点还可以维护有各个区块链节点集合的信息,包括集合标识、所含的区块链节点等。例如,当中继节点a读取中立性验证消息中的接收方节点指示信息时,确定该接收方节点指示信息为集合标识SID1,且确定出SID1所含的区块链节点为Node B和Node C,那么中继节点a将Node B和Node C分别确定为目标区块链节点,并基于如前所述的方式将中立性验证消息分别路由至Node B相连的中继节点b、Node C相连的中继节点c,此处不再赘述。
在如前所述的实施例中,若源区块链节点通过区块链中继通信网络将密钥分发消息传输至目标区块链节点,则该密钥分发消息的传输过程可以参考上述实施例中针对中立性验证消息的传输过程,此处不再赘述。需要说明的是:如果同一条密钥分发消息需要发送至多个目标区块链节点,那么该密钥分发消息中应当包含分别对应于每一目标区块链节点的数据集:每一数据集包括由相应目标区块链节点的身份公钥生成的密钥密文和相应的数字签名。假定Node A希望将第一对称密钥分发至Node B和Node C,则密钥分发消息中包括Node B对应的数据集M1、Node C对应的数据集M2,其中:M1包括由Node B的身份公钥生成的密钥密文enc_key_B和相应的数字签名enc_key_B_sign,M2包括由Node C的身份公钥生成的密钥密文enc_key_C和相应的数字签名enc_key_C_sign。相应的,每一目标区块链节点在收到密钥分发消息后,需要找到自身对应的数据集,以便实现前文所述的解密和验签。每一数据集可以包含相应的目标区块链节点的节点标识,以便于各个目标区块链节点准确找到自身对应的数据集;或者,数据集可以不包含相应的目标区块链节点的节点标识,每个目标区块链节点需要分别对各个数据集进行尝试,直至找到自身对应的数据集。
在一实施例中,已接入区块链中继通信网络的区块链节点,可以定期实施本说明书的中立性验证方案,以针对区块链中继通信网络进行中立性验证。在另一实施例中,每个区块链节点可以随时发起针对区块链中继网络的中立性验证,譬如某个区块链节点刚接入该区块链中继通信网络,或者某个区块链节点在运行过程中对于区块链中继通信网络的中立性存疑时,都可以发起上述的中立性验证。当某个区块链节点希望发起上述的中立性验证时,该区块链节点可以由普通模式切换至中立性验证模式,从而以本说明书中的源区块链节点这一角色而运行。在运行过程中,源区块链节点可以通过区块链中继通信网络向目标区块链节点发送中立性验证请求,以及实现本说明书中涉及源区块链节点的其他功能。相应的,目标区块链节点根据接收到的中立性验证请求由普通模式切换至中立性验证模式,以针对源区块链节点发送的中立性验证消息进行响应。其中,当运行于中立性验证模式时,区块链节点不仅可以继续完成在普通模式下的消息交互和处理功能,譬如对共识消息、区块同步消息等的收发和处理等,还可以实现本说明书中的中立性验证方案。
通过为区块链节点设置诸如普通模式和中立性验证模式等不同的运行模式,使得区块链节点可以根据实际情况选择是否参与中立性验证,例如可以通过避免参与中立性验证以降低对自身业务的影响。当然,对于上述运行模式的选择可以是非必要的,例如所有区块链节点可以默认运行在中立性验证模式下,以便于随时实现对区块链中继通信网络的中立性验证。
步骤104,所述目标区块链节点根据所述源区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第一对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述中立性验证消息类型标识的情况下通过所述区块链中继通信网络向所述源区块链节点返回接收确认消息;以及,所述目标区块链节点针对在预设时间段内接收到且由所述源区块链节点的身份公钥验签成功的交互消息进行数据量统计,得到接收数据量。
目标区块链节点在收到中立性验证消息后,可以分别获取该中立性验证消息所含的加密后消息内容和数字签名。如前所述,目标区块链节点可以根据源区块链节点的节点标识,从自身维护的区块链节点列表中获取源区块链节点的链上节点身份公钥,或者该源区块链节点的动态身份公钥等其他类型的身份公钥,以用于对上述的数字签名进行验签。由于在中立性验证消息中,定义了该数字签名是针对加密后消息内容而生成,因而目标区块链节点会根据加密后消息内容完成对数字签名的验证。如果验证成功,表明该中立性验证消息确实来自于源区块链节点,且传输过程中没有发生数据缺失,也没有受到中间人攻击。如果验证失败,表明加密后消息内容和数字签名中的至少之一存在异常,目标区块链节点可以丢弃或返回告警消息。
中立性验证消息中可以包含发送方节点标识信息,该发送方节点标识信息用于记录作为发送方的区块链节点的节点标识。因此,在源区块链节点所发出的中立性验证消息中,发送方节点标识信息的取值为源区块链节点的节点标识。相应的,目标区块链节点可以从发送方节点标识信息中提取源区块链节点的节点标识,并根据提取的节点标识确定源区块链节点对应的身份公钥,进而根据确定的身份公钥对中立性验证消息中的数字签名进行验签。
当然,中立性验证消息中的发送方节点标识信息只是用于表明发送方节点身份的一种方式,目标区块链节点还可以通过其他方式获得发送方节点身份,本说明书并不对此进行限制。例如,区块链中继通信网络在获得中立性验证消息后,可以将该中立性验证消息封装为中继消息,并在区块链中继通信网络中传输该中继消息。其中,中继消息中可以封装有源区块链节点的节点标识,则源区块链节点的节点标识可由区块链中继通信网络从中继消息中解封后告知目标区块链节点。具体的,以上述的Node A向Node B分发密钥为例:中继节点a收到Node A发送的中立性验证消息后,将该中立性验证消息封装为中继消息,该封装过程中会在该中继消息中添加Node A的节点标识。相应的,中继节点b收到该中继消息后,可以通过解封获取Node A的节点标识,并将该节点标识与中立性验证消息一并发送至NodeB,使得Node B获知该中立性验证消息来自Node A。
目标区块链节点可以通过自身维护的第一对称密钥对加密后消息内容进行解密。如前所述,如果接入区块链中继通信网络的所有区块链节点维护有统一的第一对称密钥,那么目标区块链节点可以直接使用该第一对称密钥对加密后消息内容进行解密。如果接入区块链中继通信网络的所有区块链节点所维护的第一对称密钥并不统一,那么目标区块链节点需要通过前述方式确定源区块链节点的节点标识,并据此确定出对应于源区块链节点的第一对称密钥并解密上述的加密后消息内容。目标区块链节点可以预先维护有节点标识与第一对称密钥的对应关系,从而根据源区块链节点的节点标识确定出所需采用的第一对称密钥。目标区块链节点可以预先维护有集合标识与第一对称密钥的对应关系,从而根据源区块链节点的节点标识确定该源区块链节点所属的集合标识,并进而根据该集合标识确定出所需采用的第一对称密钥。总之,基于目标区块链节点所维护的对应关系,目标区块链节点总是能够准确获取所需采用的第一对称密钥,从而实现对上述加密后消息内容的解密操作。
如前所述,源区块链节点在发送中立性验证消息的同时,还会同时发送其他类型的交互消息。如果其他类型的交互消息也采用加密发送,那么目标区块链节点在接收到交互消息后,将无法直接确定出该交互消息是否为中立性验证消息或其他类型的交互消息。因此,目标区块链节点需要通过第一对称密钥对所接收到的交互消息中的加密后消息内容进行解密,并在解密出的消息内容中包含中立性验证消息类型标识的情况下,确定接收到的交互消息为上述的中立性验证消息。如果解密出的消息内容中未包含中立性验证消息类型标识,目标区块链节点确认接收到的交互消息并非中立性验证消息。当然,对于并非中立性验证消息的交互消息,目标区块链节点可以按照相关技术对该交互消息做出响应处理,此处不再赘述。
如果验签成功且解密得到的消息内容中包含中立性验证消息类型标识,目标区块链节点可以认为接收到来自源区块链节点的中立性验证消息,因此通过区块链中继通信网络向源区块链节点返回接收确认消息。对于该接收确认消息的传输过程,可以参考上文中对于中立性验证消息的传输过程,只是发送方与接收方之间发生了对调,但并不影响传输原理,因而此处不再赘述。
接收确认消息可以采用明文消息。而出于提升安全性的考虑,可以对接收确认消息进行隐私传输。例如,接收确认消息可以包括由第二对称密钥对第二消息内容进行加密生成的第二加密后消息内容和由目标区块链节点的身份私钥为第二加密后消息内容生成的数字签名,且第二消息内容包含接收确认消息类型标识。相应的,源区块链节点在收到来自目标区块链节点的交互消息时,根据目标区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,如果验签通过则确认该交互消息来自目标区块链节点。进一步地,如果目标区块链节点还同时发送诸如前文所述的业务消息或其他类型的交互消息,并且这些交互消息也采用隐私传输,那么源区块链节点需要用第二对称密钥对交互消息所含的加密后消息内容进行解密,如果解密得到的消息内容中包含上述的接收确认消息类型标识,即可确认收到的交互消息为上述的接收确认消息。可见,在隐私传输的场景下,源区块链节点可以在验签成功且解密得到的消息内容中包含接收确认消息类型标识的情况下,确定接收到目标区块链节点发送的接收确认消息,因而可以将该交互消息的接收时刻确认为接收确认消息的接收时刻,以用于在下文中计算区块链中继通信网络的往返时延(Round-TripTime,RTT)。为了确保RTT的计算准确性,目标区块链节点可以在确认接收到来自源区块链节点的中立性验证消息后立即返回接收确认消息,即目标区块链节点不会主动造成不必要的等待或延时,以便于尽早返回接收确认消息。
第二对称密钥可以与第一对称密钥相同。当然,第二对称密钥也可以与第一对称密钥不同,但第二对称密钥的生成方式可以参考前文所述的第一对称密钥的生成方式,譬如由源区块链节点与目标区块链节点协商、由密钥管理服务器分发、由目标区块链节点向源区块链节点分发等,此处不再一一赘述,且本说明书并不对此进行限制。
目标区块链节点可能同时接收到多个区块链节点所发送的交互消息。通过对交互消息所含的数字签名进行验证,目标区块链节点可以区分和确认交互消息的发送方,并针对在预设时间段内接收到且发送方为源区块链节点的交互消息进行数据量统计,得到接收数据量。如果中立性验证是周期性的,那么目标区块链节点对于接收数据量的统计也可以是周期性的,上述的预设时间段可以为各个统计周期。如果中立性验证是非周期性的,譬如在源区块链节点的触发下而发起,那么目标区块链节点可以在确认中立性验证已发起或在接收到首条来自源区块链节点的中立性验证消息时启动统计,且预设时间段为启动统计的时刻(即启动时刻)与预设时长所定义的时间段。其中,上述的“首条”是指当次中立性验证过程中的首条,而并不仅指历史上的首条。
如前所述,源区块链节点在实施中立性验证的过程中,向目标区块链节点发送的交互消息除了中立性验证消息之外,还可能包含其他类型的消息。目标区块链节点在统计过程中,既可以是针对中立性验证消息进行统计,也可以是针对所有类型的交互消息进行统计,本说明书并不对此进行限制。如果仅统计中立性验证消息,那么源区块链节点可以适当增加对中立性验证消息的发送数量,以使得针对该中立性验证消息所统计的接收数据量具有统计意义。当然,如果是针对所有类型的交互消息进行统计,那么源区块链节点无需发送很多的中立性验证消息,这样一方面可以由其他类型的交互消息来提供足够的数据量以使得所统计的接收数据量具有统计意义,另一方面可以避免过多的中立性验证消息对其他类型的交互消息造成较大影响,即降低中立性验证对正常业务造成的影响。
步骤106,所述源区块链节点根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,以及将所述接收数据量与自身在所述预设时间段内通过所述区块链中继通信网络向所述目标区块链节点所发出的交互消息的发送数据量进行比较;其中,判定所述区块链中继通信网络具有中立性的条件包括:所述往返时延匹配于所述源区块链节点与所述目标区块链节点之间的实际环境,且所述接收数据量与所述发送数据量一致。
源区块链节点向目标区块链节点所发送的中立性验证消息,可以为一条或多条,本说明书并不对此进行限制。如果源区块链节点通过区块链中继通信网络向目标区块链节点发送多条中立性验证消息,那么在计算上述的往返时延时,源区块链节点可以计算多条中立性验证消息的平均往返时延,以作为上述区块链中继通信网络的往返时延。其中,上述的多条中立性验证消息可由源区块链节点在前述预设时间段内周期性发送,这样可以将多条中立性验证消息的传输分摊在该预设时间段内的不同时刻,既可以避免集中发送给正常业务造成不利影响,又可以分别获知区块链中继通信网络在不同时刻的时延情况,有利于提升计算的往返时延的准确性。
如果源区块链节点在中立性验证过程中会发送多条中立性验证消息,那么源区块链节点可以在每发送一条中立性验证消息之后,可以等待接收到目标区块链节点返回的接收确认消息,然后再发送下一条中立性验证消息,从而避免混淆中立性验证消息与接收确认消息之间的对应关系,比如将前一条中立性验证消息的发送时刻与后一条接收确认消息的接收时刻共同计算往返时延等,防止造成对往返时延的错误计算。或者,中立性验证消息的消息内容中可以包含消息编号,且目标区块链节点在获取对应于中立性验证消息的接收确认消息时,该接收确认消息的消息内容中也可以包含相同的消息编号,这样源区块链节点可以根据消息编号准确识别出中立性验证消息与接收确认消息之间的对应关系,使得源区块链节点可以随时发送中立性验证消息而无需等待接收确认消息。
基于源区块链节点与目标区块链节点之间的实际环境,可以获知在两者之间进行消息传输时的正常时延。因此,当源区块链节点确定出的往返时延与该正常时延相匹配时,就表明区块链中继通信网络没有故意对传输的消息造成时延,满足时延合理性。同时,当源区块链节点在预设时间段内统计的发送数据量与目标区块链节点在该预设时间段内所统计的接收数据量一致时,表明区块链中继通信网络在传输过程中没有故意丢弃数据,确保了数据完整性。通过采用加解密技术可以确保区块链中继通信网络无法获知消息内容、避免舞弊,且通过采用数字签名技术可以确保目标区块链节点准确识别来自源区块链节点的交互消息,并验证消息传输过程中是否存在缺失、替换等问题,从而保证了数据隐私性和数据正确性。
综上所述,本说明书通过从数据隐私性、数据正确性、数据完整性和时延合理性等多个维度对区块链中继通信网络进行验证,从而能够全面合理地确定出区块链中继通信网络的中立性。
图3是一示例性实施例提供的一种基于源区块链节点侧的区块链中继通信网络的中立性验证方法的流程图。如图3所示,该方法可以包括:
步骤302,获取中立性验证消息,所述中立性验证消息包括由第一对称密钥对第一消息内容进行加密生成的第一加密后消息内容和由所述源区块链节点的身份私钥为所述第一加密后消息内容生成的数字签名,所述第一消息内容包含中立性验证消息类型标识。
步骤304,通过区块链中继通信网络向目标区块链节点发送所述中立性验证消息,使所述目标区块链节点:根据所述源区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第一对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述中立性验证消息类型标识的情况下通过所述区块链中继通信网络向所述源区块链节点返回接收确认消息;以及,针对在预设时间段内接收到且由所述源区块链节点的身份公钥验签成功的交互消息进行数据量统计,得到接收数据量。
步骤306,根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,以及将所述接收数据量与自身在所述预设时间段内通过所述区块链中继通信网络向所述目标区块链节点所发出的交互消息的发送数据量进行比较;其中,判定所述区块链中继通信网络具有中立性的条件包括:所述往返时延匹配于所述源区块链节点与所述目标区块链节点之间的实际环境,且所述接收数据量与所述发送数据量一致。
如前所述,所述方法还包括:获取密钥分发消息,所述密钥分发消息中包含由所述目标区块链节点的身份公钥对所述第一对称密钥进行加密后的密钥密文,以及由所述源区块链节点的身份私钥为所述密钥密文生成的数字签名;通过所述区块链中继通信网络向所述目标区块链节点发送所述密钥分发消息,使所述目标区块链节点:接收到所述密钥分发消息后,根据所述源区块链节点的身份公钥对所述密钥分发消息中的数字签名进行验签,以及用自身的身份私钥对所述密钥密文进行解密,并在验签成功的情况下将解密得到的对称密钥确定为所述第一对称密钥。
如前所述,所述源区块链节点、所述目标区块链节点的身份公私钥对包括下述任一:
所述源区块链节点、所述目标区块链节点的链上节点身份公私钥对;
所述源区块链节点与所述目标区块链节点通过所述区块链中继通信网络协商的动态身份公私钥对。
如前所述,所述接收确认消息包括由第二对称密钥对第二消息内容进行加密生成的第二加密后消息内容和由所述目标区块链节点的身份私钥为所述第二加密后消息内容生成的数字签名,所述第二消息内容包含接收确认消息类型标识;所述方法还包括:
所述源区块链节点根据所述目标区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第二对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述接收确认消息类型标识的情况下,将该交互消息的接收时刻确认为所述接收确认消息的接收时刻。
如前所述,
所述通过区块链中继通信网络向目标区块链节点发送中立性验证消息,包括:通过所述区块链中继通信网络向所述目标区块链节点发送多条中立性验证消息;
所述根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,包括:计算所述多条中立性验证消息的平均往返时延,以作为所述区块链中继通信网络的往返时延。
如前所述,所述多条中立性验证消息由所述源区块链节点在所述预设时间段内周期性发送。
如前所述,所述中立性验证消息中包含接收方节点指示信息,所述接收方节点指示信息包括:所述目标区块链节点的节点标识,或者所述目标区块链节点所属的区块链节点集合的集合标识。
如前所述,所述方法还包括:通过所述区块链中继通信网络向所述目标区块链节点发送中立性验证请求,使所述目标区块链节点根据接收到的所述中立性验证请求由普通模式切换至中立性验证模式,以针对所述中立性验证消息进行响应。
在图1所示的实施例中,已经对源区块链节点与目标区块链节点之间的交互过程进行了详细描述,图3所示的实施例在源区块链节点的角度对该交互过程所涉及的内容进行了描述,相关细节与解释均可以参考前述的交互过程,此处不再赘述。
图4是一示例性实施例提供的一种基于目标区块链节点侧的区块链中继通信网络的中立性验证方法的流程图。如图4所示,该方法可以包括:
步骤402,接收源区块链节点通过区块链中继通信网络发送的中立性验证消息,所述中立性验证消息包括由第一对称密钥对第一消息内容进行加密生成的第一加密后消息内容和由所述源区块链节点的身份私钥为所述第一加密后消息内容生成的数字签名,所述第一消息内容包含中立性验证消息类型标识。
步骤404,根据所述源区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第一对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述中立性验证消息类型标识的情况下通过所述区块链中继通信网络向所述源区块链节点返回接收确认消息,使所述源区块链节点根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延。
步骤406,针对在预设时间段内接收到且由所述源区块链节点的身份公钥验签成功的交互消息进行数据量统计,得到接收数据量,使所述源区块链节点将所述接收数据量与自身在所述预设时间段内通过所述区块链中继通信网络向所述目标区块链节点所发出的交互消息的发送数据量进行比较;其中,判定所述区块链中继通信网络具有中立性的条件包括:所述往返时延匹配于所述源区块链节点与所述目标区块链节点之间的实际环境,且所述接收数据量与所述发送数据量一致。
如前所述,所述方法还包括:
接收所述源区块链节点通过所述区块链中继通信网络发送的密钥分发消息,所述密钥分发消息中包含由所述目标区块链节点的身份公钥对所述第一对称密钥进行加密后的密钥密文,以及由所述源区块链节点的身份私钥为所述密钥密文生成的数字签名;
根据所述源区块链节点的身份公钥对所述密钥分发消息中的数字签名进行验签,以及用自身的身份私钥对所述密钥密文进行解密,并在验签成功的情况下将解密得到的对称密钥确定为所述第一对称密钥。
如前所述,所述源区块链节点、所述目标区块链节点的身份公私钥对包括下述任一:
所述源区块链节点、所述目标区块链节点的链上节点身份公私钥对;
所述源区块链节点与所述目标区块链节点通过所述区块链中继通信网络协商的动态身份公私钥对。
如前所述,所述接收确认消息包括由第二对称密钥对第二消息内容进行加密生成的第二加密后消息内容和由所述目标区块链节点的身份私钥为所述第二加密后消息内容生成的数字签名,所述第二消息内容包含接收确认消息类型标识;所述接收确认消息用于使所述源区块链节点:根据所述目标区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第二对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述接收确认消息类型标识的情况下,将该交互消息的接收时刻确认为所述接收确认消息的接收时刻。
如前所述,
接收所述源区块链节点通过区块链中继通信网络发送的中立性验证消息,包括:接收所述源区块链节点通过所述区块链中继通信网络发送的多条中立性验证消息;
所述源区块链节点根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,包括:所述源区块链节点计算所述多条中立性验证消息的平均往返时延,以作为所述区块链中继通信网络的往返时延。
如前所述,所述多条中立性验证消息由所述源区块链节点在所述预设时间段内周期性发送。
如前所述,所述中立性验证消息中包含接收方节点指示信息,所述接收方节点指示信息包括:所述目标区块链节点的节点标识,或者所述目标区块链节点所属的区块链节点集合的集合标识。
如前所述,所述方法还包括:
接收所述源区块链节点通过所述区块链中继通信网络发送的中立性验证请求;
根据接收到的所述中立性验证请求由普通模式切换至中立性验证模式,以针对所述中立性验证消息进行响应。
在图1所示的实施例中,已经对源区块链节点与目标区块链节点之间的交互过程进行了详细描述,图4所示的实施例在目标区块链节点的角度对该交互过程所涉及的内容进行了描述,相关细节与解释均可以参考前述的交互过程,此处不再赘述。
下面以如图2所示的区块链节点Node A、Node B为例,结合图5对本说明书的中立性验证方案进行说明。图5是一示例性实施例提供的一种中立性验证的交互流程图。如图5所示,假定Node A希望对自身所接入的区块链中继通信网络进行中立性验证,NodeB为已接入该区块链中继通信网络的其他任一区块链节点,并由该NodeB配合NodeA完成验证过程。在下述交互过程中,NodeA与NodeB之间的交互均是通过区块链中继通信网络而实现,则区块链节点Node A和Node B之间的交互过程可以包括以下步骤:
步骤501,Node A向NodeB分发private_key。
Node A可以通过相关技术中的任意密钥生成算法,生成一对称密钥,以作为上述的private_key。当然,该private_key可以是Node A希望进行密钥分发时临时生成,也可以由Node A在先前已经生成的密钥集合中进行选取,本说明书并不对此进行限制。
Node A可以通过向NodeB发送密钥分发消息来完成密钥分发,该密钥分发消息比如可以为下述的PrivateKeyMsg。例如,Node A确定向Node B分发上述的private_key后,可以从自身维护的区块链节点列表中获取Node B的链上节点身份公钥Pub_key_B,并通过Pub_key_B对private_key进行非对称加密,得到相应的密钥密文enc_private_key。为了防范中间人攻击,Node A可以通过自身的链上节点身份私钥Pri_key_A对enc_private_key进行签名,生成相应的数字签名enc_private_key_sign。另外,Node A还可以为本次分发的private_key确定相应的版本号private_key_ver,以区分于Node A分发过的其他密钥。需要指出的是:除了通过Node A、Node B的链上节点身份信息进行加解密和签名验签之外,还可以通过其他的公私钥对来实现,比如由Node A与Node B协商的动态公私钥对等,本说明书并不对此进行限制。
基于上述信息,Node A可以生成中立性验证消息PrivateKeyMsg,该PrivateKeyMsg可以包含下述字段:
其中,node_id_from字段用于填写Node A的节点ID,node_id_to字段用于填写Node B的节点ID。encrypted_symetric_private_key字段用于填写密钥密文,即上述的enc_private_key。enc_private_key_sign字段用于填写针对密钥密文的数字签名。private_key_ver字段用于填写密钥private_key的版本号。
Node A将PrivateKeyMsg通过区块链中继通信网络发送至Node B。Node A首先将PrivateKeyMsg发送至自身所连接的中继节点a,并由中继节点a基于路由策略直接或间接将PrivateKeyMsg发送至中继节点b,进而由中继节点b将PrivateKeyMsg发送至Node B。由于enc_private_key始终处于密文状态,且只有Node B维护有解密密钥(Node B的链上节点身份私钥Pri_key_B),因而中继节点a、中继节点b和区块链中继通信网络中的其他中继节点都无法获知明文的private_key。
相应的,Node B对PrivateKeyMsg中的enc_private_key_sign进行验签、对enc_private_key进行解密。例如,Node B在接收到PrivateKeyMsg后,根据node_id_from字段中提取的节点ID,从自身维护的区块链节点列表中获取该节点ID对应的链上节点身份公钥,以用于对enc_private_key_sign进行验签。如果PrivateKeyMsg的传输过程无异常,Node B将从node_id_from字段中提取到Node A的节点ID,并进而获取其链上节点身份公钥Pub_key_A,然后根据该Pub_key_A和PrivateKeyMsg中的enc_private_key对enc_private_key_sign进行验签。
Node B可以在验签的过程中,同时根据自身的链上节点身份私钥Pri_key_B对enc_private_key进行解密。Node B也可以在验签成功的情况下才执行解密操作,本说明书并不对此进行限制。当然,即便是并行实施验签和解密,Node B也仅在验签成功的情况下,才会认可解密得到的private_key。
Node B在对enc_private_key_sign验签成功的情况下,确定解密获得的private_key为Node A所分发的对称密钥,并将该private_key关联至Node A。例如,Node B可以将该private_key、private_key_ver与Node A的节点ID进行关联存储。以及,Node B通过区块链中继通信网络向Node A返回PrivateKeyRespMsg消息,向Node A表明自己已经成功获得所分发的密钥private_key。其中,PrivateKeyRespMsg可以包含下述字段:
其中,node_id_from字段用于填写Node B的节点ID,node_id_to字段用于填写Node A的节点ID。node_id_from_sign为Node B通过自身的链上节点身份私钥Pri_key_B对node_id_from字段的内容(即Node B的节点ID)进行签名操作而生成的数字签名。private_key_ver字段为Node B所记录的private_key的版本号信息。
Node B首先将PrivateKeyRespMsg发送至自身所连接的中继节点b,并由中继节点b基于路由策略直接或间接将PrivateKeyRespMsg发送至中继节点a,进而由中继节点a将PrivateKeyRespMsg发送至Node A。
Node A在接收到PrivateKeyRespMsg后,根据node_id_from字段中提取的节点ID,从自身维护的区块链节点列表中获取该节点ID对应的链上节点身份公钥,以用于对node_id_from_sign进行验签。如果PrivateKeyRespMsg的传输过程无异常,Node A将从node_id_from字段中提取到Node B的节点ID,并进而获取其链上节点身份公钥Pub_key_B,然后根据该Pub_key_B和PrivateKeyRespMsg中的node_id_from对node_id_from_sign进行验签。在验签成功的情况下,Node A可以确定该PrivateKeyRespMsg来自Node B,从而确定private_key已经成功分发至Node B。
步骤502a,Node A记录发送数据量和发送时刻。
步骤502b,Node A向Node B发送中立性验证消息。
其中,步骤502a与步骤502b之间的先后顺序可以对调,而并不影响方案的实施。
假定Node A希望对区块链中继通信网络进行中立性验证,Node A和Node B可以切换至中立性验证模式,使得Node A和Node B可以执行与中立性验证相关的操作。例如,NodeA生成中立性验证消息NeutralVerifyMsg,譬如可以包含下述字段:
其中,node_id_from字段用于填写Node A的节点ID,node_id_to字段用于填写Node B的节点ID。encrypted_raw_data字段用于填写加密后消息内容enc_raw_data,encrypted_raw_data_sign为针对加密后消息内容enc_raw_data的签名。
在生成上述NeutralVerifyMsg时,Node A首先获取明文的消息内容raw_data,该消息内容raw_data至少包含中立性验证消息类型标识。然后,Node A可以通过前述的对称密钥private_key对该消息内容raw_data进行加密,以生成上述的加密后消息内容enc_raw_data。进一步地,Node A利用自身的身份私钥对该加密后消息内容enc_raw_data进行签名,生成相应的数字签名encrypted_raw_data_sign。
Node A记录的发送时刻,即为Node A将NeutralVerifyMsg发出的时刻。Node A记录的发送数据量,可以为Node A在预设时间段内向Node B发送的所有交互消息的数据量之和,这里的交互消息既包括上述的NeutralVerifyMsg,也包括共识消息、区块同步消息等其他类型的业务消息,可以确保统计出的发送数据量足够大而具有可比性。
Node A对于发送数据量的记录是持续性的。因此,Node A记录发送数据量的动作,并不仅是针对NeutralVerifyMsg的数据量进行记录,而是指针对上述预设时间段内的所有交互消息的数据量进行累计,直至最终得到该预设时间段内所有交互消息的数据量之和。
步骤503,Node B对接收到的交互消息进行验签、解密。
Node B从区块链中继通信网络中接收到交互消息时,由于该交互消息的消息内容处于加密状态,因而无法直接确定该交互消息是否为NeutralVerifyMsg。同时,虽然node_id_from字段包含Node A的节点标识,但是Node B需要对此进行验证。
因此,Node B首先获取Node A的身份公钥,并通过该身份公钥来验证交互消息中所含的数字签名encrypted_raw_data_sign。如果验证成功,则Node B可以确认该交互消息来自Node A,且该交互消息的内容完整、无误。进而,Node B根据前述的对称密钥private_key对加密后消息内容enc_raw_data进行解密:如果解密成功,且解密得到的消息内容中包含前述的中立性验证消息类型标识,则Node B确认该交互消息为中立性验证消息。结合验签和解密的结果,Node B可以确认接收到的交互消息是否为Node A发送的NeutralVerifyMsg。
步骤504a,Node B向Node A发送接收确认消息。
步骤504b,Node B统计接收数据量。
其中,步骤504a与步骤504b之间的先后顺序可以对调,而并不影响方案的实施。
Node B在确定接收到来自Node A的NeutralVerifyMsg后,可以立即向Node A返回接收确认消息NeutralVerifyRespMsg,譬如可以包含下述字段:
其中,node_id_from字段用于填写Node B的节点ID,node_id_to字段用于填写Node A的节点ID。encrypted_raw_data_Resp字段用于填写加密后消息内容enc_raw_data_Resp,encrypted_raw_data_Resp_sign为针对加密后消息内容enc_raw_data_Resp的签名。
在生成上述NeutralVerifyRespMsg时,Node B首先获取明文的消息内容raw_data_Resp,该消息内容raw_data_Resp至少包含接收确认消息类型标识。然后,Node B可以通过前述的对称密钥private_key对该消息内容raw_data_Resp进行加密,以生成上述的加密后消息内容enc_raw_data_Resp。进一步地,Node B利用自身的身份私钥对该加密后消息内容enc_raw_data_Resp进行签名,生成相应的数字签名encrypted_raw_data_Resp_sign。
Node A从区块链中继通信网络中接收到交互消息时,由于该交互消息的消息内容处于加密状态,因而无法直接确定该交互消息是否为NeutralVerifyRespMsg。同时,虽然node_id_from字段包含Node B的节点标识,但是Node A需要对此进行验证。因此,Node A首先获取Node B的身份公钥,并通过该身份公钥来验证交互消息中所含的数字签名encrypted_raw_data_Resp_sign。如果验证成功,则Node A可以确认该交互消息来自NodeB,且该交互消息的内容完整、无误。进而,Node A根据前述的对称密钥private_key对加密后消息内容enc_raw_data_Resp进行解密:如果解密成功,且解密得到的消息内容中包含前述的接收确认消息类型标识,则Node A确认该交互消息为接收确认消息。结合验签和解密的结果,Node A可以确认接收到的交互消息是否为Node B发送的NeutralVerifyRespMsg。
在确认接收到来自Node B的NeutralVerifyRespMsg后,Node A确认对该NeutralVerifyRespMsg的接收时刻。实际上,Node A可以在接收到每条交互消息时都分别记录其相应的接收时刻,然后在通过验签和解密操作确认出某一交互消息为NeutralVerifyRespMsg时,确认该NeutralVerifyRespMsg对应的接收时刻。
Node B记录的发送数据量,可以为Node B在预设时间段内接收到来自Node A的所有交互消息的数据量之和,这里的交互消息既包括上述的NeutralVerifyMsg,也包括共识消息、区块同步消息等其他类型的业务消息,可以确保统计出的发送数据量足够大而具有可比性。Node B对于发送数据量的记录是持续性的。因此,Node B记录发送数据量的动作,并不仅是针对NeutralVerifyMsg的数据量进行记录,而是指针对上述预设时间段内的所有交互消息的数据量进行累计,直至最终得到该预设时间段内所有交互消息的数据量之和。
步骤505,Node B向Node A发送接收数据量。
步骤506,Node A计算RTT、比较数据量。
Node B可以在上述的预设时间段结束之后的任意时刻,将统计得到的接收数据量发送至Node A。当然,也可以由Node A向Node B发起获取请求,使得Node B响应于该获取请求而返回上述的接收数据量。因此,在一些情况下,步骤506中由Node A计算RTT的步骤可能早于步骤505,可以根据实际情况进行调整。
如前所述,Node A可以统计自身在预设时间段内所发交互消息的发送数据量。同时,Node A可以通过步骤505获取Node B统计得到的接收数据量。因此,Node A可以将该发送数据量与接收数据量进行比较:如果两者一致,则表明区块链中继通信网络在消息传输过程中没有丢弃数据;否则,表明区块链中继通信网络存在丢弃数据的情况,判定其不具有中立性。其中,可以在发送数据量与接收数据量完全相同的情况下,判定两者一致;或者,可以在发送数据量与接收数据量之间的差值不大于预设数值的情况下,判定两者一致,可以根据实际需求进行设定。
Node A根据前文所述的发送时刻和接收时刻之间的差值,可以确定区块链中继通信网络在针对NeutralVerifyMsg和NeutralVerifyRespMsg进行传输时所形成的RTT。如果Node A在预设时间段内发送了多条NeutralVerifyMsg,那么Node A可以获得多组发送时刻和接收时刻,并且可以将这些时刻数据计算得到的RTT进行均值计算,以作为最终区块链中继通信网络的RTT。当RTT的数值不大于预设时延时,Node A可以确定区块链中继通信网络的时延具有合理性;否则,表明区块链中继通信网络存在故意延迟消息传输的情况,判定其不具有中立性。
此外,通过采用加解密技术可以确保区块链中继通信网络无法获知消息内容、避免舞弊,且通过采用数字签名技术可以确保Node B准确识别来自Node A的交互消息,并验证消息传输过程中是否存在缺失、替换等问题,从而保证了数据隐私性和数据正确性。
综上所述,通过本说明书的技术方案,区块链节点可以从数据隐私性、数据正确性、数据完整性和时延合理性等多个维度对区块链中继通信网络进行验证,从而能够全面合理地确定出区块链中继通信网络的中立性。
图6是一示例性实施例提供的一种区块链中继通信网络的中立性验证系统的示意图。如图6所示,该系统可以包括:源区块链节点601和目标区块链节点602;其中:
所述源区块链节点601可以通过区块链中继通信网络向所述目标区块链节点602发送中立性验证消息,所述中立性验证消息包括由第一对称密钥对第一消息内容进行加密生成的第一加密后消息内容和由所述源区块链节点601的身份私钥为所述第一加密后消息内容生成的数字签名,所述第一消息内容包含中立性验证消息类型标识;
所述目标区块链节点602可以根据所述源区块链节点601的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第一对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述中立性验证消息类型标识的情况下通过所述区块链中继通信网络向所述源区块链节点601返回接收确认消息;以及,所述目标区块链节点602可以针对在预设时间段内接收到且由所述源区块链节点601的身份公钥验签成功的交互消息进行数据量统计,得到接收数据量;
所述源区块链节点601可以根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,以及将所述接收数据量与自身在所述预设时间段内通过所述区块链中继通信网络向所述目标区块链节点602所发出的交互消息的发送数据量进行比较;其中,判定所述区块链中继通信网络具有中立性的条件包括:所述往返时延匹配于所述源区块链节点601与所述目标区块链节点602之间的实际环境,且所述接收数据量与所述发送数据量一致。
可选的,
所述源区块链节点601可以通过所述区块链中继通信网络向所述目标区块链节点602发送密钥分发消息,所述密钥分发消息中包含由所述目标区块链节点602的身份公钥对所述第一对称密钥进行加密后的密钥密文,以及由所述源区块链节点601的身份私钥为所述密钥密文生成的数字签名;
所述目标区块链节点602接收到所述密钥分发消息后,可以根据所述源区块链节点601的身份公钥对所述密钥分发消息中的数字签名进行验签,以及用自身的身份私钥对所述密钥密文进行解密,并在验签成功的情况下将解密得到的对称密钥确定为所述第一对称密钥。
可选的,所述源区块链节点601、所述目标区块链节点602的身份公私钥对包括下述任一:
所述源区块链节点601、所述目标区块链节点602的链上节点身份公私钥对;
所述源区块链节点601与所述目标区块链节点602通过所述区块链中继通信网络协商的动态身份公私钥对。
可选的,所述接收确认消息包括由第二对称密钥对第二消息内容进行加密生成的第二加密后消息内容和由所述目标区块链节点602的身份私钥为所述第二加密后消息内容生成的数字签名,所述第二消息内容包含接收确认消息类型标识;
所述源区块链节点601可以根据所述目标区块链节点602的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第二对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述接收确认消息类型标识的情况下,将该交互消息的接收时刻确认为所述接收确认消息的接收时刻。
可选的,
所述源区块链节点601可以通过区块链中继通信网络向目标区块链节点602发送中立性验证消息,包括:所述源区块链节点601通过所述区块链中继通信网络向所述目标区块链节点602发送多条中立性验证消息;
所述源区块链节点601可以根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,包括:所述源区块链节点601计算所述多条中立性验证消息的平均往返时延,以作为所述区块链中继通信网络的往返时延。
可选的,所述多条中立性验证消息由所述源区块链节点601在所述预设时间段内周期性发送。
可选的,所述中立性验证消息中包含接收方节点指示信息,所述接收方节点指示信息包括:所述目标区块链节点602的节点标识,或者所述目标区块链节点602所属的区块链节点集合的集合标识。
可选的:
所述源区块链节点601可以通过所述区块链中继通信网络向所述目标区块链节点602发送中立性验证请求;
所述目标区块链节点602可以根据接收到的所述中立性验证请求由普通模式切换至中立性验证模式,以针对所述中立性验证消息进行响应。
图7是一示例性实施例提供的一种设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图8,区块链中继通信网络的中立性验证装置可以应用于如图7所示的设备中,譬如该设备可以为源区块链节点,以实现本说明书的技术方案。其中,该区块链中继通信网络的中立性验证装置可以包括:
获取单元801,用于获取中立性验证消息,所述中立性验证消息包括由第一对称密钥对第一消息内容进行加密生成的第一加密后消息内容和由所述源区块链节点的身份私钥为所述第一加密后消息内容生成的数字签名,所述第一消息内容包含中立性验证消息类型标识;
发送单元802,用于通过区块链中继通信网络向目标区块链节点发送所述中立性验证消息,使所述目标区块链节点:根据所述源区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第一对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述中立性验证消息类型标识的情况下通过所述区块链中继通信网络向所述源区块链节点返回接收确认消息;以及,针对在预设时间段内接收到且由所述源区块链节点的身份公钥验签成功的交互消息进行数据量统计,得到接收数据量;
处理单元803,用于根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,以及将所述接收数据量与自身在所述预设时间段内通过所述区块链中继通信网络向所述目标区块链节点所发出的交互消息的发送数据量进行比较;其中,判定所述区块链中继通信网络具有中立性的条件包括:所述往返时延匹配于所述源区块链节点与所述目标区块链节点之间的实际环境,且所述接收数据量与所述发送数据量一致。
可选的,
所述获取单元801还用于:获取密钥分发消息,所述密钥分发消息中包含由所述目标区块链节点的身份公钥对所述第一对称密钥进行加密后的密钥密文,以及由所述源区块链节点的身份私钥为所述密钥密文生成的数字签名;
所述发送单元802还用于:通过所述区块链中继通信网络向所述目标区块链节点发送所述密钥分发消息,使所述目标区块链节点:接收到所述密钥分发消息后,根据所述源区块链节点的身份公钥对所述密钥分发消息中的数字签名进行验签,以及用自身的身份私钥对所述密钥密文进行解密,并在验签成功的情况下将解密得到的对称密钥确定为所述第一对称密钥。
可选的,所述源区块链节点、所述目标区块链节点的身份公私钥对包括下述任一:
所述源区块链节点、所述目标区块链节点的链上节点身份公私钥对;
所述源区块链节点与所述目标区块链节点通过所述区块链中继通信网络协商的动态身份公私钥对。
可选的,所述接收确认消息包括由第二对称密钥对第二消息内容进行加密生成的第二加密后消息内容和由所述目标区块链节点的身份私钥为所述第二加密后消息内容生成的数字签名,所述第二消息内容包含接收确认消息类型标识;所述装置还包括:
所述处理单元803还用于:根据所述目标区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第二对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述接收确认消息类型标识的情况下,将该交互消息的接收时刻确认为所述接收确认消息的接收时刻。
可选的,
所述通过区块链中继通信网络向目标区块链节点发送中立性验证消息,包括:通过所述区块链中继通信网络向所述目标区块链节点发送多条中立性验证消息;
所述根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,包括:计算所述多条中立性验证消息的平均往返时延,以作为所述区块链中继通信网络的往返时延。
可选的,所述多条中立性验证消息由所述源区块链节点在所述预设时间段内周期性发送。
可选的,所述中立性验证消息中包含接收方节点指示信息,所述接收方节点指示信息包括:所述目标区块链节点的节点标识,或者所述目标区块链节点所属的区块链节点集合的集合标识。
可选的,
所述发送单元802还用于:通过所述区块链中继通信网络向所述目标区块链节点发送中立性验证请求,使所述目标区块链节点根据接收到的所述中立性验证请求由普通模式切换至中立性验证模式,以针对所述中立性验证消息进行响应。
请参考图9,区块链中继通信网络的中立性验证装置可以应用于如图7所示的设备中,譬如该设备可以为目标区块链节点,以实现本说明书的技术方案。其中,该区块链中继通信网络的中立性验证装置可以包括:
消息接收单元901,用于接收源区块链节点通过区块链中继通信网络发送的中立性验证消息,所述中立性验证消息包括由第一对称密钥对第一消息内容进行加密生成的第一加密后消息内容和由所述源区块链节点的身份私钥为所述第一加密后消息内容生成的数字签名,所述第一消息内容包含中立性验证消息类型标识;
消息处理单元902,用于根据所述源区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第一对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述中立性验证消息类型标识的情况下通过所述区块链中继通信网络向所述源区块链节点返回接收确认消息,使所述源区块链节点根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延;
数据量统计单元903,用于针对在预设时间段内接收到且由所述源区块链节点的身份公钥验签成功的交互消息进行数据量统计,得到接收数据量,使所述源区块链节点将所述接收数据量与自身在所述预设时间段内通过所述区块链中继通信网络向所述目标区块链节点所发出的交互消息的发送数据量进行比较;其中,判定所述区块链中继通信网络具有中立性的条件包括:所述往返时延匹配于所述源区块链节点与所述目标区块链节点之间的实际环境,且所述接收数据量与所述发送数据量一致。
可选的,
所述消息接收单元901还用于:接收所述源区块链节点通过所述区块链中继通信网络发送的密钥分发消息,所述密钥分发消息中包含由所述目标区块链节点的身份公钥对所述第一对称密钥进行加密后的密钥密文,以及由所述源区块链节点的身份私钥为所述密钥密文生成的数字签名;
所述消息处理单元902还用于:根据所述源区块链节点的身份公钥对所述密钥分发消息中的数字签名进行验签,以及用自身的身份私钥对所述密钥密文进行解密,并在验签成功的情况下将解密得到的对称密钥确定为所述第一对称密钥。
可选的,所述源区块链节点、所述目标区块链节点的身份公私钥对包括下述任一:
所述源区块链节点、所述目标区块链节点的链上节点身份公私钥对;
所述源区块链节点与所述目标区块链节点通过所述区块链中继通信网络协商的动态身份公私钥对。
可选的,所述接收确认消息包括由第二对称密钥对第二消息内容进行加密生成的第二加密后消息内容和由所述目标区块链节点的身份私钥为所述第二加密后消息内容生成的数字签名,所述第二消息内容包含接收确认消息类型标识;所述接收确认消息用于使所述源区块链节点:根据所述目标区块链节点的身份公钥对接收到的交互消息所含的数字签名进行验签,以及用所述第二对称密钥对所述交互消息所含的加密后消息内容进行解密,并在验签成功且解密得到的消息内容中包含所述接收确认消息类型标识的情况下,将该交互消息的接收时刻确认为所述接收确认消息的接收时刻。
可选的,
所述消息接收单元901具体用于:接收所述源区块链节点通过所述区块链中继通信网络发送的多条中立性验证消息;
所述消息处理单元902具体用于:根据所述中立性验证消息的发送时刻和所述接收确认消息的接收时刻计算所述区块链中继通信网络的往返时延,包括:所述源区块链节点计算所述多条中立性验证消息的平均往返时延,以作为所述区块链中继通信网络的往返时延。
可选的,所述多条中立性验证消息由所述源区块链节点在所述预设时间段内周期性发送。
可选的,所述中立性验证消息中包含接收方节点指示信息,所述接收方节点指示信息包括:所述目标区块链节点的节点标识,或者所述目标区块链节点所属的区块链节点集合的集合标识。
可选的,
所述消息接收单元901还用于:接收所述源区块链节点通过所述区块链中继通信网络发送的中立性验证请求;
所述消息处理单元902还用于:根据接收到的所述中立性验证请求由普通模式切换至中立性验证模式,以针对所述中立性验证消息进行响应。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。