节点准入方法、共识方法、装置、电子设备及存储介质与流程

    专利2022-07-07  42


    本申请涉及区块链技术领域,具体而言,涉及一种节点准入方法、共识方法、装置、电子设备及存储介质。



    背景技术:

    联盟链具有一定的准入机制,参与共识的节点与普通节点也做了权利上的区分,从而降低了受到恶意节点干扰的风险,有助于提高共识的效率。

    目前,联盟链的准入机制引入了基于身份认证的群组概念,将区块链网络中的节点分为普通节点、核心节点、共识节点、验证节点等不同角色,赋予不同权限,并承担不同功能的功能。

    目前联盟链的准入机制普遍采用基于ca(certificateauthority,证书颁发机构)中心和数字证书的认证方式,而可参与共识的节点(本文简称为共识节点)之间构建了区块链核心的共识网络。通过ca中心向不同角色的节点发放不同的数字证书,使节点和共识网络间可以实现双向认证、密钥协商、通道加密等安全措施,防止恶意节点非法接入区块链网络,甚至侵入核心的共识网络。

    但是,该准入方式通过是在相对固定的一些验证节点或ca中心上进行准入认证,对于非法节点针对性攻击共识网络中的某个固定位置的共识节点的情况,防御性能不佳,且相关事务集中在验证节点或ca中心上,容易导致验证节点或ca中心负载过重。

    此外,通用的数字证书是纯软件形式,仅依赖数字证书的身份认证只能证明通讯交互的双方节点所持有数字证书是合法的,而不能保证数字证书是否被复制和冒用。从监管的角度来说,这样的形式也不利于对共识节点的控制,不适于特定行业下的监管需要。而且,因为证书和验证过程中没有跟区块链状态信息相关联,所以不能证明节点是合法的活跃的安全节点,还是伪装的恶意节点或被控制的污染节点。因此,如果没有针对区块链网络定制的准入机制,不仅会带来对区块链共识网络的安全风险,也给有关部门在监管区块链网络时造成困难。

    另一方面,作为区块链核心技术之一的共识机制实现了区块链网络节点之间数据的一致性,共识机制的合理性是影响到区块链工作效率和安全性的主要因素之一。

    共识机制是区块链的核心环节之一。目前,在节点准入机制的前提下,在区块链核心的共识网络中引入了以bft(byzantinefaulttolerance,拜占庭容错)为基础的拜占庭类共识算法。即在共识网络中通过拜占庭投票的方式对提出的区块进行共识,省去了挖矿所需的算力消耗,从而降低了出块时间和对资源的消耗。然而目前的以bft为基础的共识机制中仍存在以下问题:

    对于出块权的决定方法,bft通常采用leader(领导者)机制,由leader负责提出每回合的区块提议,再交由其他共识节点进行投票。然而目前的leader确定机制普遍采用的方式是以某种算法确定出一个范围,将这个范围内的所有共识节点作为leader候选人组成提议组,每个leader候选人在本回合都会提出区块提议,再由各共识节点对所有提出的区块提议按一定优先级进行投票,选定出本回合中需要共识的区块,然后才能进入对此区块的共识投票阶段。这无疑又增加了共识的难度,降低了共识效率。

    在每个回合中,由于需要每个共识节点都广播自己的投票,并计算处理其他共识节点发来的投票,所以随着共识节点数量的增加,容易造成网络风暴堵塞共识网络,也会因每个共识节点都需要处理的所有共识节点的消息而增加计算负担。

    每个共识节点在等待其他共识节点发来投票时,都需要等待足够的网络延迟时间,以保证全网大部分共识节点的状态能保持同步之后,才能进入下一步的处理。这种同步等待的方式也对提高共识效率造成阻碍。



    技术实现要素:

    为能够在一定程度上解决现有准入机制中,节点准入的门槛控制较松散,且对于非法节点针对性攻击共识网络中的某个固定位置的共识节点的情况,防御性能不佳,且容易导致共识网络中节点负载不均的问题,本申请实施例中提供了一种共识节点准入方法,应用于待接入共识节点中,包括:

    生成自身的公钥、私钥和唯一标识;根据所述私钥以及所述唯一标识,采用可验证随机函数生成可验证随机数vh和所述vh的证明vp;根据所述vh确定出第一选择基数;基于所述第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准从所述共识网络中选择出目标共识节点;连接所述目标共识节点,并向所述目标共识节点发送包含所述公钥、所述vh和所述vp的注册申请消息,以供所述目标共识节点根据所述公钥和所述vp,对待接入共识节点进行验证。

    通过上述实现过程,待接入共识节点根据自身的私钥和唯一标识,通过vrf(verifiablerandomfunction,可验证随机函数)生成可验证随机数vh和vh的证明vp,从而基于随机数vh进行目标共识节点的选择与接入,并将包含待接入共识节点的公钥、vh和vp的注册申请消息发送给目标共识节点,从而使得目标共识节点可以依据该公钥和vp验证随机数vh随机性,进而可以依据vh验证接入随机性,从而确保待接入共识节点的接入随机性。而随机接入方式可以避免非法节点针对性攻击共识网络中的某个固定位置的共识节点,使共识网络可以在第一时间发现并阻止恶意接入;同时,随机接入方式也能在一定程度上起到随机负载的作用,从而提高网络的稳定性。此外,本申请的准入过程,基于公钥、私钥和唯一标识,结合共识网络中已有的各共识节点的唯一标识,通过可验证的随机接入的方式,使得共识网络始终保持安全可控的状态,提高了共识网络的准入门槛。

    进一步地,所述生成自身的公钥、私钥和唯一标识包括:安装预设的准入单位所审核分配的第一安全模块;采用所述第一安全模块生成自身的公钥和私钥,并根据所述公钥生成自身的唯一标识。

    在本申请实施例中,采用预设的准入单位来审核发放第一安全模块,由第一安全模块生成公钥、私钥和唯一标识的方式,来代替ca中心和数字证书的方式,从而由于第一安全模块的发放与否需要由准入单位来审核,从而可以确保待接入共识节点的合法性。而由第一安全模块来进行公钥、私钥和唯一标识的生成,可以有效防止用于进行准入验证的相关数据被复制和冒用,从而可以有效提高共识网络的准入门槛,保证共识网络中的共识节点都是安全可控的。

    进一步地,所述准入单位具有所述第一安全模块的数据读写权限。

    应理解,第一安全模块的数据读写权限对准入单位开放,从而可以使得准入单位可以有效对共识节点进行监管。对于存在较高监管需求的场景(比如区块链应用于银行货币业务等场景中),可以有效满足监管需求,提高区块链的安全性和可控性。

    进一步地,所述第一安全模块为硬件安全模块。

    硬件安全模块相对于软件安全模块而言,其不依附于网络,从而可以具有更高的安全性,不易被网络攻击,从而可以提高共识节点中数据的安全性。

    进一步地,在根据所述公钥生成自身的唯一标识之前,所述方法还包括:从所述准入单位处获取根公钥和可被所述根公钥验证的第一根签名;对应的,所述根据所述公钥生成自身的唯一标识包括:对所述第一根签名和所述自身的公钥进行计算,得到所述唯一标识。

    通过上述实现过程,待接入共识节点的唯一标识即与第一根签名和自身的公钥相关联。而第一根签名是各共识节点均会从准入单位处获取到的数据,而待接入共识节点的公钥会在注册申请消息一并发至目标共识节点。这样,就可以使得目标共识节点能够计算待接入共识节点的唯一标识,从而进行唯一标识在共识网络中的唯一性验证,且还可以使得目标共识节点能够返回所计算的唯一标识,使得待接入共识节点实现进一步的核验,从而避免出现待接入共识节点被恶意节点引诱的情况,进一步提高整个准入验证过程的安全性。

    进一步地,基于所述第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准从所述共识网络中选择出目标共识节点,包括:从共识网络中,选择出唯一标识与所述第一选择基数最接近的n个候选共识节点;所述n为预设的大于等于1的正整数;从所述n个候选共识节点中,确定出一个候选共识节点作为所述目标共识节点。

    进一步地,所述方法还包括:在与所述目标共识节点连接失败时,从所述n个候选共识节点中重新确定一个候选共识节点作为所述目标共识节点进行连接。

    通过预先确定多个符合选择标准的候选共识节点,然后从中确定一个目标节点进行连接,并在连接失败时,可以重新从中选择新的目标共识节点重新进行连接。这样,可以有效防止出现某一共识节点连接失败时,导致待接入共识节点无法再次尝试接入共识网络,确保了网络接入的可靠性。

    进一步地,所述方法还包括:在接收到针对所述注册申请消息的注册响应消息时,对所述注册响应消息进行验证;在接收到的验证通过的注册响应消息的数量大于等于预设数量阈值时,确定注册成功。

    在本申请实施例中,目标共识节点可以将注册申请消息发送给共识网络中的各个共识节点一起进行验证,各共识节点验证通过后均可返回注册响应消息。这样,通过多共识节点反馈的方式将处理状态通知给待接入共识节点,可以有效避免待接入共识节点被误导接入非法网络,造成关键数据的不必要泄露。

    进一步地,所述待接入共识节点中预先获取有根公钥;所述注册响应消息中包含可被所述根公钥验证的第二根签名、发送所述注册响应消息的共识节点的公钥;

    所述在接收到针对所述注册申请消息的注册响应消息时,对所述注册响应消息进行验证,包括:使用所述根公钥对所述注册响应消息中的第二根签名进行验证;在验证通过时,采用所述共识节点的公钥和第二根签名,计算所述共识节点的唯一标识;校验计算出的所述共识节点的唯一标识是否为所述共识网络中已有的唯一标识;若是,验证通过;否则,验证不通过。

    通过上述实现过程,基于根公钥实现对于注册响应消息中的第二根签名的验证,从而在验证通过时,基于该第二根签名和共识节点的公钥得到该共识节点的唯一标识,并基于该唯一标识在共识网络中的唯一性,作进一步合法性确认。这样,可以有效提高网络安全性,降低待接入共识节点被误导接入非法网络的风险。

    进一步地,所述注册申请消息中包含有第一根签名;所述注册响应消息中还包含:发送所述注册响应消息的共识节点,根据所述注册申请消息中的公钥和所述第一根签名计算得到的所述待接入共识节点的唯一标识;所述使用所述根公钥对所述注册响应消息中的第二根签名进行验证之前,还包括:确定所述注册响应消息中的唯一标识与自身的唯一标识一致。

    在本申请实施例中,待接入共识节点的唯一标识是基于待接入共识节点的第一根签名和公钥计算得到的。那么,若发送注册响应消息的共识节点是处于共识网络内的真实的共识节点,那么其必然可以正确验证得到第一根签名,从而得到正确的待接入共识节点的唯一标识。因此,待接入共识节点通过验证注册响应消息中的唯一标识与自身的唯一标识的一致性,即可有效验证发送该注册响应消息的共识节点的可靠性,从而进一步提高网络的安全性。

    对应的,本申请实施例中还提供了一种共识节点准入方法,应用于共识节点中,包括:接收待接入共识节点发来的注册申请消息;所述注册申请消息中包含有所述待接入共识节点的公钥、可验证随机数vh和所述vh的证明vp;根据所述待接入共识节点的公钥和vp验证所述vh的合法性;在验证合法后,根据所述vh确定出第一选择基数;在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,将所述待接入共识节点的信息更新到自身的白名单中。

    共识节点通过基于待接入共识节点的公钥、可验证随机数vh即可验证vh的合法性。而在vh合法的前提下,由于本共识节点是由待接入共识节点基于vh确定出第一选择基数和共识网络中的各共识节点的唯一标识按照预设的选择标准所选出的,因此本共识节点的唯一标识和第一选择基数应当满足预设的选择标准。基于此,可以验证共识节点自身的唯一标识和第一选择基数是否满足预设的选择标准,从而验证出待接入共识节点的接入随机性。在验证通过时,即本共识节点自身的唯一标识和第一选择基数满足预设的选择标准时,才将待接入共识节点的信息更新到自身的白名单中,允许该待接入共识节点接入。本申请实施例的方案,通过随机接入的方式,可以有效避免非法节点针对性攻击共识网络中的某个固定位置的共识节点,使共识网络可以在第一时间发现并阻止恶意接入;同时,随机接入方式也能在一定程度上起到随机负载的作用,从而提高网络的稳定性。此外,本申请实施例结合共识节点的唯一标识,通过可验证的随机接入的方式,使得共识网络始终保持安全可控的状态,提高了共识网络的准入门槛。

    进一步地,在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,所述方法还包括:向所述待接入共识节点反馈注册响应消息,所述注册响应消息中包含可被根公钥验证的根签名、所述共识节点的公钥,以供所述待接入共识节点对所述注册响应消息进行验证。

    进一步地,所述注册申请消息中包含有所述待接入共识节点的第一根签名;向所述待接入共识节点反馈注册响应消息之前,所述方法还包括:根据所述注册申请消息中的第一根签名和公钥,计算得到所述待接入共识节点的唯一标识;将计算得到的所述待接入共识节点的唯一标识放入所述注册响应消息中。

    为在一定程度上解决现有准入机制中,节点准入的门槛控制较松散,且对于非法节点针对性攻击共识网络中的某个固定位置的共识节点的情况,防御性能不佳,且容易导致共识网络中节点负载不均的问题,本申请实施例中提供了一种普通节点准入方法,应用于普通节点中,包括:

    获取区块链最大高度height和最新的共识网络的白名单;所述白名单中包含有所述共识网络内的各个共识节点的唯一标识;生成自身的公钥和私钥;根据所述height和所述公钥生成第二选择基数;基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点;连接所述目标共识节点,并向所述目标共识节点发送接入请求消息;在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道。

    通过上述实现过程,可以结合反映出区块链最新状态的区块链最大高度height和普通节点的公钥来实现随机接入,而随机接入方式可以避免非法节点针对性攻击共识网络中的某个固定位置的共识节点,使共识网络可以在第一时间发现并阻止恶意节点接入,同时也能在一定程度上起到随机负载的作用,在一定程度上均衡共识节点的负载,从而提高网络的稳定性。

    进一步地,所述生成自身的公钥和私钥,包括:从预设的门户站点处获取预设的准入单位配置的第二安全模块;采用所述第二安全模块生成自身的公钥和私钥。

    在本申请实施例中,由准入单位来设置第二安全模块,并设置在预设的门户站点供各普通节点获取。这样,一方面,可以便于各普通节点获取相应的安全模块,另一方面,由第二安全模块来进行公钥、私钥和唯一标识的生成,可以有效防止用于进行准入验证的相关数据被复制和冒用,从而可以有效提高共识网络的准入门槛,保证共识网络中的共识节点都是安全可控的。

    进一步地,所述第二安全模块为软件安全模块。

    采用软件安全模块作为第二安全模块,可以便于普通节点的获取。同时,由于普通节点对于第二安全模块的获取是从门户站点获取的,可以在一定程度上实现共识网络与普通节点的数据分隔,从而可以提高共识网络的安全性。

    进一步地,所述准入单位具有所述第二安全模块的数据读写权限。

    应理解,第二安全模块的数据读写权限对准入单位开放,从而可以使得准入单位可以有效对共识节点进行监管。对于存在较高监管需求的场景,可以有效满足监管需求,提高区块链的安全性和可控性。

    进一步地,所述获取区块链最大高度height和最新的共识网络的白名单,包括:从预设的门户站点处获取所述height和所述最新的共识网络的白名单。

    进一步地,所述普通节点中预设有用户名和密码;所述方法还包括:根据所述用户名和密码,计算得到帐户因子;使用所述帐户因子对所述私钥进行加密。

    在本申请实施例中,普通节点的用户名和密码可以由用户自定义,从而满足常规的业务场景需求。而基于用户名和密码计算得到帐户因子,进而使用所述帐户因子对所述私钥进行加密,则可以提高对私钥的保存安全性,降低因私钥泄露而可能带来的风险。

    进一步地,基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点,包括:从所述白名单中,选择出唯一标识与所述第二选择基数最接近的m个候选共识节点;所述m为预设的大于等于1的正整数;从所述m个候选共识节点中,确定出一个候选共识节点作为所述目标共识节点。

    进一步地,所述方法还包括:在与所述目标共识节点连接失败时,从所述m个候选共识节点中重新确定一个候选共识节点作为所述目标共识节点进行连接。

    通过预先确定多个符合选择标准的候选共识节点,然后从中确定一个目标节点进行连接,并在连接失败时,可以重新从中选择新的目标共识节点重新进行连接。这样,可以有效防止出现与某一共识节点连接失败时,导致普通节点无法再次尝试接入区块链中,确保了区块链中节点接入的可靠性。

    对应的,本申请实施例中还提供了一种普通节点准入方法,应用于共识节点中,包括:在接收到普通节点发来的接入请求消息时,验证所述接入请求消息的合法性;在验证合法时,与所述普通节点建立安全通道。

    进一步地,所述接入请求消息中包含有所述普通节点的用户名和密码的哈希值;所述验证所述接入请求消息的合法性包括:验证所述普通节点的用户名是否在区块链中唯一;若所述普通节点的用户名在所述区块链中唯一,且所述区块链中各共识节点未保存有所述用户名,则在本地关联记录所述用户名和密码的哈希值。

    进一步地,所述接入请求消息中还包含有所述普通节点请求接入时的时间戳;在验证所述普通节点的用户名是否在所述区块链中唯一之前,所述方法还包括:确定所述时间戳与当前时间之间的时间差在预设范围内。

    应理解,对于恶意攻击,恶意节点可能是截获了早期某一接入请求消息来尝试进行接入。那么,该接入请求消息内携带的时间戳往往会与当前时间相差较大。基于此思路,通过上述方式即可有效证明该普通节点是合法的活跃的安全节点,从而有效防御恶意入侵,提高区块链的安全性。

    进一步地,所述接入请求消息中还包含有所述普通节点请求接入时所获取到的区块链最大高度height;在验证所述普通节点的用户名是否在所述区块链中唯一之前,所述方法还包括:确定所述height与当前的区块链最大高度之间的差值在预设范围内。

    由于区块链本身是不断生长的,因此若恶意节点截获的是早期的接入请求消息,或随机生成的一个height,那么其与当前的区块链最大高度之间偏差往往会较大。因此,基于此思路,通过上述方式即可有效证明该普通节点是合法的活跃的安全节点,从而有效防御恶意入侵,提高区块链的安全性。

    为解决现有准入机制中,验证过程中没有跟区块链状态信息相关联,所以不能证明节点是合法的活跃的安全节点,还是伪装的恶意节点或被控制的污染节点,从而导致的网络安全性不足的问题,本申请实施例中提供了一种普通节点准入方法,应用于普通节点中,包括:

    获取区块链最大高度height和最新的共识网络的白名单;从所述白名单中确定出目标共识节点;连接所述目标共识节点,并向所述目标共识节点发送包含所述height的接入请求消息,以供所述目标共识节点基于所述height验证所述普通节点的合法性;在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道;所述安全通道建立信息为所述目标共识节点基于所述height验证所述普通节点合法后发送的反馈的信息。

    通过上述实现过程,可以结合反映出区块链最新状态的区块链最大高度height来实现准入验证,从而可以基于height来证明该普通节点是合法的活跃的安全节点,从而解决现有准入机制中,验证过程中没有跟区块链状态信息相关联,所以不能证明节点是合法的活跃的安全节点,还是伪装的恶意节点或被控制的污染节点,从而导致的网络安全性不足的问题。

    进一步地,所述方法还包括:生成自身的公钥和私钥;所述从所述白名单中确定出目标共识节点包括:根据所述height和所述公钥生成第二选择基数;基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点。

    进一步地,所述生成自身的公钥和私钥,包括:从预设的门户站点处获取预设的准入单位配置的第二安全模块;采用所述第二安全模块生成自身的公钥和私钥。

    进一步地,所述第二安全模块为软件安全模块。

    进一步地,所述准入单位具有所述第二安全模块的数据读写权限。

    为缓解现有共识机制中存在的效率低下的问题,本申请实施例中提供了一种共识方法,应用于共识网络中,包括:

    本回合领导节点发起第一提议,并广播给所述共识网络中的所有共识节点;所述第一提议中包括提议的区块和提议的下回合领导节点;所述共识网络中的各共识节点对所述第一提议进行门限签名,并将签名结果发送给所述下回合领导节点;所述下回合领导节点将各共识节点的门限签名形成聚合签名,并确定再下回合领导节点;所述下回合领导节点发起第二提议,并广播给所述共识网络中的所有共识节点;所述第二提议中包括新提议的区块、所述聚合签名和所述再下回合领导节点;所述共识网络中的各共识节点对所述聚合签名的合法性进行验证,并在验证通过时,向所述再下回合领导节点反馈验证结果;所述再下回合领导节点在确定出验证通过的共识节点数目达到预设阈值时,将所述第一提议提交至数据库保存。

    上述实现过程,只需三个回合即可完成对于区块的确认,共识效率更高。此外,本申请实施例中,每一个回合中共识节点的投票直接发给确定的下一回合中的领导节点,从而使得每一个回合中,可以并行执行多个回合的区块确认过程,从而可以提高共识效率。同时,由于共识节点是将投票发给下一回合的领导节点,不再返回给本回合的领导节点,这就可以在降低通讯复杂度的同时,避免共识网络外的恶意节点针对leader恶意干扰的风险,提高了网络的可靠性。

    进一步地,每回合的领导节点有且仅有一个。

    每回合仅确认一个领导节点,这样就进一步简化了投票的消耗,提高共识的效率。

    进一步地,所述确定再下回合领导节点,包括:随机从所述共识网络中的各共识节点中确定出所述再下回合领导节点。

    通过随机从所述共识网络中的各共识节点中确定出所述再下回合领导节点,可以避免了领导节点被预测而受到干扰,提高了共识网络的安全性。

    进一步地,随机从所述共识网络中的各共识节点中确定出所述再下回合领导节点,包括:依据所述聚合签名确定出第三选择基数;确定出门限签名与所述第三选择基数最相近的共识节点为所述再下回合领导节点。

    由于是基于门限签名与第三选择基数确定的再下回合领导节点,也即再下回合领导节点是从已投票的共识节点中选出的,这就有效避免了选空风险,提高了共识机制运行的可靠性。

    进一步地,在所述共识网络中的各共识节点对所述第一提议进行门限签名后,所述方法还包括:各共识节点分别采用可验证随机函数生成各自的可验证随机数vh和所述vh的证明vp,并将所述vh和vp发送给所述下回合领导节点。

    进一步地,所述第二提议中还包括:所述再下回合领导节点的vp和vh;所述方法还包括:各共识节点获取所述再下回合领导节点的公钥,基于所述公钥、所述再下回合领导节点的vp,验证所述再下回合领导节点的vh。

    上述实现方式实现了每回合可验证的随机确定机制,使得每回合确定出的领导节点的随机性可验证,从而进一步降低了共识网络外的恶意节点针对leader恶意干扰的风险,提高了网络的可靠性。

    本申请实施例还提供了一种共识节点准入装置,应用于待接入共识节点中,包括:第一生成模块、确定模块和第一连接处理模块;所述第一生成模块,用于生成自身的公钥、私钥和唯一标识,以及根据所述私钥以及所述唯一标识,采用可验证随机函数vrf生成可验证随机数vh和所述vh的证明vp;所述确定模块,用于根据所述vh确定出第一选择基数,基于所述第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准从所述共识网络中选择出目标共识节点;所述第一连接处理模块,用于连接所述目标共识节点,并向所述目标共识节点发送包含所述公钥、所述vh和所述vp的注册申请消息,以供所述目标共识节点根据所述公钥和所述vp,对待接入共识节点进行验证。

    本申请实施例还提供了一种共识节点准入装置,应用于共识节点中,包括:接收模块、第一验证模块和处理模块;所述接收模块,用于接收待接入共识节点发来的注册申请消息;所述注册申请消息中包含有所述待接入共识节点的公钥、可验证随机数vh和所述vh的证明vp;所述第一验证模块,用于根据所述待接入共识节点的公钥和vp验证所述vh的合法性;所述处理模块,用于在验证合法后,根据所述vh确定出第一选择基数,在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,将所述待接入共识节点的信息更新到自身的白名单中。

    本申请实施例还提供了一种普通节点准入装置,应用于普通节点中,包括:第一获取模块、第二生成模块和第二连接处理模块;所述第一获取模块,用于获取区块链最大高度height和最新的共识网络的白名单;所述白名单中包含有所述共识网络内的各个共识节点的唯一标识;所述第二生成模块,用于生成自身的公钥和私钥,根据所述height和所述公钥生成第二选择基数;所述第二连接处理模块,用于基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点;连接所述目标共识节点,并向所述目标共识节点发送接入请求消息;在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道。

    本申请实施例还提供了一种普通节点准入装置,应用于共识节点中,包括:第二验证模块和处理单元;所述第二验证模块,用于在接收到普通节点发来的接入请求消息时,验证所述接入请求消息的合法性;所述处理单元,用于在验证合法时,与所述普通节点建立安全通道。

    本申请实施例还提供了一种普通节点准入装置,应用于普通节点中,包括:第二获取模块和第三连接处理模块;

    所述第二获取模块,用于获取区块链最大高度height和最新的共识网络的白名单;所述第三连接处理模块,用于从所述白名单中确定出目标共识节点,连接所述目标共识节点,并向所述目标共识节点发送包含所述height的接入请求消息,以供所述目标共识节点基于所述height验证所述普通节点的合法性;在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道;所述安全通道建立信息为所述目标共识节点基于所述height验证所述普通节点合法后发送的反馈的信息。

    本申请实施例还提供了一种共识网络,包括多个共识节点,所述共识节点中包括本回合领导节点,所述本回合领导节点提议的下回合领导节点,以及所述下回合领导节点提议的再下回合领导节点;所述本回合领导节点用于发起第一提议,并广播给所述共识网络中的所有共识节点;所述第一提议中包括提议的区块和提议的下回合领导节点;所述共识网络中的各共识节点用于对所述第一提议进行门限签名,并将签名结果发送给所述下回合领导节点;所述下回合领导节点用于将各共识节点的门限签名形成聚合签名,并确定再下回合领导节点;所述下回合领导节点还用于发起第二提议,并广播给所述共识网络中的所有共识节点;所述第二提议中包括新提议的区块、所述聚合签名和所述再下回合领导节点;所述共识网络中的各共识节点还用于对所述聚合签名的合法性进行验证,并在验证通过时,向所述再下回合领导节点反馈验证结果;所述再下回合领导节点用于在确定出验证通过的共识节点数目达到预设阈值时,将所述第一提议提交至数据库保存。

    本申请实施例还提供了一种电子设备,包括:处理器、存储器及通信总线;所述通信总线用于实现所述处理器和存储器之间的连接通信;所述处理器用于执行存储器中存储的一个或者多个程序,以实现上述任一种的共识节点准入方法或普通节点准入方法。

    本申请实施例中还提供了一种可读存储介质,所述可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述任一种的共识节点准入方法或普通节点准入方法。

    附图说明

    为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

    图1为本申请实施例提供的一种共识节点准入方法的流程示意图;

    图2为本申请实施例提供的一种普通节点准入方法的流程示意图;

    图3为本申请实施例提供的又一种普通节点准入方法的流程示意图;

    图4为本申请实施例提供的一种共识方法的流程示意图;

    图5本申请实施例五提供的一种总体架构图;

    图6本申请实施例提供的一种共识机制示意图;

    图7本申请实施例提供的一种应用于待接入共识节点中的共识节点准入装置的结构示意图;

    图8为本申请实施例提供的一种应用于共识节点中的共识节点准入装置的结构示意图;

    图9为本申请实施例提供的一种应用于普通节点中的普通节点准入装置的结构示意图;

    图10为本申请实施例提供的一种应用于共识节点中的普通节点准入装置的结构示意图;

    图11为本申请实施例提供的又一种应用于普通节点中的普通节点准入装置的结构示意图;

    图12为本申请实施例提供的一种电子设备的结构示意图。

    具体实施方式

    下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

    实施例一:

    为解决现有准入机制中,节点准入的门槛控制较松散,且对于非法节点针对性攻击共识网络中的某个固定位置的共识节点的情况,防御性能不佳,且容易导致共识网络中节点负载不均的问题,本申请实施例中提供了一种共识节点准入方法。

    参见图1所示,图1为本申请实施例中提供的一种共识节点准入方法的基本流程示意图,包括:

    s101:待接入共识节点生成自身的公钥、私钥和唯一标识。

    需要说明的是,在本申请实施例中,可以预先设立准入单位。在本申请实施例中,准入单位可以是具有区块链最高权限的单位,其可以由监管单位的安全设备以及相关人员共同构成。

    在本申请实施例中,待接入共识节点想要申请加入共识网络,可以先由准入单位进行审核,从而配发第一安全模块。第一安全模块可以安装到待接入共识节点上,从而通过第一安全模块来生成待接入共识节点自身的公钥和私钥对,并根据公钥生成自身的唯一标识。

    在本申请实施例中,准入单位可以通过人工等各种方式进行待接入共识节点的资质审核。

    在本申请实施例中,第一安全模块理论上采用软件或硬件实现均可,但是考虑到硬件相对于软件而言,不易被网络攻击,其安全性更高。故在本申请实施例中,第一安全模块可以采用硬件安全模块,由准入单位派发给到待接入共识节点。

    需要理解的是,在本申请实施例中,硬件安全模块可以采用ukey、加密卡、加密机等形式实现,只要能存储相关数据并支持相关密码算法,具有数据处理能力即可。

    在本申请实施例中,准入单位可以生产并保存唯一的根密钥对(根公钥和根私钥),并基于根公钥为每一个第一安全模块随机生成一个可被根公钥验证的根签名,并将根公钥和根签名一起写入第一安全模块中,分配给待接入共识节点,从而便于后续验证时采用。示例性的,可以采用根私钥通过随机签名的方式对根公钥进行签名,得到根签名。即signrootj=signprikeyroot(pubkeyroot),式中,signrootj表示发放给节点j的根签名,pubkeyroot为根公钥,signprikeyroot(pubkeyroot)表征采用根私钥对pubkeyroot进行签名,由于签名算法引入的随机性,所以不同的第一安全模块得到的根签名是不同的,但都可以被pubkeyroot验证。

    在本申请实施例中,第一安全模块可以在安装到待接入共识节点,生成待接入共识节点自身的公钥和私钥对后,即可根据其内的第一根签名(为便于区分描述,本申请实施例中记待接入共识节点中的根签名为第一根签名)和待接入共识节点自身的公钥,生成待接入共识节点自身的唯一标识。示例性的,可以对待接入共识节点自身的公钥和第一根签名做哈希运算,从而得到待接入共识节点的唯一标识。应理解,哈希运算仅是本申请实施例中可选的一种计算唯一标识的方式,除此之外,也可以采用其余可以基于公钥和第一根签名得到唯一结果的运算方式来得到唯一标识,在本申请实施例中并不做限定。

    需要注意的是,根公钥可以作为关键数据,在第一安全模块中配置为不可导出,从而提高数据安全性。

    在本申请实施例中,待接入共识节点准入过程中的各数据生成和处理过程,均可在第一安全模块内完成,以提高安全性。此外,准入单位可以具有第一安全模块的数据读写权限,从而便于实现对于各共识节点的监管。

    在本申请实施例中,准入单位可以离线发放第一安全模块,不需要直接参与区块链网络的运行,从而确保数据安全性。但是,准入单位可以定期从区块链中获取区块链的最新状态,比如可以获取区块链最新的区块链最大高度,最新的白名单等。需要说明的是,本申请实施例中所述的白名单由共识网络中所有共识节点的信息所汇总而成,其内信息包括各共识节点的唯一标识、网络地址、通讯端口、公钥等。

    s102:待接入共识节点根据自身的私钥以及唯一标识,采用可验证随机函数生成可验证随机数vh和该vh的证明vp。

    示例性的,在本申请实施例中,可以通过vh=vrf_hash(prikey,id)和vp=vrf_proof(prikey,id)生成vh和该vh的证明vp;或者,可以通过vh=vrf_hash(prikey,hash(id))和vp=vrf_proof(prikey,hash(id))生成vh和该vh的证明vp;此外,还可以结合时间戳信息来进一步提高安全性,通过vh=vrf_hash(prikey,hash(id|时间戳))和vp=vrf_proof(prikey,hash(id|时间戳))生成vh和该vh的证明vp。

    需要说明的是,上述各式中,prikey表示私钥,id表示唯一标识,“|”为连接符号,“id|时间戳”表示将id和时间戳连在一起。

    应理解,函数式vrf_hash为vrf的随机数生成函数,vrf_hash(prikey,x)即表明生成x的对应的可验证随机数vh,vrf_proof为vrf的随机数证明生成函数,vrf_proof(prikey,x)即表明生成vrf_hash(prikey,x)对应的证明,hash(x)表示对x做哈希运算。

    应理解,以上仅为本申请实施例中所示例的几种可行的根据自身的私钥以及唯一标识,生成vh和vp的方式,但是并不代表本申请实施例中仅可采用前述几种方式实现。事实上,在实际应用过程中,工程师可以根据实际需要设计相应的生成vh和vp的方式,在本申请实施例中不做限制。

    s103:根据vh确定出第一选择基数。

    在本申请实施例中,vh是根据唯一标识所生成的随机数,其形式上通常会与唯一标识比较接近。因此,在本申请实施例的一种可选实施方式中,可以以该vh作为第一选择基数。而在本申请实施例中的另一种可选方式中,可以计算hash(vh),以hash(vh)作为第一选择基数。

    s104:基于第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准从共识网络中选择出目标共识节点。

    在本申请实施例中,选择标准是由工程师预先设定好的,整个共识网络共同遵守的标准。示例性的,可以设置选择标准为:共识网络中与第一选择基数最接近的n个唯一标识;或者,可以为共识网络中与第一选择基数最不接近的n个唯一标识。在本申请实施例中,选择标准可以由工程师根据实际需要进行设定。此外,n的取值应为大于等于1的整数常值。

    需要理解的是,在本申请实施例中,确定出的目标共识节点可以仅有一个,但是也可以有多个。

    在本申请实施例中,在派发第一安全模块时,准入单位可以将白名单写入第一安全模块中,从而可以基于第一选择基数,在白名单中确定出目标共识节点。

    s105:连接目标共识节点。

    在本申请实施例中,白名单中记录有共识网络中各共识节点的网络地址和通讯端口,据此可以与目标共识节点建立连接。

    在本申请实施例中,为了防止出现与某一共识节点连接失败时,待接入共识节点就无法再次尝试接入共识网络的情况,在本申请实施例中可以在目标共识节点连接失败后,重新选择出满足预设选择标准的目标共识节点重新进行连接,从而保证网络接入的可靠性。

    示例性的,在本申请实施例的一种可选实施方式中,可以先从共识网络中,选择出唯一标识与第一选择基数最接近的n个候选共识节点,进而从这n个候选共识节点中,确定出一个候选共识节点作为目标共识节点。

    接着,在与目标共识节点连接失败时,从n个候选共识节点中重新确定一个候选共识节点作为目标共识节点进行连接。

    s106:向目标共识节点发送包含公钥、vh和vp的注册申请消息。

    为了提高数据交互过程中的安全性,注册申请消息可以用待接入共识节点的私钥签名后,再采用目标共识节点的公钥进行加密。

    s107:目标共识节点根据注册申请消息中的公钥和vp验证vh的合法性。

    应当理解的是,基于vrf技术,基于生成所述vp和vh的私钥对应的公钥,以及vp,可以验证出vh是否是基于待接入共识节点的唯一标识随机生成的,即可以验证出vh的合法性。其具体的验证过程可参见vrf技术手册,在本申请中不做赘述。

    在本申请实施例中,若注册申请消息先用待接入共识节点的私钥签名后,再采用目标共识节点的公钥进行加密了,则目标共识节点可以先采用自身的私钥对注册申请消息进行解密,然后通过注册申请消息中的公钥,对验证注册申请消息的签名进行验证。在验证通过后,再采用注册申请消息中的公钥和vp验证vh的合法性。

    s108:在验证合法后,根据vh确定出第一选择基数。

    在本申请实施例中,第一选择基数的确定方式应于待识别共识节点中的确定方式一致。示例性的,待识别共识节点中采用hash(vh)作为第一选择基数,那么本步骤中也计算hash(vh),从而确定出第一选择基数。

    s109:在共识节点自身的唯一标识和第一选择基数满足预设的选择标准时,将待接入共识节点的信息更新到自身的白名单中。

    在vh合法的前提下,由于目标共识节点是由待接入共识节点基于vh确定出第一选择基数和共识网络中的各共识节点的唯一标识按照预设的选择标准所选出的,因此目标共识节点的唯一标识和第一选择基数应当满足预设的选择标准。基于此,可以验证目标共识节点自身的唯一标识和第一选择基数是否满足预设的选择标准,从而验证出待接入共识节点的接入随机性。

    在本申请实施例中,在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,还可以向待接入共识节点反馈注册响应消息,注册响应消息中包含可被根公钥验证的第二根签名(为便于表述,本申请中将共识节点的根签名称为第二根签名)、共识节点的公钥,以供待接入共识节点对所述注册响应消息进行验证。

    在本申请实施例中,待接入共识节点在接收到注册响应消息后,即可根据根公钥验证注册响应消息中的第二根签名,并在验证通过后根据第二根签名和注册响应消息中的公钥计算出发送该注册响应消息的共识节点的唯一标识,从而即可以校验计算出的共识节点的唯一标识是否为共识网络中已有的唯一标识(即是否在白名单中唯一),若是,则验证通过,确认该注册响应消息可信;否则,验证不通过。

    在本申请实施例中,待接入共识节点所发送的注册申请消息中还可以包含有该待接入共识节点的第一根签名。从而可以使得目标共识节点根据注册申请消息中的第一根签名和待接入共识节点的公钥,计算得到待接入共识节点的唯一标识。

    此时,可以通过验证计算得到的该待接入共识节点的唯一标识是否在白名单中唯一,来进一步确定该待接入共识节点是否可以被接纳。

    此外,还可以将计算得到的所述待接入共识节点的唯一标识放入所述注册响应消息中,发还给待接入共识节点,从而便于待接入共识节点进行身份确认。

    示例性的,待接入共识节点可以在确定出注册响应消息中的唯一标识与自身的唯一标识一致时,才进行前述对注册响应消息进行验证的过程。

    在本申请实施例中,目标共识节点在验证通过后,还可以将注册申请消息同步给共识网络中的其余共识节点,由其余共识节点也来进行验证,并在验证通过后,将待接入共识节点的信息更新到自身的白名单中,并反馈注册响应消息。

    此时,待接入共识节点可以根据接收到的验证通过的注册响应消息的数量是否大于预设数量阈值来确定自身是否注册成功。在接收到的验证通过的注册响应消息的数量大于等于预设数量阈值时,确定注册成功。这样,通过多共识节点反馈的方式将处理状态通知给待接入共识节点,可以有效避免待接入共识节点被误导接入非法网络,造成关键数据的不必要泄露。

    需要说明的是,为了提高数据交互过程中的安全性,共识节点在反馈注册响应消息时,可以先采用自身的私钥对注册响应消息进行签名,然后使用待接入共识节点的公钥对注册响应消息进行加密。此时,待接入共识节点接收到注册响应消息后,即先采用自身私钥进行解密,然后可以通过查询白名单获取到对应共识节点的公钥进行验证,从而提高数据安全性。

    需要理解的是,为了提高安全性,在本申请实施例中,注册申请消息中可以携带时间戳,并要求在注册响应消息中也携带该时间戳。从而在收到注册响应消息后,待接入共识节点可以通过验证该时间戳的一致性,从而实现对于注册响应消息的合法性确认。

    需要说明的是,在本申请实施例中,在初始构建共识网络时,可以由准入单位预先为至少4个审核通过的共识节点派发第一安全模块,第一安全模块中写入有根公钥和各共识节点的根签名,供各共识节点安装,生成各共识节点的公钥和私钥对,以及唯一标识。然后将所有初始节点的信息汇总为初始的白名单,由各第一安全模块签名后保存在各共识节点下。

    然后,配置其中一个共识节点作为启动节点,创建硬编码的创世块发布到网络中,触发共识机制的运行。需要说明的是,触发的共识机制为实际应用过程中所采用的共识机制。可以采用现有共识机制,也可以采用本申请后续实施例中所提出的共识机制。

    这样,初始的共识网络即搭建完毕,之后若需加入新的共识节点,即可按照前文所述的方式进行准入验证。

    通过本实施例所提供的共识节点准入方法,待接入共识节点可以根据自身的私钥和唯一标识,通过vrf生成可验证随机数vh和vh的证明vp,从而基于随机数vh进行目标共识节点的选择与接入,并将包含待接入共识节点的公钥、vh和vp的注册申请消息发送给目标共识节点,从而使得目标共识节点可以依据该公钥和vp验证随机数vh随机性,进而可以依据vh验证接入随机性,从而确保待接入共识节点的接入随机性。而随机接入方式可以避免非法节点针对性攻击共识网络中的某个固定位置的共识节点,使共识网络可以在第一时间发现并阻止恶意接入;同时,随机接入方式也能在一定程度上起到随机负载的作用,从而提高网络的稳定性。此外,本申请的准入过程,基于公钥、私钥和唯一标识,结合共识网络中已有的各共识节点的唯一标识,通过可验证的随机接入的方式,使得共识网络始终保持安全可控的状态,提高了共识网络的准入门槛。

    此外,本实施例中可以通过准入单位来进行待接入共识节点的识别,并通过分配硬件安全模块来确保关键数据的安全,从而提高共识网络的准入门槛,尽可能地保证接入共识网络的待接入共识节点的安全性和可靠性。

    实施例二:

    为在一定程度上解决现有准入机制中,节点准入的门槛控制较松散,且对于非法节点针对性攻击共识网络中的某个固定位置的共识节点的情况,防御性能不佳,且容易导致共识网络中节点负载不均的问题,本申请实施例中提供了一种普通节点准入方法。

    参见图2所示,图2为本申请实施例中提供的一种普通节点准入方法的基本流程示意图,包括:

    s201:普通节点获取区块链最大高度height和最新的共识网络的白名单。

    在本申请实施例中,可以预先设立准入单位和门户站点。

    在本申请实施例中,准入单位可以配置第二安全模块,并放置到门户站点中,供普通节点获取。

    在本申请实施例中,门户站点可以配置为只允许定期的随机选取共识节点,从而获取区块链网络的非敏感信息,包括区块链最大高度height和最新的白名单。需要说明的是,本申请实施例中所述的白名单由共识网络中所有共识节点的信息所汇总而成,其内信息包括各共识节点的唯一标识、网络地址、通讯端口、公钥等。

    s202:生成自身的公钥和私钥。

    在本申请实施例中,普通节点可以从门户站点获取到第二安全模块,从而由第二安全模块来生成普通节点自身的公钥和私钥。

    为便于普通节点进行获取,在本申请实施例中,第二安全模块可以采用软件安全模块。

    此外,在本申请实施例中,准入单位可以具有第二安全模块的数据读写权限,从而便于实现对于各共识节点的监管。

    在本申请实施例中,还可以由用户自定义该普通节点的用户名和密码。从而根据该用户名和密码,计算得到一个帐户因子,并使用该帐户因子对私钥进行加密。这样,则可以提高对私钥的保存安全性,降低因私钥泄露而可能带来的风险。

    s203:根据height和公钥生成第二选择基数。

    在本申请实施例中,可以通过哈希算法得到一个第二选择基数。示例性的,可以通过hash(height|pubkeyuser)或hash(height|时间戳|pubkeyuser)确定出第二选择基数。

    需要说明的是,上式中pubkeyuser为该普通节点的公钥。

    应理解,对于第二选择基数的确定,除了可以通过哈希算法以外,还可以通过其他的算法来实现,只要根据height和公钥能生成唯一确定的结果即可。

    s204:基于该第二选择基数,从白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点。

    在本申请实施例中,选择标准是由工程师预先设定好的,整个共识网络共同遵守的标准。示例性的,可以设置选择标准为:共识网络中与第一选择基数最接近的m个唯一标识;或者,可以为共识网络中与第一选择基数最不接近的m个唯一标识。在本申请实施例中,选择标准可以由工程师根据实际需要进行设定。此外,m的取值应为大于等于1的整数常值。

    需要理解的是,在本申请实施例中,确定出的目标共识节点可以仅有一个,但是也可以有多个。

    s205:连接目标共识节点,并向目标共识节点发送接入请求消息。

    在本申请实施例中,白名单中记录有共识网络中各共识节点的网络地址和通讯端口,据此可以与目标共识节点建立连接。

    在本申请实施例中,为了防止出现与某一共识节点连接失败时,普通节点就无法再次尝试接入共识网络的情况,在本申请实施例中可以在目标共识节点连接失败后,重新选择出满足预设选择标准的目标共识节点重新进行连接,从而保证网络接入的可靠性。

    示例性的,在本申请实施例的一种可选实施方式中,可以先从共识网络中,选择出唯一标识与第一选择基数最接近的m个候选共识节点,进而从这m个候选共识节点中,确定出一个候选共识节点作为目标共识节点。

    接着,在与目标共识节点连接失败时,从m个候选共识节点中重新确定一个候选共识节点作为目标共识节点进行连接。

    s206:目标共识节点对该接入请求消息进行验证。

    在本申请实施例中,接入请求消息中可以含有该普通节点的用户名和密码或密码的哈希值,从而可以验证该普通节点的用户名是否在区块链中唯一。若普通节点的用户名在区块链中唯一,且区块链中各共识节点未保存有所述用户名,则可以在本地关联记录用户名和密码,或关联记录该用户名和密码的哈希值。并进一步的与该普通节点建立安全通道进行通信。

    应理解,目标共识节点可以通过在本地查询该用户名,并在本地没有时向其余共识节点查询的方式实现对于该用户名唯一性的确定。

    此外,为了进一步提高安全性,防御恶意入侵,在本申请实施例中,在接入请求消息中可以放入当前时间点的时间戳,和/或所获取到的height,从而使得目标共识节点可以基于时间戳和/或height确定请求接入区块链的普通节点是否安全。

    示例性的,在接入请求消息中还包含有所述普通节点请求接入时的时间戳时,目标共识节点在验证普通节点的用户名是否在区块链中唯一之前,可以先确定该时间戳与当前时间之间的时间差在预设范围内。若不在预设范围内,那么则可以拒绝该普通节点接入,断开与其的连接。

    应理解,对于恶意攻击,恶意节点可能是截获了早期某一接入请求消息来尝试进行接入。那么,该接入请求消息内携带的时间戳往往会与当前时间相差较大。因此,上述通过时间戳验证的方式可以有效证明该普通节点是合法的活跃的安全节点,从而有效防御恶意入侵,提高区块链的安全性。

    类似的,在接入请求消息中还包含有height时,目标共识节点在验证普通节点的用户名是否在区块链中唯一之前,可以先确定该height与当前的区块链最大高度之间的差值在预设范围内。若不在预设范围内,那么则可以拒绝该普通节点接入,断开与其的连接。

    类似的,由于区块链本身是不断生长的,因此若恶意节点截获的是早期的接入请求消息,或随机生成的一个height,那么其与当前的区块链最大高度之间偏差往往会较大。因此,上述通过height验证的方式可以有效证明该普通节点是合法的活跃的安全节点,从而有效防御恶意入侵,提高区块链的安全性。

    应理解,为了提高数据交互过程中的安全性,接入请求消息可以先采用该普通节点自身的私钥进行签名,然后再使用目标共识节点的公钥进行加密。

    在接入请求消息中携带该普通节点自身的公钥,从而目标共识节点在收到接入请求消息后,可以先使用自身的私钥进行解密,然后再使用接入请求消息中的公钥验证接入请求消息的签名是否有效。

    s207:在验证合法时,与该普通节点建立安全通道。

    在本申请实施例中,可以采用任意可用的安全通道建立方式进行安全通道的建立。

    示例性的,目标共识节点在验证合法后,目标共识节点可以随机生成临时通道密钥因子keyfac,签名并加密后得到安全通道建立信息,返回给该普通节点。安全通道建立信息的内容主要包括:

    respbody=userid|时间戳|keyfac

    connresp=encryptpubkeyuser(respbody|signprikeyb(respbody))

    目标共识节点计算通道密钥key=hash(keyfac|height|时间戳),等待接下来的通讯。

    需要说明的是,上述各式中,userid为该普通节点的用户名,时间戳为接入请求消息中所携带的时间戳(若对应的是接入请求消息中未携带时间戳的实施方式,那么此处也可不加入时间戳)。pubkeyuser为该普通节点的公钥,prikeyb为共识节点的私钥,signprikeyb(respbody)表示采用prikeyb对respbody进行签名;encryptpubkeyuser(respbody|signprikeyb(respbody))表示采用pubkeyuser对(respbody|signprikeyb(respbody))进行加密。

    普通节点收到目标共识节点的安全通道建立信息后,解密和验证安全通道建立信息的合法性,包括:用prikeyuser对消息解密,并以目标共识节点的pubkeyb验证消息的签名,并验证消息中的userid和时间戳均与自己发出的一致。其中,prikeyuser为该普通节点的私钥。

    普通节点用与目标共识节点相同的方法计算通道密钥key,接下来的通讯均用key进行加密,从而建立起安全通道。

    需要说明的是,在普通节点的接入过程中,在初次接入时才需要获取第二安全模块并生成自身的公钥和私钥。在后续的接入过程中,仅需获取到最新的height和白名单即可,公钥和私钥不再需要重新生成。

    通过本申请实施例的上述实现过程,可以结合反映出区块链最新状态的区块链最大高度height和普通节点的公钥来实现随机接入,而随机接入方式可以避免非法节点针对性攻击共识网络中的某个固定位置的共识节点,使共识网络可以在第一时间发现并阻止恶意节点接入,同时也能在一定程度上起到随机负载的作用,在一定程度上均衡共识节点的负载,从而提高网络的稳定性。

    此外,本申请实施例中还可以结合height实现对普通节点的安全性验证,从而解决现有准入机制中,验证过程中没有跟区块链状态信息相关联,所以不能证明节点是合法的活跃的安全节点,还是伪装的恶意节点或被控制的污染节点,从而导致的网络安全性不足的问题。

    实施例三:

    为解决现有准入机制中,验证过程中没有跟区块链状态信息相关联,所以不能证明节点是合法的活跃的安全节点,还是伪装的恶意节点或被控制的污染节点,从而导致的网络安全性不足的问题,本申请实施例中提供了一种普通节点准入方法。

    参见图3所示,该普通节点准入方法包括:

    s301:普通节点获取区块链最大高度height和最新的共识网络的白名单。

    与实施例二类似的,在本申请实施例中,可以预先设立准入单位和门户站点。门户站点可以配置为只允许定期的随机选取共识节点,从而获取区块链网络的非敏感信息,包括区块链最大高度height和最新的白名单。而白名单由共识网络中所有共识节点的信息所汇总而成,其内信息包括各共识节点的唯一标识、网络地址、通讯端口、公钥等。

    s302:从白名单中确定出目标共识节点。

    与实施例二类似的,在本申请实施例中,普通节点可以从门户站点获取到第二安全模块,从而由第二安全模块来生成普通节点自身的公钥和私钥。第二安全模块可以由准入单位配置,并放置到门户站点中,供普通节点获取。而为便于普通节点进行获取,在本申请实施例中,第二安全模块可以采用软件安全模块。

    在本申请实施例中,还可以由用户自定义该普通节点的用户名和密码。从而根据该用户名和密码,计算得到一个帐户因子,并使用该帐户因子对私钥进行加密。这样,则可以提高对私钥的保存安全性,降低因私钥泄露而可能带来的风险。

    此外,在本申请实施例中,准入单位可以具有第二安全模块的数据读写权限,从而便于实现对于各共识节点的监管。

    在本申请实施例中,门户站点可以配置为只允许定期的随机选取共识节点,从而获取区块链网络的非敏感信息,包括区块链最大高度height和最新的白名单。需要说明的是,本申请实施例中所述的白名单由共识网络中所有共识节点的信息所汇总而成,其内信息包括各共识节点的唯一标识、网络地址、通讯端口、公钥等。

    在本申请实施例中,可以根据height和公钥生成第二选择基数;基于第二选择基数,从白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点。

    在本申请实施例中,选择标准是由工程师预先设定好的,整个共识网络共同遵守的标准。示例性的,可以设置选择标准为:共识网络中与第一选择基数最接近的m个唯一标识;或者,可以为共识网络中与第一选择基数最不接近的m个唯一标识。在本申请实施例中,选择标准可以由工程师根据实际需要进行设定。此外,m的取值应为大于等于1的整数常值。

    需要理解的是,在本申请实施例中,确定出的目标共识节点可以仅有一个,但是也可以有多个。

    s303:连接目标共识节点,并向目标共识节点发送接入请求消息。

    在本申请实施例中,白名单中记录有共识网络中各共识节点的网络地址和通讯端口,据此可以与目标共识节点建立连接。

    在本申请实施例中,为了防止出现与某一共识节点连接失败时,普通节点就无法再次尝试接入共识网络的情况,在本申请实施例中可以在目标共识节点连接失败后,重新选择出满足预设选择标准的目标共识节点重新进行连接,从而保证网络接入的可靠性。

    s304:目标共识节点验证该接入请求消息中的height与当前的区块链最大高度之间的差值是否在预设范围内。若在,转至步骤s305,否则,结束。

    由于区块链本身是不断生长的,因此若恶意节点截获的是早期的接入请求消息,或随机生成的一个height,那么其与当前的区块链最大高度之间偏差往往会较大。因此,上述通过height验证的方式可以有效证明该普通节点是合法的活跃的安全节点,从而有效防御恶意入侵,提高区块链的安全性。

    在本申请实施例中,接入请求消息中还可以具有时间戳,从而可以通过时间戳验证的方式进一步验证该普通节点的身份。具体内容可参见实施例二中的相关介绍。

    此外,在本申请实施例中,接入请求消息中还具有该普通节点的用户名和密码或密码的哈希值,从而可以验证该普通节点的用户名是否在区块链中唯一。若普通节点的用户名在区块链中唯一,且区块链中各共识节点未保存有所述用户名,则可以在本地关联记录用户名和密码,或关联记录该用户名和密码的哈希值。并进一步的与该普通节点建立安全通道进行通信。

    通过本实施例的方式,可以结合反映出区块链最新状态的区块链最大高度height来实现准入验证,从而可以基于height来证明该普通节点是合法的活跃的安全节点,从而解决现有准入机制中,验证过程中没有跟区块链状态信息相关联,所以不能证明节点是合法的活跃的安全节点,还是伪装的恶意节点或被控制的污染节点,从而导致的网络安全性不足的问题。

    应理解,通过实施例一的方案,可以提高共识节点的准入门槛,提高共识节点所构成的共识网络的安全性和可监管性。而通过实施例二或实施例三的方式则可以提高普通节点接入区块链的安全性。因此,在本申请实施例中,可以同时采用实施例一和实施例二的方案实现,或同时采用实施例一和实施例三的方案实现,从而达到更好的实现效果。

    而在同时采用实施例一和实施例二的方案实现,或同时采用实施例一和实施例三的方案实现时,可以配置共识节点不允许发起应用事务,只有普通用户才能发起应用事务(比如注册数字资产、资产交易等),这样,通过对共识节点和普通节点进行权限区分,从而可以使区块链核心和应用部分的业务承担得到了安全隔离和控制,降低恶意节点冒充和干扰的风险。

    实施例四:

    为缓解现有共识机制中存在的效率低下的问题,本申请实施例中提供了一种应用于共识网络中的共识方法。

    参见图4所示,所述共识方法包括:

    s401:本回合领导节点发起第一提议,并广播给共识网络中的所有共识节点。

    需要说明的是,在本申请实施例中,第一提议中包括本回合领导节点所提议的区块和提议的下回合领导节点。

    s402:共识网络中的各共识节点对第一提议进行门限签名,并将签名结果发送给下回合领导节点。

    s403:下回合领导节点将各共识节点的门限签名形成聚合签名,并确定再下回合领导节点。

    在本申请实施例中,可以通过随机方式,从共识网络中的各共识节点中确定出再下回合领导节点。而通过随机从所述共识网络中的各共识节点中确定出所述再下回合领导节点,可以避免了领导节点被预测而受到干扰,提高了共识网络的安全性。

    示例性的,可以依据聚合签名确定出第三选择基数,确定出门限签名与第三选择基数最相近的共识节点为再下回合领导节点。

    这样,由于是基于门限签名与第三选择基数确定的再下回合领导节点,也即再下回合领导节点是从已投票的共识节点中选出的,这就可以有效避免选空风险,提高了共识机制运行的可靠性。

    s404:下回合领导节点发起第二提议,并广播给所述共识网络中的所有共识节点。

    在本申请实施例中,第二提议中包括新提议的区块、聚合签名和再下回合领导节点。

    s405:共识网络中的各共识节点对聚合签名的合法性进行验证,并在验证通过时,向再下回合领导节点反馈验证结果。

    在本申请实施例中,各共识节点对所述第一提议进行门限签名后,可以分别采用可验证随机函数生成各自的可验证随机数vh和该vh的证明vp,并将vh和vp发送给下回合领导节点。

    示例性的,假设本回合为回合n,记各共识节点对第一提议的门限签名结果为vj*n,j*n表征回合n中第j个共识节点。各共识节点可独立计算以下vrf数据(记为vrfj*n):

    vhj*n=vrf_hash(prikeyj,hash(pn))

    vpj*n=vrf_proof(prikeyj,hash(pn))

    式中,prikeyj为计算该vrf数据的第j个共识节点的私钥,pn为回合n的第一提议。

    然后,在本申请实施例的另一可行实施方式中,可以依据聚合签名确定出第三选择基数,确定vh与第三选择基数最相近的共识节点为再下回合领导节点。

    示例性的,假设本回合为回合n,可以计算hash(qcn)作为第三选择基数,并以hash(qcn)为基准在各节点发来的vh中找到最接近的1个共识节点作为再下回合领导节点。其中,qcn为回合n的聚合签名。

    然后,在下回合领导节点向共识网络中的所有共识节点广播时,将qcn、所确定为再下回合领导节点的vrfj*n发送给共识节点。因为qcn是各共识节点的门限签名聚合的结果,所以各共识节点均可以验证qcn的合法性。从而,各共识节点可以对qcn进行合法性验证,并可以通过查找白名单获取到再下回合领导节点的公钥,从而可以基于该公钥,再下回合领导节点的vrfj*n中的vp验证再下回合领导节点的vh,从而验证再下回合领导节点的vrfj*n的随机性。

    在验证通过后,各共识节点即可以执行步骤s405。若验证不通过,在本申请实施例的一种可选实施方式中,则可以通知所述下回合领导节点重新确定再下回合领导节点,或者可以以该下回合领导节点作为再下回合领导节点,从而确保整个共识机制的正常运行。

    需要理解的是,在本申请实施例中,除了第一个回合和第二个回合外,其余每一个回合的领导者均可按照前述方式确定。而第一个回合和第二个回合的领导节点则可以由工程师进行指定。

    s406:再下回合领导节点在确定出验证通过的共识节点数目达到预设阈值时,将第一提议提交至数据库保存。

    需要说明的是,在本申请实施例中,每回合的领导节点有且仅有一个。这样,每回合仅确认一个领导节点,就可以简化投票的消耗,提高共识的效率。

    需要理解的是,事实上,除了第一个回合和第二个回合外的每一个回合的领导节点,其都会同时执行上述本回合领导节点、下回合领导节点和再下回合领导节点的工作。也即在本申请实施例中,除了第一个回合和第二个回合外的每一个回合的领导节点,其既会作为本回合领导节点,从而提议出本轮所需确定的区块,并确定下回合的领导节点;同时还会作为下回合领导节点,将各共识节点针对上回合的领导节点所提议的区块的门限签名形成聚合签名;同时还会作为再下回合领导节点,针对上两回合的领导节点所提议的区块,对其聚合签名的合法性验证,验证通过的共识节点数目达到预设阈值时,将该区块的提议提交至数据库保存。

    此外,由于除了第一个回合和第二个回合外的每一个回合的领导节点,其都会同时执行上述本回合领导节点、下回合领导节点和再下回合领导节点的工作,因此在一个回合的领导节点所处理的内容中,可能会同时存在需要将上两个回合的领导节点的提议提交至数据库,以及将上一回合的领导节点的提议的门限签名形成聚合签名的两个动作,内存中会同时存在两个提议。因此为了便于实现步骤s406中再下回合领导节点对于所需提交至数据库的提议的区分,在本申请实施例中,在步骤s405验证出聚合签名的合法性后,可以对内存中的第一提议进行状态更新(比如对内存中的第一提议设置一标识验证通过的标记),从而使得再下回合领导得以根据提议的状态将第一提议提交至数据库保存。

    需要说明的是,在本申请实施例中,对于第一个回合和第二个回合的领导节点,可以由工程师配置一个共识节点作为启动节点(即第一个回合的领导节点),并指定第二个回合的领导节点仍指向自己,从而启动共识机制。

    通过本申请实施例的方案,只需三个回合即可完成对于区块的确认,共识效率更高。此外,本申请实施例中,每一个回合中共识节点的投票直接发给确定的下一回合中的领导节点,从而使得每一个回合中,可以并行执行多个回合的区块确认过程,从而可以提高共识效率。同时,由于共识节点是将投票发给下一回合的领导节点,不再返回给本回合的领导节点,这就可以在降低通讯复杂度的同时,避免共识网络外的恶意节点针对leader恶意干扰的风险,提高了网络的可靠性。

    实施例五:

    本实施例在前述各实施例的基础上,对本申请的方案做进一步示例说明。

    本申请实施例的总体架构可以参见图5所示,包括服务侧和用户侧两侧。服务侧由准入单位、安全模块和基于准入机制的区块链服务网络组成,用户侧为普通节点。服务侧只有区块链服务网络面向用户侧提供相关服务,比如用户接入、交易、查询等服务。

    其中:

    准入单位,由专业安全公司或监管部门负责建立,作用是为区块链服务网络中的共识节点提供硬件安全模块(即第一安全模块,形式可以是ukey、加密机、加密卡等),为区块链服务的门户站点提供软件安全模块(即第二安全模块)。

    硬件安全模块,由准入单位发放给区块链网络中的共识节点,用于共识节点接入共识网络时进行身份认证、安全注册和安全通讯。

    软件安全模块,由准入单位通过门户站点发放给普通节点,用于普通节点接入区块链网络时参与身份认证和安全通讯。

    共识节点,是区块链服务网络的基本组成。由需要加入共识网络参与共识的机构共同负责建立,每个节点必须安装硬件安全模块才可以被网络中其他节点认可。共识节点负责处理共识网络中需要上链的各种事务和区块链的状态,所负责的业务范围仅限于维护区块链网络中的数据和系统配置的共识,并为普通节点提供的区块链相关服务。因此,共识节点不允许代替或冒充普通节点发起交易等事务,否则不被认可。

    门户站点,作为普通节点接入区块链网络的第一站,由区块链服务提供方负责建立,需要导入并保存准入单位发放的软件安全模块和共识网络的相关必要可公开信息,并以普通节点的身份接入区块链的共识网络中。用于为普通节点接入和访问区块链网络提供接入所需的必要信息和软件安全模块。

    普通节点,需要在安装软件安全模块的条件下,通过共识节点接入并注册到区块链上之后,才可以访问区块链上的相关服务,可以进行区块链应用层的事务,比如:用户注册、资产注册、查询、交易等。

    下面,详细介绍一种具体可选的实施方式:

    初始阶段,服务侧首先需要建立准入单位,并生产初期足够的硬件安全模块和软件安全模块。在此基础上,由足够的共识节点安装硬件安全模块并互联,建立初期的共识网络,产出创世块并启动共识机制进行运行。

    初期的共识网络启动运行后,需要建立门户站点,门户站点和准入单位都可以接入共识网络,并定期从共识网络中获取区块链网络的非关键信息。由门户站点和共识网络构建初期的区块链服务网络。

    有需要加入共识网络,参与共识的机构,可以建立自有节点,并从准入单位获得硬件安全模块,接入共识网络。

    普通节点通过门户站点获取接入网络所需的信息和软件安全模块,安装后接入区块链网络,发起事务请求到共识网络,在共识节点间同步到各节点的事务池,进而通过共识机制完成事务上链的过程。

    各环节具体处理流程如下:

    1)准入机制和共识网络的建立:

    包括初始网络建立和共识节点准入注册两个阶段:

    a)初始网络建立

    实现方法如下:

    i.建立准入单位,在准入单位生产并保存唯一的安全根密钥对(根私钥prikeyroot和根公钥pubkeyroot)。

    ii.生产安全模块:由准入单位为需要加入共识网络的节点提供硬件安全模块,形式可以是ukey、加密卡、加密机等。

    需要注意的是,硬件安全模块中具备密钥产生、密码运算的等相关能力,且关键数据不可以以明文形式导出硬件安全模块。

    对于每个硬件安全模块,准入单位将公钥pubkeyroot独立签名后得到根签名signrootj=signprikeyroot(pubkeyroot)(注:signrootj表示发放给共识节点j的根签名,signprikeyroot(pubkeyroot)表示采用prikeyroot对pubkeyroot进行签名。由于签名算法引入的随机性,所以不同的硬件安全模块得到的根签名是不同的,但都可以被pubkeyroot验证),与pubkeyroot一起写入硬件安全模块中。其中,pubkeyroot作为关键数据不可被导出硬件安全模块。

    iii.安装硬件安全模块:每个共识节点均需相应安装一个由准入单位发布的硬件安全模块。

    需要说明的是,各共识节点初始化时,硬件安全模块会独立地随机产生公私钥对(私钥prikeyj和公钥pubkeyj,下标j表示为第j个共识节点),并保存在硬件安全模块内,其中prikeyj作为关键数据不可被导出硬件安全模块。

    还需要说明的是,各共识节点计算出自身的idj=hash(signrootj|pubkeyj),作为共识节点的唯一标识。

    需要说明的是,idj表示第j个共识节点的唯一标识。

    iv.建立初始共识网络:由一组安装了硬件安全模块的初始共识节点(最少4个共识节点)连接成网络。

    将所有初始共识节点的信息汇总为初始的白名单(记为wlist),由各硬件安全模块签名后保存在各初始共识节点下。wlist中各共识节点的信息需至少包括:共识节点的唯一标识idj、网络地址、通讯端口port、公钥pubkeyj等信息。

    配置初始网络中的一个节点作为启动节点,创建硬编码的创世块发布到初始的共识网络中,触发共识机制的运行。(共识机制的运行可参见后文关于共识机制的说明)

    v.网络状态更新:初始网络启动运行后,准入单位和门户站点可以定期的从共识网络获取最新的白名单(记为wlist)等区块链状态相关的非关键信息,用于为新节点加入时提供必要的信息。

    b)共识节点准入注册:

    实现方法如下:

    i.获取硬件安全模块:初始共识网络建立后,待接入共识节点(记为a)需要申请注册以加入共识网络时,节点a需向准入单位申请,并获取新生产的硬件安全模块(其中包含pubkeyroot和signroota)和最新的白名单wlist。signroota是为节点a生成的根签名。

    ii.安装硬件安全模块:节点a初始化时,硬件安全模块生成自己的公私钥对(私钥prikeya和公钥pubkeya)和ida。ida的生成方式参见前文idj所示。

    iii.随机接入共识网络:节点a通过硬件安全模块计算并准备连接需要的数据,并以此尝试随机接入共识网络。包括:

    生成一组可验证随机数:

    vha=vrf_hash(prikeya,hash(ida|时间戳))

    vpa=vrf_proof(prikeya,hash(ida|时间戳))

    计算hash(vha),并以此结果在白名单wlist中找到最接近的3个节点id,依次尝试连接并发起注册申请。

    如果连接失败则重复当前步骤(iii)l次(l为预先设定的常数),都不成功则放弃本次操作。

    iv.生成注册申请:节点a成功连接到某个共识节点(记为b)后,生成并发出注册申请消息:

    注册申请消息的内容主要包括:

    regbody=signroota|pubkeya|时间戳|vha|vpa

    regreq=encryptpubkeyb(regbody|signprikeya(regbody))

    需要说明的是,“|”为连接符号,sign为签名函数,signx()表征以x对括号内的内容进行签名,encrypt为加密函数,encryptx()表征以x对括号内的内容进行加密。

    还需要说明的是,注册申请消息在采用节点a的私钥签名后,再用节点b的公钥加密。

    v.验证注册申请:节点b接收到节点a的注册申请消息后,进行以下验证:

    用prikeyb对消息解密,并以消息中的pubkeya验证消息的签名。prikeyb为节点b的私钥。

    在硬件安全模块中用pubkeyroot验证signroota的合法性,合法则计算出节点a的id,ida=hash(signroota|pubkeya)。

    用pubkeya、vpa验证vha的vrf有效性,合法则计算hash(vha)并根据白名单验证接入随机性。

    根据白名单验证接入随机性包括:验证节点b的唯一标识idb是否为白名单中与hash(vha)最接近的3个唯一标识之一。若是,则验证通过,否则,验证不通过。

    vi.同步注册申请:节点b验证完成后,将节点a的相关信息同步给其他共识节点,并更新本节点下的白名单。

    vii.响应注册申请:包括节点b在内,所有验证处理了节点a的注册申请的节点,生成并向节点a发出注册响应消息,并更新自己的白名单wlist:

    注册响应消息的内容主要包括:

    respbody=ida|signrootj|pubkeyj|时间戳

    regresp=encryptpubkeya(respbody|signprikeyj(respbody))

    说明:注册响应消息采用本节点自身的私钥签名后,再用节点a的公钥加密。

    viii.确认注册成功:节点a对收到的响应消息进行以下验证和处理:

    用prikeya对消息解密,并以消息中的pubkeyj验证消息的签名,ida应与自己的id一致,时间戳应与注册请求消息中一致。

    在硬件安全模块中用pubkeyroot验证signrootj的合法性,合法则计算出节点j的id,idj=hash(signrootj|pubkeyj),验证与白名单的信息是否一致。

    如果验证通过,则更新节点a下包括白名单在内的相关信息。当收到的响应消息数量达到一定阈值时,即确认自己注册成功。

    2)普通用户的随机接入:

    普通用户不参与共识,只安装软件安全模块后即可接入区块链网络。实现方法如下:

    i.建立门户站点:门户站点初始化时,需要导入准入单位提供的软件安全模块,并以接入共识网络。门户站点只被允许定期的随机选取共识节点,获取区块链网络的非敏感信息。非敏感信息至少包括区块链最大高度height和最新的共识节点的白名单wlist。此外,门户站点的其他应用请求均不会被共识网络接受。

    ii.获取软件安全模块:普通节点(记为user)如果是初次连接,需要从门户站点获取软件安全模块(其中包含pubkeyroot和signrootsoft,signrootsoft的生成方式可参见前文对于signrootj的描述)、最新白名单wlist和区块链最大高度height。如不是初次,则只需获取wlist和height。

    iii.安装软件安全模块:

    user初始化时,软件安全模块根据用户自定义的用户名userid和密码passwd计算出用户的帐户因子userkey。比如:userkey=hash(userid|passwd)。用户名userid和密码passwd均不需要保存,由user自己管理。

    软件安全模块随机生成用户的公私钥对(私钥prikeyuser和公钥pubkeyuser),其中prikeyuser需用userkey加密后保存管理。

    iv.随机接入网络:

    user计算一个与区块链当前状态相关的哈希值:h=hash(height|时间戳|pubkeyuser)

    在白名单wlist中找与h最接近的3个共识节点的id,依次尝试连接。如果连接失败则重复当前步骤(iv)l次,(l为预先设定的常数)都不成功则放弃操作。

    v.请求接入:连接共识节点(记为b)成功后,user生成并发出接入请求消息。

    接入请求消息的内容主要包括:

    connbody=height|时间戳|pubkeyuser|userid|hash(passwd)

    connreq=encryptpubkeyb(connbody|signprikeyuser(regbody))

    说明:接入请求消息采用user的私钥签名后,再用节点b的公钥加密。

    vi.验证接入请求:节点b收到接入消息后,进行如下处理:

    用prikeyb对消息解密,并以消息中的pubkeyuser验证消息的签名。

    验证height、时间戳是否均需在合理范围内。若是,进行下一步,否则,不允许接入。

    在共识网络中验证userid、hash(passwd),要求userid在共识网络中唯一且和hash(passwd)对应。本地节点没有记录时,随机向多个共识节点查询,共识节点都没有时,则将userid和hash(passwd)对应添加至本地记录,并同步给其他共识节点。

    vii.建立安全通道:接入验证通过后,user和共识节点间要建立临时的安全通道,以完成接下来的交互行为:

    验证通过后,节点b随机生成临时通道密钥因子keyfac,签名并加密后返回给user,安全通道建立信息内容主要包括:

    respbody=userid|时间戳|keyfac

    connresp=encryptpubkeyuser(respbody|signprikeyb(respbody))

    节点b计算通道密钥key=hash(keyfac|height|时间戳),等待接下来的通讯。

    user收到节点b的响应消息后,解密和验证消息的合法性,包括:用prikeyuser对消息解密,并以节点b的pubkeyb验证消息的签名,并验证消息中的userid是否与自己的一致,并验证时间戳是否与自己发出的接入请求消息中的一致。若一致,则验证通过,若不一致,则可以结束安全通道的建立。

    user用与节点b相同的方法计算通道密钥key,接下来的通讯均用key进行加密。

    3)发起应用事务

    本申请实施例中,共识节点不允许发起应用事务,只有普通节点具有此权限(比如注册数字资产、资产交易等)。需要发起一个事务时,普通节点需要将事务发给共识节点处理,并获取处理结果。实现方法如下:

    i.接入网络:普通节点(记为user)随机接入区块链服务网络,并和某个共识节点(记为b)建立安全通道,并查询user在区块链中的私有状态信息(比如账户余额、交易账单等,视应用事物的不同而可能不同)。由于事务消息中内容通常比较多,所以以下通讯交互过程中消息均用安全通道的密钥加密。

    ii.发起事务:接入网络成功后,根据user的私有状态信息和实际需要,生成事务消息发给节点b。

    事务消息内容主要包括:消息id(由userid、当前时间戳等信息计算得到)、事务列表、消息签名。

    事务列表中可以包含多个事务,每个事务中至少包含事务具体内容和当前时间戳。

    iii处理事务:节点b收到user发起的事务消息后,验证包括时间戳在内的事务内容是否有效。验证通过后,同步给所有其他共识节点的事务池,以便进行接下来的共识处理。

    iv.处理状态查询:user在事务消息发出后,可在随机接入共识网络中的其他任意节点查询事务处理的状态。

    4)共识机制和区块链的形成:

    普通用户的事务提交到共识网络后,各共识节点的事务池会进行同步,然后通过验证和共识机制确定事务是否最终能够上链。

    共识机制的过程采用基于领导节点(leader)和投票的链式回合处理方法,每回合由共识节点中唯一的leader从事务池中取出有效的事务,结合区块链的状态信息打包成新的区块,并发起区块提议广播给其他共识节点,再由所有共识节点进行三回合投票和处理,最终将新区块在链上的状态确定下来。实现方法如下:

    可参见图6所示,共识机制包括:

    a)创世块的生成和共识过程:

    创世块为硬编码的固定区块,区块提议中会指定下一回合的leader仍是自己。

    i.初始的区块链网络搭建完成后,区块链的初始状态还没有任何区块。此时(记为回合0),配置某一个共识节点(以图6中节点1为例)作为启动节点,创建硬编码的固定区块作为创世块,下回合(即回合1)的leader(记为l1)仍指向自己,将创世块及l1一起写入提议(记为p0),广播发给所有共识节点。

    ii.各共识节点(记为节点j)对收到的提议p0进行验证后(包括对创世块和l1的验证),对p0做门限签名得到投票(记为vj*0),并各自独立计算vrf数据(记为vrfj*0),包括:

    vhj*0=vrf_hash(prikeyj,hash(p0))

    vpj*0=vrf_proof(prikeyj,hash(p0))

    各节点将vj*0和vrfj*0发给回合1的leader(l1),即发回给节点1。

    需要说明的是,j*0表征节点j在第0回合,j*1表征节点j在第1回合,以此类推。

    iii.回合1的leader收到足够多的各节点发来的vj*0和vrfj*0后,验证并统计投票,生成下回合的提议,包括:

    按门限签名的方法将投票vj*0做成聚合签名(记为qc0),qc0将作为p0的投票统计的公告结果。

    计算hash(qc0),并以hash(qc0)为基准在各节点发来的vrfj*0中找到最接近的1个。以节点k发来的vrfk*0为例,则确定节点k作为下回合(即回合2)的leader(记为l2)。

    将相关数据(至少包括:qc0、l2 vrfk*0,以及用从事务池中取出的若干事务而生成的新区块)签名后生成新提议(记为p1),广播给所有共识节点。

    iv.各共识节点对收到的相关数据进行验证和处理:

    验证qc0的合法性。因qc0是通过各共识节点做门限签名聚合的结果,所以各共识节点均可以验证qc0的合法性。

    通过l2在白名单中找对应节点k的公钥,验证vrfk*0,确认下回合leader的选择是根据区块链的最新状态而随机选择的。

    对p1中的区块进行合法性验证。

    以上验证均通过后,将节点本地内存中提议p0的状态修改为“准备提交”状态。生成对前一个投票结果qc0的投票(记为vqcj*0)、对新提议p1的投票vj*1和vrf数据vrfj*1,发给已验证的下回合leader,l2。

    v.回合2的leader收到足够多的各节点发来的vqcj*0、vj*1和vrfj*1后,类似之前的处理完成验证并统计投票,生成下回合的提议,包括:

    对投票vj*1聚合签名为qc1,对前回合qc0的投票得到聚合签名cqc0,cqc0表示p0已经可以被证明内存状态更新的节点达到了法定数量(cqc0作为p0最终被确认的标志)。

    计算hash(qc1)并找出下回合leader(以节点i为例,记为l3)

    相关数据(至少包括:cqc0、qc1、l3 vrfi*1,以及用从事务池中取出的若干事务而生成的新区块)签名后生成新提议(记为p2),广播给所有节点。

    vi.各节点收到提议p2后类似步骤iv的处理方法,根据cqc0则将和p0一起提交到本地数据库中做持久性保存。

    b)区块的生成和共识的一般过程

    vii.创世块共识之后,区块生成和共识的一般过程与回合2的处理类似,如图中的回合n。

    根据本实施例的方案,至少具有以下有效效果:

    1、可以通过基于安全模块和随机接入方法的安全准入机制,共识网络可以提高准入门槛,确保新加入的共识节点的安全可控,并符合监管的需要;而新加入的普通节点也可以确认自己接入的网络是可靠可信的。

    2.通过在共识节点和普通用户分别安装硬件安全模块和软件安全模块,在权限上对共识节点和普通用户进行区分,使区块链核心和应用部分的业务承担得到了安全隔离和控制,降低恶意节点冒充和干扰的风险。

    3.共识机制中通过基于区块链状态和vrf实现每回合可验证的随机确定机制,其中:每回合的leader唯一就简化了投票的消耗,提高共识的效率;leader确定的随机性则避免了leader被预测而受到干扰,提高了区块链网络的安全性;而从投票的节点中确定下回合leader,避免了选空风险,提高了共识机制运行的可靠性。

    4.共识机制中每回合投票直接发给下回合leader,降低通讯复杂度的同时,降低了共识网络外的恶意节点针对leader恶意干扰的风险,提高了区块链网络的可靠性。

    5.此外,一个区块从提议到确定下来仅需要三回合,提高了共识效率。

    实施例六:

    基于同一发明构思,本申请实施例中还提供了两种共识节点准入装置和三种普通节点准入装置。请参阅图7至图11所示,图7和图8示出了分别与实施例一所示的方法中的待接入共识节点和目标共识节点所执行的操作对应的共识节点准入装置100和200,图9和图10示出了分别与实施例二所示的方法中的普通节点和目标共识节点所执行的操作对应的普通节点准入装置300和400,图11示出了与实施例三所示的方法中的普通节点所执行的操作对应的普通节点准入装置500。

    应理解,共识节点准入装置100和200、普通节点准入装置300、400和500具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。共识节点准入装置100和200、普通节点准入装置300、400和500包括至少一个能以软件或固件的形式存储于存储器中或固化在共识节点准入装置100和200、普通节点准入装置300、400和500的操作系统中的软件功能模块。具体地:

    参见图7所示,共识节点准入装置100,应用于待接入共识节点中,包括:第一生成模块101、确定模块102和第一连接处理模块103。其中:

    所述第一生成模块101,用于生成自身的公钥、私钥和唯一标识,以及根据所述私钥以及所述唯一标识,采用可验证随机函数vrf生成可验证随机数vh和所述vh的证明vp;

    所述确定模块102,用于根据所述vh确定出第一选择基数,基于所述第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准从所述共识网络中选择出目标共识节点;

    所述第一连接处理模块103,用于连接所述目标共识节点,并向所述目标共识节点发送包含所述公钥、所述vh和所述vp的注册申请消息,以供所述目标共识节点根据所述公钥和所述vp,对待接入共识节点进行验证。

    在本申请实施例中,第一生成模块101具体用于,安装预设的准入单位所审核分配的第一安全模块,采用所述第一安全模块生成自身的公钥和私钥,并根据所述公钥生成自身的唯一标识。

    在本申请实施例中,所述准入单位具有所述第一安全模块的数据读写权限。

    在本申请实施例中,所述第一安全模块为硬件安全模块。

    在本申请实施例中,确定模块102还用于,在根据所述公钥生成自身的唯一标识之前,从所述准入单位处获取根公钥和可被所述根公钥验证的第一根签名;对应的,确定模块102根据所述公钥生成自身的唯一标识具体包括:对所述第一根签名和所述自身的公钥进行计算,得到所述唯一标识。

    在本申请实施例中,确定模块102具体用于,从共识网络中,选择出唯一标识与所述第一选择基数最接近的n个候选共识节点;所述n为预设的大于等于1的正整数;从所述n个候选共识节点中,确定出一个候选共识节点作为所述目标共识节点。

    在本申请实施例中,所述第一连接处理模块103还用于,在与所述目标共识节点连接失败时,从所述n个候选共识节点中重新确定一个候选共识节点作为所述目标共识节点进行连接。

    在本申请实施例中,所述确定模块102还用于,在接收到针对所述注册申请消息的注册响应消息时,对所述注册响应消息进行验证;在接收到的验证通过的注册响应消息的数量大于等于预设数量阈值时,确定注册成功。

    在本申请实施例中,所述待接入共识节点中预先获取有根公钥;所述注册响应消息中包含可被所述根公钥验证的第二根签名、发送所述注册响应消息的共识节点的公钥;所述确定模块102具体用于,使用所述根公钥对所述注册响应消息中的第二根签名进行验证;在验证通过时,采用所述共识节点的公钥和第二根签名,计算所述共识节点的唯一标识;校验计算出的所述共识节点的唯一标识是否为所述共识网络中已有的唯一标识;若是,验证通过;否则,验证不通过。

    在本申请实施例中,所述注册申请消息中包含有第一根签名;所述注册响应消息中还包含:发送所述注册响应消息的共识节点,根据所述注册申请消息中的公钥和所述第一根签名计算得到的所述待接入共识节点的唯一标识;所述确定模块102还用于,在使用所述根公钥对所述注册响应消息中的第二根签名进行验证之前,确定所述注册响应消息中的唯一标识与自身的唯一标识一致。

    参见图8所示,一种共识节点准入装置200,应用于共识节点中,包括:接收模块201、第一验证模块202和处理模块203。其中:

    所述接收模块201,用于接收待接入共识节点发来的注册申请消息;所述注册申请消息中包含有所述待接入共识节点的公钥、可验证随机数vh和所述vh的证明vp;

    所述第一验证模块202,用于根据所述待接入共识节点的公钥和vp验证所述vh的合法性;

    所述处理模块203,用于在验证合法后,根据所述vh确定出第一选择基数,在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,将所述待接入共识节点的信息更新到自身的白名单中。

    在本申请实施例中,所述处理模块203还用于,在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,向所述待接入共识节点反馈注册响应消息,所述注册响应消息中包含可被根公钥验证的第二根签名、所述共识节点的公钥,以供所述待接入共识节点对所述注册响应消息进行验证。

    在本申请实施例中,所述注册申请消息中包含有所述待接入共识节点的第一根签名;所述处理模块203还用于,在向所述待接入共识节点反馈注册响应消息之前,根据所述注册申请消息中的第一根签名和公钥,计算得到所述待接入共识节点的唯一标识;将计算得到的所述待接入共识节点的唯一标识放入所述注册响应消息中。

    参见图9所示,一种普通节点准入装置300,应用于普通节点中,包括:第一获取模块301、第二生成模块302和第二连接处理模块303。其中:

    所述第一获取模块301,用于获取区块链最大高度height和最新的共识网络的白名单;所述白名单中包含有所述共识网络内的各个共识节点的唯一标识;

    所述第二生成模块302,用于生成自身的公钥和私钥,根据所述height和所述公钥生成第二选择基数;

    所述第二连接处理模块303,用于基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点;连接所述目标共识节点,并向所述目标共识节点发送接入请求消息;在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道。

    在本申请实施例中,所述第二生成模块302具体用于,从预设的门户站点处获取预设的准入单位配置的第二安全模块;采用所述第二安全模块生成自身的公钥和私钥。

    在本申请实施例中,所述第二安全模块为软件安全模块。

    在本申请实施例中,所述准入单位具有所述第二安全模块的数据读写权限。

    在本申请实施例中,所述第一获取模块301具体用于,从预设的门户站点处获取所述height和所述最新的共识网络的白名单。

    在本申请实施例中,所述普通节点中预设有用户名和密码;所述第二生成模块302还用于根据所述用户名和密码,计算得到帐户因子,使用所述帐户因子对所述私钥进行加密。

    在本申请实施例中,所述第二连接处理模块303具体用于,从所述白名单中,选择出唯一标识与所述第二选择基数最接近的m个候选共识节点;所述m为预设的大于等于1的正整数;从所述m个候选共识节点中,确定出一个候选共识节点作为所述目标共识节点。

    在本申请实施例中,所述第二连接处理模块303还用于,在与所述目标共识节点连接失败时,从所述m个候选共识节点中重新确定一个候选共识节点作为所述目标共识节点进行连接。

    参见图10所示,一种普通节点准入装置400,应用于共识节点中,包括:第二验证模块401和处理单元402。其中:

    所述第二验证模块401,用于在接收到普通节点发来的接入请求消息时,验证所述接入请求消息的合法性;

    所述处理单元402,用于在验证合法时,与所述普通节点建立安全通道。

    在本申请实施例中,所述接入请求消息中包含有所述普通节点的用户名和密码的哈希值;所述第二验证模块401具体用于,验证所述普通节点的用户名是否在区块链中唯一,并在唯一时,确定所述接入请求消息合法。

    在本申请实施例中,所述接入请求消息中还包含有所述普通节点请求接入时的时间戳;所述第二验证模块401还用于,在验证所述普通节点的用户名是否在所述区块链中唯一之前,确定所述时间戳与当前时间之间的时间差在预设范围内。

    在本申请实施例中,所述接入请求消息中还包含有所述普通节点请求接入时所获取到的区块链最大高度height;所述第二验证模块401还用于,在验证所述普通节点的用户名是否在所述区块链中唯一之前,确定所述height与当前的区块链最大高度之间的差值在预设范围内。

    参见图11所示,一种普通节点准入装置500,应用于普通节点中,包括:第二获取模块501和第三连接处理模块502。其中:

    所述第二获取模块501,用于获取区块链最大高度height和最新的共识网络的白名单;

    所述第三连接处理模块502,用于从所述白名单中确定出目标共识节点,连接所述目标共识节点,并向所述目标共识节点发送包含所述height的接入请求消息,以供所述目标共识节点基于所述height验证所述普通节点的合法性;在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道;所述安全通道建立信息为所述目标共识节点基于所述height验证所述普通节点合法后发送的反馈的信息。

    在本申请实施例中,所述第三连接处理模块502还用于,生成自身的公钥和私钥。所述第三连接处理模块502具体用于,根据所述height和所述公钥生成第二选择基数;基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点。

    在本申请实施例中,所述第三连接处理模块502具体用于,从预设的门户站点处获取预设的准入单位配置的第二安全模块;采用所述第二安全模块生成自身的公钥和私钥。

    在本申请实施例中,所述第二安全模块为软件安全模块。

    在本申请实施例中,所述准入单位具有所述第二安全模块的数据读写权限。

    此外,在本申请实施例中还提供了一种共识网络,与实施例四所示的方法对应。

    共识网络包括多个共识节点,所述共识节点中包括本回合领导节点,所述本回合领导节点提议的下回合领导节点,以及所述下回合领导节点提议的再下回合领导节点;

    所述本回合领导节点用于发起第一提议,并广播给所述共识网络中的所有共识节点;所述第一提议中包括提议的区块和提议的下回合领导节点;

    所述共识网络中的各共识节点用于对所述第一提议进行门限签名,并将签名结果发送给所述下回合领导节点;

    所述下回合领导节点用于将各共识节点的门限签名形成聚合签名,并确定再下回合领导节点;

    所述下回合领导节点还用于发起第二提议,并广播给所述共识网络中的所有共识节点;所述第二提议中包括新提议的区块、所述聚合签名和所述再下回合领导节点;

    所述共识网络中的各共识节点还用于对所述聚合签名的合法性进行验证,并在验证通过时,向所述再下回合领导节点反馈验证结果;

    所述再下回合领导节点用于在确定出验证通过的共识节点数目达到预设阈值时,将所述第一提议提交至数据库保存。

    需要说明的是,共识网络中的各个节点可以通过一个或多个电子设备实现。

    在本申请实施例中,每回合的领导节点有且仅有一个。

    在本申请实施例中,所述下回合领导节点具体用于随机从所述共识网络中的各共识节点中确定出所述再下回合领导节点。

    在本申请实施例中,所述下回合领导节点具体用于,依据所述聚合签名确定出第三选择基数;确定出门限签名与所述第三选择基数最相近的共识节点为所述再下回合领导节点。

    在本申请实施例中,在所述共识网络中的各共识节点对所述第一提议进行门限签名后,各共识节点还用于分别采用可验证随机函数生成各自的可验证随机数vh和所述vh的证明vp,并将所述vh和vp发送给所述下回合领导节点。

    在本申请实施例中,所述第二提议中还包括:所述再下回合领导节点的vp和vh;各共识节点还用于获取所述再下回合领导节点的公钥,基于所述公钥、所述再下回合领导节点的vp,验证所述再下回合领导节点的vh。

    需要理解的是,出于描述简洁的考量,部分实施例一至四中描述过的内容在本实施例中不再赘述。

    实施例七:

    本实施例提供了一种电子设备,可以参见图12所示,其包括处理器1201、存储器1202及通信总线1203。其中:

    通信总线1203用于实现处理器1201和存储器1202之间的连接通信。

    处理器1201用于执行存储器1202中存储的一个或多个程序,以实现上述实施例一中待接入共识节点或目标共识节点所实施的共识节点准入方法,或实现上述实施例二/实施例三中普通节点或目标共识节点所实施的普通节点准入方法。

    可以理解,图12所示的结构仅为示意,电子设备还可包括比图12中所示更多或者更少的组件,或者具有与图12所示不同的配置,在本申请实施例中不做限定。

    本申请实施例中的电子设备可以通过诸如服务器、移动终端、固定终端等设备实现。

    本实施例还提供了一种可读存储介质,如软盘、光盘、硬盘、闪存、u盘、sd(securedigitalmemorycard,安全数码卡)卡、mmc(multimediacard,多媒体卡)卡等,在该可读存储介质中存储有实现上述各个步骤的一个或者多个程序,这一个或者多个程序可被一个或者多个处理器执行,以实现上述实施例一中待接入共识节点或目标共识节点所实施的共识节点准入方法,或实现上述实施例二/实施例三中普通节点或目标共识节点所实施的普通节点准入方法。在此不再赘述。

    在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

    另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

    再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

    在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

    在本文中,多个是指两个或两个以上。

    以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。


    技术特征:

    1.一种共识节点准入方法,其特征在于,应用于待接入共识节点中,包括:

    生成自身的公钥、私钥和唯一标识;

    根据所述私钥以及所述唯一标识,采用可验证随机函数vrf生成可验证随机数vh和所述vh的证明vp;

    根据所述vh确定出第一选择基数;

    基于所述第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准从所述共识网络中选择出目标共识节点;

    连接所述目标共识节点,并向所述目标共识节点发送包含所述公钥、所述vh和所述vp的注册申请消息,以供所述目标共识节点根据所述公钥和所述vp,对待接入共识节点进行验证。

    2.如权利要求1所述的共识节点准入方法,其特征在于,所述生成自身的公钥、私钥和唯一标识包括:

    安装预设的准入单位所审核分配的第一安全模块;

    采用所述第一安全模块生成自身的公钥和私钥,并根据所述公钥生成自身的唯一标识。

    3.如权利要求2所述的共识节点准入方法,其特征在于,所述准入单位具有所述第一安全模块的数据读写权限。

    4.如权利要求2所述的共识节点准入方法,其特征在于,所述第一安全模块为硬件安全模块。

    5.如权利要求2所述的共识节点准入方法,其特征在于,在根据所述公钥生成自身的唯一标识之前,所述方法还包括:

    从所述准入单位处获取根公钥和可被所述根公钥验证的第一根签名;

    对应的,所述根据所述公钥生成自身的唯一标识包括:

    对所述第一根签名和所述自身的公钥进行计算,得到所述唯一标识。

    6.如权利要求1所述的共识节点准入方法,其特征在于,基于所述第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准从所述共识网络中选择出目标共识节点,包括:

    从共识网络中,选择出唯一标识与所述第一选择基数最接近的n个候选共识节点;所述n为预设的大于等于1的正整数;

    从所述n个候选共识节点中,确定出一个候选共识节点作为所述目标共识节点。

    7.如权利要求6所述的共识节点准入方法,其特征在于,所述方法还包括:

    在与所述目标共识节点连接失败时,从所述n个候选共识节点中重新确定一个候选共识节点作为所述目标共识节点进行连接。

    8.如权利要求1-7任一项所述的共识节点准入方法,其特征在于,所述方法还包括:

    在接收到针对所述注册申请消息的注册响应消息时,对所述注册响应消息进行验证;

    在接收到的验证通过的注册响应消息的数量大于等于预设数量阈值时,确定注册成功。

    9.如权利要求8所述的共识节点准入方法,其特征在于,所述待接入共识节点中预先获取有根公钥;所述注册响应消息中包含可被所述根公钥验证的第二根签名、发送所述注册响应消息的共识节点的公钥;

    所述在接收到针对所述注册申请消息的注册响应消息时,对所述注册响应消息进行验证,包括:

    使用所述根公钥对所述注册响应消息中的第二根签名进行验证;

    在验证通过时,采用所述共识节点的公钥和第二根签名,计算所述共识节点的唯一标识;

    校验计算出的所述共识节点的唯一标识是否为所述共识网络中已有的唯一标识;

    若是,验证通过;否则,验证不通过。

    10.如权利要求9所述的共识节点准入方法,其特征在于,所述注册申请消息中包含有第一根签名;所述注册响应消息中还包含:发送所述注册响应消息的共识节点,根据所述注册申请消息中的公钥和所述第一根签名计算得到的所述待接入共识节点的唯一标识;

    所述使用所述根公钥对所述注册响应消息中的第二根签名进行验证之前,还包括:

    确定所述注册响应消息中的唯一标识与自身的唯一标识一致。

    11.一种共识节点准入方法,其特征在于,应用于共识节点中,包括:

    接收待接入共识节点发来的注册申请消息;所述注册申请消息中包含有所述待接入共识节点的公钥、可验证随机数vh和所述vh的证明vp;

    根据所述待接入共识节点的公钥和vp验证所述vh的合法性;

    在验证合法后,根据所述vh确定出第一选择基数;

    在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,将所述待接入共识节点的信息更新到自身的白名单中。

    12.如权利要求11所述的共识节点准入方法,其特征在于,在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,所述方法还包括:

    向所述待接入共识节点反馈注册响应消息,所述注册响应消息中包含可被根公钥验证的第二根签名、所述共识节点的公钥,以供所述待接入共识节点对所述注册响应消息进行验证。

    13.如权利要求12所述的共识节点准入方法,其特征在于,所述注册申请消息中包含有所述待接入共识节点的第一根签名;向所述待接入共识节点反馈注册响应消息之前,所述方法还包括:

    根据所述注册申请消息中的第一根签名和公钥,计算得到所述待接入共识节点的唯一标识;

    将计算得到的所述待接入共识节点的唯一标识放入所述注册响应消息中。

    14.一种普通节点准入方法,其特征在于,应用于普通节点中,包括:

    获取区块链最大高度height和最新的共识网络的白名单;所述白名单中包含有所述共识网络内的各个共识节点的唯一标识;

    生成自身的公钥和私钥;

    根据所述height和所述公钥生成第二选择基数;

    基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点;

    连接所述目标共识节点,并向所述目标共识节点发送接入请求消息;

    在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道。

    15.如权利要求14所述的普通节点准入方法,其特征在于,所述生成自身的公钥和私钥,包括:

    从预设的门户站点处获取预设的准入单位配置的第二安全模块;

    采用所述第二安全模块生成自身的公钥和私钥。

    16.如权利要求15所述的普通节点准入方法,其特征在于,所述第二安全模块为软件安全模块。

    17.如权利要求15所述的普通节点准入方法,其特征在于,所述准入单位具有所述第二安全模块的数据读写权限。

    18.如权利要求14所述的普通节点准入方法,其特征在于,所述获取区块链最大高度height和最新的共识网络的白名单,包括:

    从预设的门户站点处获取所述height和所述最新的共识网络的白名单。

    19.如权利要求14所述的普通节点准入方法,其特征在于,所述普通节点中预设有用户名和密码;

    所述方法还包括:

    根据所述用户名和密码,计算得到帐户因子;

    使用所述帐户因子对所述私钥进行加密。

    20.如权利要求14-19任一项所述的普通节点准入方法,其特征在于,基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点,包括:

    从所述白名单中,选择出唯一标识与所述第二选择基数最接近的m个候选共识节点;所述m为预设的大于等于1的正整数;

    从所述m个候选共识节点中,确定出一个候选共识节点作为所述目标共识节点。

    21.如权利要求20所述的普通节点准入方法,其特征在于,所述方法还包括:

    在与所述目标共识节点连接失败时,从所述m个候选共识节点中重新确定一个候选共识节点作为所述目标共识节点进行连接。

    22.一种普通节点准入方法,其特征在于,应用于共识节点中,包括:

    在接收到普通节点发来的接入请求消息时,验证所述接入请求消息的合法性;

    在验证合法时,与所述普通节点建立安全通道。

    23.如权利要求22所述的普通节点准入方法,其特征在于,所述接入请求消息中包含有所述普通节点的用户名和密码的哈希值;

    所述验证所述接入请求消息的合法性包括:

    验证所述普通节点的用户名是否在区块链中唯一;

    若所述普通节点的用户名在所述区块链中唯一,并在唯一时,确定所述接入请求消息合法。

    24.如权利要求23所述的普通节点准入方法,其特征在于,所述接入请求消息中还包含有所述普通节点请求接入时的时间戳;

    在验证所述普通节点的用户名是否在所述区块链中唯一之前,所述方法还包括:

    确定所述时间戳与当前时间之间的时间差在预设范围内。

    25.如权利要求23所述的普通节点准入方法,其特征在于,所述接入请求消息中还包含有所述普通节点请求接入时所获取到的区块链最大高度height;

    在验证所述普通节点的用户名是否在所述区块链中唯一之前,所述方法还包括:

    确定所述height与当前的区块链最大高度之间的差值在预设范围内。

    26.一种普通节点准入方法,其特征在于,应用于普通节点中,包括:

    获取区块链最大高度height和最新的共识网络的白名单;

    从所述白名单中确定出目标共识节点;

    连接所述目标共识节点,并向所述目标共识节点发送包含所述height的接入请求消息,以供所述目标共识节点基于所述height验证所述普通节点的合法性;

    在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道;所述安全通道建立信息为所述目标共识节点基于所述height验证所述普通节点合法后发送的反馈的信息。

    27.如权利要求26所述的普通节点准入方法,其特征在于,所述方法还包括:生成自身的公钥和私钥;

    所述从所述白名单中确定出目标共识节点包括:

    根据所述height和所述公钥生成第二选择基数;

    基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点。

    28.如权利要求27所述的普通节点准入方法,其特征在于,所述生成自身的公钥和私钥,包括:

    从预设的门户站点处获取预设的准入单位配置的第二安全模块;

    采用所述第二安全模块生成自身的公钥和私钥。

    29.如权利要求28所述的普通节点准入方法,其特征在于,所述第二安全模块为软件安全模块。

    30.如权利要求28所述的普通节点准入方法,其特征在于,所述准入单位具有所述第二安全模块的数据读写权限。

    31.一种共识方法,其特征在于,应用于共识网络中,包括:

    本回合领导节点发起第一提议,并广播给所述共识网络中的所有共识节点;所述第一提议中包括提议的区块和提议的下回合领导节点;

    所述共识网络中的各共识节点对所述第一提议进行门限签名,并将签名结果发送给所述下回合领导节点;

    所述下回合领导节点将各共识节点的门限签名形成聚合签名,并确定再下回合领导节点;

    所述下回合领导节点发起第二提议,并广播给所述共识网络中的所有共识节点;所述第二提议中包括新提议的区块、所述聚合签名和所述再下回合领导节点;

    所述共识网络中的各共识节点对所述聚合签名的合法性进行验证,并在验证通过时,向所述再下回合领导节点反馈验证结果;

    所述再下回合领导节点在确定出验证通过的共识节点数目达到预设阈值时,将所述第一提议提交至数据库保存。

    32.如权利要求31所述的共识方法,其特征在于,每回合的领导节点有且仅有一个。

    33.如权利要求31所述的共识方法,其特征在于,所述确定再下回合领导节点,包括:

    随机从所述共识网络中的各共识节点中确定出所述再下回合领导节点。

    34.如权利要求33所述的共识方法,其特征在于,随机从所述共识网络中的各共识节点中确定出所述再下回合领导节点,包括:

    依据所述聚合签名确定出第三选择基数;

    确定出门限签名与所述第三选择基数最相近的共识节点为所述再下回合领导节点。

    35.如权利要求31-34任一项所述的共识方法,其特征在于,在所述共识网络中的各共识节点对所述第一提议进行门限签名后,所述方法还包括:

    各共识节点分别采用可验证随机函数生成各自的可验证随机数vh和所述vh的证明vp,并将所述vh和vp发送给所述下回合领导节点。

    36.如权利要求35所述的共识方法,其特征在于,所述第二提议中还包括:所述再下回合领导节点的vp和vh;所述方法还包括:

    各共识节点获取所述再下回合领导节点的公钥,基于所述公钥、所述再下回合领导节点的vp,验证所述再下回合领导节点的vh。

    37.一种共识节点准入装置,其特征在于,应用于待接入共识节点中,包括:第一生成模块、确定模块和第一连接处理模块;

    所述第一生成模块,用于生成自身的公钥、私钥和唯一标识,以及根据所述私钥以及所述唯一标识,采用可验证随机函数vrf生成可验证随机数vh和所述vh的证明vp;

    所述确定模块,用于根据所述vh确定出第一选择基数,基于所述第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准从所述共识网络中选择出目标共识节点;

    所述第一连接处理模块,用于连接所述目标共识节点,并向所述目标共识节点发送包含所述公钥、所述vh和所述vp的注册申请消息,以供所述目标共识节点根据所述公钥和所述vp,对待接入共识节点进行验证。

    38.一种共识节点准入装置,其特征在于,应用于共识节点中,包括:接收模块、第一验证模块和处理模块;

    所述接收模块,用于接收待接入共识节点发来的注册申请消息;所述注册申请消息中包含有所述待接入共识节点的公钥、可验证随机数vh和所述vh的证明vp;

    所述第一验证模块,用于根据所述待接入共识节点的公钥和vp验证所述vh的合法性;

    所述处理模块,用于在验证合法后,根据所述vh确定出第一选择基数,在所述共识节点自身的唯一标识和所述第一选择基数满足预设的选择标准时,将所述待接入共识节点的信息更新到自身的白名单中。

    39.一种普通节点准入装置,其特征在于,应用于普通节点中,包括:第一获取模块、第二生成模块和第二连接处理模块;

    所述第一获取模块,用于获取区块链最大高度height和最新的共识网络的白名单;所述白名单中包含有所述共识网络内的各个共识节点的唯一标识;

    所述第二生成模块,用于生成自身的公钥和私钥,根据所述height和所述公钥生成第二选择基数;

    所述第二连接处理模块,用于基于所述第二选择基数,从所述白名单中确定出满足预设的选择标准的唯一标识所对应的目标共识节点;连接所述目标共识节点,并向所述目标共识节点发送接入请求消息;在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道。

    40.一种普通节点准入装置,其特征在于,应用于共识节点中,包括:第二验证模块和处理单元;

    所述第二验证模块,用于在接收到普通节点发来的接入请求消息时,验证所述接入请求消息的合法性;

    所述处理单元,用于在验证合法时,与所述普通节点建立安全通道。

    41.一种普通节点准入装置,其特征在于,应用于普通节点中,包括:第二获取模块和第三连接处理模块;

    所述第二获取模块,用于获取区块链最大高度height和最新的共识网络的白名单;

    所述第三连接处理模块,用于从所述白名单中确定出目标共识节点,连接所述目标共识节点,并向所述目标共识节点发送包含所述height的接入请求消息,以供所述目标共识节点基于所述height验证所述普通节点的合法性;在接收所述目标共识节点返回的安全通道建立信息时,根据所述安全通道建立信息建立安全通道;所述安全通道建立信息为所述目标共识节点基于所述height验证所述普通节点合法后发送的反馈的信息。

    42.一种共识网络,其特征在于,包括多个共识节点,所述共识节点中包括本回合领导节点,所述本回合领导节点提议的下回合领导节点,以及所述下回合领导节点提议的再下回合领导节点;

    所述本回合领导节点用于发起第一提议,并广播给所述共识网络中的所有共识节点;所述第一提议中包括提议的区块和提议的下回合领导节点;

    所述共识网络中的各共识节点用于对所述第一提议进行门限签名,并将签名结果发送给所述下回合领导节点;

    所述下回合领导节点用于将各共识节点的门限签名形成聚合签名,并确定再下回合领导节点;

    所述下回合领导节点还用于发起第二提议,并广播给所述共识网络中的所有共识节点;所述第二提议中包括新提议的区块、所述聚合签名和所述再下回合领导节点;

    所述共识网络中的各共识节点还用于对所述聚合签名的合法性进行验证,并在验证通过时,向所述再下回合领导节点反馈验证结果;

    所述再下回合领导节点用于在确定出验证通过的共识节点数目达到预设阈值时,将所述第一提议提交至数据库保存。

    43.一种电子设备,其特征在于,包括:处理器、存储器及通信总线;

    所述通信总线用于实现所述处理器和存储器之间的连接通信;

    所述处理器用于执行存储器中存储的一个或者多个程序,以实现如权利要求1至30任一项所述的方法。

    44.一种可读存储介质,其特征在于,所述可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求1至30任一项所述的方法。

    技术总结
    本申请提供一种节点准入方法、共识方法、装置、电子设备及存储介质,方法包括:待接入共识节点生成自身的公钥、私钥和唯一标识;根据私钥以及唯一标识,采用VRF生成可验证随机数Vh和Vh的证明Vp;根据Vh确定出第一选择基数;基于第一选择基数和共识网络中各共识节点的唯一标识,按照预设的选择标准选择出目标共识节点,连接目标共识节点并发送包含公钥、Vh和Vp的注册申请消息,以供目标共识节点根据公钥和Vp,对待接入共识节点进行验证。这样,通过随机接入方式可以避免非法节点针对性攻击共识网络中的某个固定位置的共识节点;同时,随机接入方式也能在一定程度上起到随机负载的作用,从而提高网络的稳定性。

    技术研发人员:魏晔;郑力铮;刘利华;汤俊峰
    受保护的技术使用者:北京数码视讯科技股份有限公司
    技术研发日:2020.11.18
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-7946.html

    最新回复(0)