CN117896194A - 一种基于有向无环图的拜占庭可靠广播方法 - Google Patents

一种基于有向无环图的拜占庭可靠广播方法 Download PDF

Info

Publication number
CN117896194A
CN117896194A CN202311812944.4A CN202311812944A CN117896194A CN 117896194 A CN117896194 A CN 117896194A CN 202311812944 A CN202311812944 A CN 202311812944A CN 117896194 A CN117896194 A CN 117896194A
Authority
CN
China
Prior art keywords
response
message
dag
server
refs
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311812944.4A
Other languages
English (en)
Inventor
田海博
陈嘉俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Yat Sen University
Original Assignee
Sun Yat Sen University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Yat Sen University filed Critical Sun Yat Sen University
Priority to CN202311812944.4A priority Critical patent/CN117896194A/zh
Publication of CN117896194A publication Critical patent/CN117896194A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明涉及信息安全、分布式计算技术领域,更具体地,涉及一种基于有向无环图的拜占庭可靠广播方法。通过采用有向无环图的结构,提出一种新的完成拜占庭可靠广播的方法,假设有m条消息需要完成可靠广播,本协议的通信复杂度为O(mn|M|+kmn),并且通信轮数平均意义上只需要3轮。通过本发明,可以减少可靠广播协议的通信轮数以及降低通信复杂度,从而提高可靠广播的效率。当前最优的可靠广播协议为4轮通信,本发明为3轮通信;单消息可靠广播的情况下,当前最优的可靠广播协议的通信复杂度为O(n|M|+kn+n2logn),本发明为O(n|M|+kn)。

Description

一种基于有向无环图的拜占庭可靠广播方法
技术领域
本发明涉及信息安全、分布式计算技术领域,更具体地,涉及一种基于有向无环图的拜占庭可靠广播方法。
背景技术
拜占庭可靠广播问题最早在1987年被Bracha等人提出。Bracha等人针对此问题提出了一种error-free的可靠广播协议。该协议巧妙地将鸽笼定理运用到协议当中,使得诚实的服务端和客户端在敌手计算无界的情况下也能完成可靠广播。单消息可靠广播的情况下,该协议的通信复杂度为O(n2|M|),其中n是网络中服务端的个数,|M|是消息M的长度。
随后,基于Bracha等人的工作,研究者们在敌手计算有界的假设下,提出了新的可靠广播协议。2005年Cachin和Tessaro等人通过抗碰撞哈希函数、擦除码等技术使得所有诚实结点只需广播消息的分片及默克尔树形成的哈希值,减小了通信复杂度。令k表示哈希函数、数字签名等辅助技术输出的大小,该协议广播一个消息的通信复杂度为O(n|M|+kn2logn)。2007年,Hendricks等人提出在广播过程中将消息的分片进一步替换成指纹函数,该协议的通信复杂度为O(n|M|+kn3)。2020年Nayak等人提出了基于累加器和纠错码的可靠广播协议,该协议的通信复杂度为O(n|M|+kn2)。
在2021年,Das等人提出了异步数据分发问题。该问题指的是如何将数据从诚实结点的子集扩散到所有诚实结点,从而能够解决拜占庭可靠广播问题。Das等人给出了异步数据分发的协议,并给出了拜占庭可靠广播协议,其通信复杂度为O(n|M|+kn2),消息的通信轮数为4轮。在2022年,Alhaddad等人采用了Bracha等人的可靠广播协议结构,并融合了Cachin和Tessaro等人采用的擦除码技术和Das等人的异步数据分发方法,提出了一种新的可靠广播协议,降低了计算开销,其通信复杂度依旧是O(n|M|+kn2),消息的通信轮数为4轮。另外,基于门限签名,拜占庭一致广播和异步数据分发的思想构造了新的可靠广播协议,协议的通信复杂度进一步降为O(n|M|+kn+n2logn),但消息的通信轮数为7轮。
综上,假设敌手计算有界,目前完成单消息拜占庭可靠广播的通信复杂度最低为O(n|M|+kn+n2logn),通信轮数最低为4轮。在m条消息需要完成可靠广播的情况下,当前最优的拜占庭可靠广播通信复杂度则为O(nm|M|+kmn+mn2logn),在通信节点数量较多,可靠广播消息数量较大时通信开销较大。
发明内容
本发明为克服上述现有技术中的缺陷,提供一种基于有向无环图的拜占庭可靠广播方法,能够降低通信复杂度,减少通信轮数,从而有效降低通信开销成本。
为解决上述技术问题,本发明采用的技术方案是:
一种基于有向无环图的拜占庭可靠广播方法,涉及m个客户端与n个服务端,需要建立认证的安全信道,其中服务端的恶意结点数量至多为tn<n/3,包括以下步骤:
A.第i个服务端si初始化本地有向无环图结点集合DAGi,本地引用集合refsi,以及本地字典votesi,其中i∈{1,...,n};
B.第k个客户端ck向所有服务端发送消息vk,其中k∈{1,...,m};
C.当服务端si收到来自客户端ck的消息vk,如果还没有发送过关于vk的响应消息responseik,那么以概率P=1/(2tn+1)广播responseik
D.当服务端si收到来自服务端sj的responsejk时,如果responsejk中refsj的引用都在DAGi中,那么将H(responsejk)作为新的结点加入到DAGi中,同时更新votesi,其中j∈{1,...,n};若votesi中关于某个消息vk的结点被不同服务端引用的次数大于等于2tn+1,则可决定消息vk,完成关于消息vk可靠广播。
根据上述技术手段,本发明通过采用有向无环图的结构,提出一种新的完成拜占庭可靠广播的方法,假设有m条消息需要完成可靠广播,本协议的通信复杂度为O(mn|M|+kmn),并且通信轮数平均意义上只需要3轮。
进一步地,所述步骤A具体包括:服务端si初始化本地有向无环图结点集合DAGi={H(responseinitial1),H(responseinitial2)},其中H为抗碰撞哈希函数,responseinitial1和responseinitial2为有向无环图中的两个初始结点,并初始化本地引用集合为空值refsi={}以及本地字典为空值votesi={}。
进一步地,所述步骤B具体包括:客户端ck向所有服务端发送消息vk=(initial,valuek,k),其中initial为客户端发送消息的标识,valuek为客户端发送的消息内容,k为客户端编号。
进一步地,所述步骤C具体包括:
C1.服务端si收到来自客户端ck的消息vk=(initial,valuek,k),如果还没有发送关于消息vk的响应消息responseik,那么令整数a=1,同时随机地从(1,2,...,2tn+1)中选取一个整数b,若a=b继续执行以下步骤,否则中止处理该消息;
C2.初始化refsi为空集,在服务端si本地的DAGi中选取si为发送方的结点作为第一个引用ref1,再随机选取在DAGi中其它服务端为发送方的结点作为第二个引用ref2,这两个引用应该优先选择未被引用的结点,然后将ref1和ref2加入到引用集合refsi中;
C3.若服务端si本地的字典votesi中关于消息vk的结点被不同服务端引用的次数大于等于tn+1,且当前服务端si还没有直接引用或间接引用该结点,则将该结点加入到引用集合refsi当中;
C4.服务端si向所有服务端广播responseik=(response,vk,refsi,i),其中response为响应消息的标识,i为服务端编号。
进一步地,所述步骤D具体包括:
D1.当服务端si收到来自服务端sj的responsejk时,判断H(responsejk)是否在DAGi中;若在则中止执行,否则执行以下步骤;
D2.解析responsejk=(response,vk,refsj,j),判断refsj的引用是否都在DAGi中,若不在将responsejk加入到本地缓存bufferi中,并中止执行,否则将H(responsejk)作为结点加入到DAGi中,执行以下步骤;
D3.遍历字典votesi,若refsj中的某个引用等于字典votesi中某个键、或者属于该键对应的值集合,将H(responsejk)加入到该键的值集合中,表明responsejk对该键对应的结点具有直接或间接引用;
D4.将键值对(H(responsejk):{H(responsejk)})加入字典votesi中;
D5.统计关于消息vk的结点被不同服务端引用的次数,若关于消息vk的结点被不同服务端引用的次数大于等于2tn+1,则可决定消息vk,完成可靠广播,将关于消息vk的结点从votesi中删除;
D6.若H(responsejk)作为结点加入到DAGi中使得bufferi中有响应消息满足加入DAGi的条件,则执行步骤D1至D6。
进一步地,还包括E1:若服务端si本地缓存bufferi的大小超过阀值x,则为bufferi中的所有响应消息广播同步请求
syncRequesti=(sync,responsejk,refsj,i),并清空bufferi,其中sync为同步请求的标识。
进一步地,还包括E2:当服务端si收到来自其他服务端sj发送的同步请求syncRequestj=(sync,responsejk,refsj,j)时,检查同步请求中的H(responsejk)是否在本地的DAGi中,如果存在,那么向服务端sj单播responsejk及其直接引用的响应消息。
本发明还提供一种基于有向无环图的拜占庭可靠广播系统,涉及m个客户端与n个服务端,需要建立认证的安全信道,其中服务端的恶意结点数量至多为tn<n/3,包括:
初始化单元:用于第i个服务端si初始化本地有向无环图结点集合DAGi,本地引用集合refsi,以及本地字典votesi,其中i∈{1,...,n};
消息发送单元:用于第k个客户端ck向所有服务端发送消息vk,其中k∈{1,...,m};
第一接收单元:用于当服务端si收到来自客户端ck的消息vk,如果还没有发送过关于vk的响应消息responseik,那么以概率P=1/(2tn+1)广播responseik
第二接收单元:用于当服务端si收到来自服务端sj的responsejk时,如果responsejk中refsj的引用都在DAGi中,那么将H(responsejk)作为新的结点加入到DAGi中,同时更新votesi,其中j∈{1,...,n};若votesi中关于某个消息vk的结点被不同服务端引用的次数大于等于2tn+1,则可决定消息vk,完成关于消息vk可靠广播。
本发明还提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上所述的方法。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的方法。
与现有技术相比,有益效果是:本发明提供的一种基于有向无环图的拜占庭可靠广播方法,可以减少可靠广播协议的通信轮数以及降低通信复杂度,从而提高可靠广播的效率。当前最优的可靠广播协议为4轮通信,本发明为3轮通信;单消息可靠广播的情况下,当前最优的可靠广播协议的通信复杂度为O(n|M|+kn+n2logn),本发明为O(n|M|+kn)。
附图说明
图1是本发明的主要步骤框架图,设置有4个客户端与4个服务端,服务端至多有1个恶意节点。
图2为实施例1中服务端s2逻辑上的有向无环图。
图3为实施例1中服务端s3本地的DAG3及其引用关系逻辑上构成的有向无环图。
图4为实施例1中服务端s1本地的DAG1及其引用关系逻辑上构成的有向无环图。
图5为实施例2中恶意结点转发消息后,服务端s1的本地有向无环图。
图6为实施例2中所有服务端的有向无环图及缓存。
图7为实施例2中所有诚实的服务端的有向无环图及其缓。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。下面结合具体实施方式对本发明作在其中一个实施例中说明。其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本专利的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,全文中出现的“和/或”的含义为,包括三个并列的方案,以“A和/或B”为例,包括A方案,或B方案,或A和B同时满足的方案。
实施例1:
客户端与服务端彼此建立认证的安全信道,这里假设第4个服务端s4为恶意节点,假设c4在本实施例中不做出任何行为,即不发送任何消息,也不接收任何消息。具体包括以下步骤:
A.服务端s1、s2、s3分别初始化本地有向无环图结点集合DAG1、DAG2、DAG3,本地引用集合refs1、refs2、refs3,以及本地字典votes1、votes2、votes3
A1,服务端s1初始化本地有向无环图结点集合DAG1={H(responseinitial1),H(responseinitial2)},本地引用集合refs1={},以及本地字典votes1={}。其中H为抗碰撞哈希函数,responseinitial1和responseinitial2为有向无环图中的两个初始结点,这里仅设置为字符串,标识为初始结点,即设置responseinitial1=″intial_response1″,responseinitial2=″intial_response2″。服务端s2、服务端s3同理。
B.第1个客户端c1向所有服务端发送消息v1
B1.客户端c1向所有服务端发送消息v1=(initial,value1,1),其中initial为客户端发送消息的标识,value1为客户端c1发送的消息内容.
C.当服务端s1收到来自客户端c1的消息v1并且还有发送过服务端s1对第1个客户端c1的响应消息response11时,那么以概率P=1/(2tn+1)广播response11。服务端s2、s3同理。
C1.服务端s1收到来自客户端c1的消息v1=(initial,value1,1)并且还没有发送过服务端s1对第1个客户端c1的响应消息response11时,那么令整数a=1,同时随机地从(1,2,...,2tn+1)选取一个整数b。假设服务端s1选取了整数b=1。服务端s2和服务端s3同理,但假设服务端s2和服务端s3选取的整数b不为1,服务端s2和服务端s3终止处理该消息。
C2.服务端s1中a=b,在服务端s1本地的DAG1中选取s1为发送方的结点作为第一个引用ref1,再随机选取在DAG1中其它服务端为发送方的结点作为第二个引用ref2,这两个引用应该优先选择未被引用的结点,然后将ref1和ref2加入到引用集合refsi中。由于DAG1中只有两个初始结点,所以只能选择H(responseinitial1)作为refs1,H(responseinitial2)作为refs2
C3.服务端s1本地的字典votes1目前为空,故不执行该子步骤。
C4.服务端s1向所有服务端广播response11=(response,v1,refs1,1),其中response为响应消息的标识。
D.当服务端s2收到来自服务端s1的response11时,如果response11中的refs1中的引用都在DAG2中,那么将response11加入到DAG2中,同时更新votes2。若votes2中有关于某个vk的结点被不同服务端引用的个数大于等于2tn+1,则可决定消息vk,完成可靠广播。
D1.当服务端s2收到来自服务端s1的response11时,首先判断H(response11)是否在DAG2中。由于H(response11)不在DAG2中,继续执行以下步骤。
D2.解析response11=(response,v1,refs1,1),则判断response11中的refs1的引用是否都在DAG2中。refs1的引用H(responseinitial1),H(responseinitial3)都在DAG2中,那么将H(response11)作为结点加入到DAG2中。
D3.由于votes2目前为空,故不执行该子步骤。
D4.将键值对(H(response11):{H(response11)})加入字典votes2中,即votes2={(H(response11):{H(response11)})};
D5.由于目前votes2并没有关于消息vk的结点被不同服务端引用的次数大于等于2tn+1,故不执行该子步骤。
D6.由于buffer2为空,故不执行该子步骤。
服务端s1、s3在步骤D中执行过程与服务端s2同理。服务端s2本地的DAG1即结点的引用关系可以在逻辑上构成一个有向无环图,在response11到达服务端s1与s3后,所有服务端的有向无环图一致,如图2所示为服务端s2逻辑上的有向无环图。其中response11在图2中表示为R11
B.第2个客户端c2向所有服务端发送消息v2
B1.客户端c2向所有服务端发送消息v2=(initial,value2,2),其中initial为客户端发送消息的标识,value2为客户端c2发送的消息内容。
C.当服务端c2收到来自客户端c2的消息v2并且还有发送过服务端s2对第2个客户端c2的响应消息response22时,那么以概率P=1/(2tn+1)广播response22。服务端s1、s3同理。
C1.服务端s2收到来自客户端c2的消息v2=(initial,value2,2)并且还没有发送过服务端s2对第2个客户端c2的响应消息response22时,那么令整数a=1,同时随机地从(1,2,...,2tn+1)选取一个整数b。假设服务端s2选取了整数b=1。服务端s1和服务端s3同理,但假设服务端s1和服务端s3选取的整数b不为1,服务端s1和服务端s3中止处理该消息。
C2.服务端s2中a=b,初始化refs2为空集。在服务端s2本地的DAG2中选取s2为发送方的结点作为第一个引用ref1,再随机选取在DAG2中其它服务端为发送方的结点作为第二个引用ref2,这两个引用应该优先选择未被引用的结点,然后将ref1和ref2加入到引用集合refsi中。服务端s2选取H(responseinitial1)作为ref1,选取H(response11)作为ref2
C3.votes2={(H(response11):{H(response11)})},故不执行该子步骤。
C4.服务端s2向所有服务端广播response22=(response,v2,refs2,2),其中response为响应消息的标识。
D.当服务端s3收到来自服务端s2的response22时,如果response22中的refs2中的引用都在DAG3中,那么将response22加入到DAG2中,同时更新votes3。若votes3中有关于某个vk的结点被不同服务端引用的个数大于等于2tn+1,则可决定消息vk,完成可靠广播。
D1.当服务端s3收到来自服务端s2的response22时,首先判断H(response22)是否在DAG3中。由于H(response22)不在DAG3中,继续执行以下步骤。
D2.解析response22=(response,v2,refs2,2),判断response22中的refs2的引用是否都在DAG3中。refs2的引用H(responseinitial1),H(response11)都在DAG3中,那么将H(response22)作为结点加入到DAG3中。
D3.H(response22)作为结点加入到DAG3中,则遍历字典votes3。refs2中的引用H(response11)等于字典votes3中键值对(H(response11):{H(response11)})的键,则H(response11)为response22的直接引用,将H(response22)加入到该键的值当中,即votes3={(H(response11):{H(response11),H(response22)})}。
D4.将键值对(H(response22):{H(response22)})加入字典votes3中,votes3={(H(response11):{H(response11),H(response22)}),(H(response22):{H(response22)})}。
D5.由于目前votes3并没有关于消息vk的结点被不同服务端引用的次数大于等于2tn+1,故不执行该子步骤。
D6.由于buffer3为空,故不执行该子步骤。
服务端s1、s2在步骤D中执行过程与服务端s3同理。图3为服务端s3本地的DAG3及其引用关系逻辑上构成的有向无环图。其中response11在图3中表示为R11,response22在图3中表示为R22
B.第3个客户端c3向所有服务端发送消息v3
B1.客户端c3向所有服务端发送消息v3=(initial,value3,3),其中initial为客户端发送消息的标识,value3为客户端c3发送的消息内容。
C.当服务端s3收到来自客户端c3的消息v3并且还有发送过服务端s3对第3个客户端c3的响应消息response33时,那么以概率P=1/(2tn+1)广播response33。服务端s1、s2同理。
C1.服务端s3收到来自客户端c3的消息v3=(initial,value3,3)并且还没有发送过服务端s3对第3个客户端c3的响应消息response33时,那么令整数a=1,同时随机地从(1,2,...,2tn+1)选取一个整数b。假设服务端s3选取了整数b=1。服务端s1和服务端s2同理,但假设服务端s1和服务端s2选取的整数b不为1,服务端s1和服务端s2中止处理该消息。
C2.服务端s3中a=b,初始化refs3为空集。在服务端s3本地的DAG3中选取s3为发送方的结点作为第一个引用ref1,再随机选取在DAG3中其它服务端为发送方的结点作为第二个引用ref2,这两个引用应该优先选择未被引用的结点,然后将ref1和ref2加入到引用集合refs3中。服务端s3选取H(responseinitial2)作为ref1,选取H(response22)作为ref2
C3.服务端s3本地的字典votes3={(H(response11):{H(response11),H(response22)}),(H(response22):{H(response22)})}有关于v1的结点被不同服务端引用的次数大于等于tn+1=2,但当前服务端s3已经间接引用该结点,故不用将H(response11)加入到refs3中。
C4.服务端s3向所有服务端广播response33=(response,v3,refs3,3),其中response为响应消息的标识。
D.当服务端s1收到来自服务端s3的response33时,如果response33中的refs3中的引用都在DAG1中,那么将response33加入到DAG1中,同时更新votes1。若votes1中有关于某个vk的结点被不同服务端引用的个数大于等于2tn+1,则可决定消息vk,完成可靠广播。
D1.当服务端s1收到来自服务端s3的response33时,首先判断H(response33)是否在DAG1中。由于H(response33)不在DAG1中,继续执行以下步骤。
D2.解析response33=(response,v3,refs3,3),则判断response33中的refs3的引用是否都在DAG1中。refs3的引用H(responseinitial2),H(response22)都在DAG1中,那么将H(response33)作为结点加入到DAG1中。
D3.H(response33)作为结点加入到DAG1中,则遍历字典votes1。refs3中的引用H(response22)等于字典votes1中键值对(H(response22):{H(response22))的键,则H(response33)为response22的直接引用,将H(response33)加入到该键的值当中。refs3中的引用H(response22)等于字典votes1中键值对(H(response11):{H(response11),H(response22)})的值,则该字典votes3键值对的键H(response11)为response33的间接引用,将H(response33)加入到该键的值当中。即votes1={(H(response11):{H(response11),H(response22),H(response33)}),
((H(response22):{H(response22),H(response33)})}。
D4.将键值对(H(response33):{H(response33)})加入字典votes1中,即votes1={(H(response11):{H(response11),H(response22),H(response33)}),((H(response22):{H(response22),H(response33)}),((H(response33):{H(response33)}))}。
D5.由于目前votes1并关于消息v1的结点H(response11)被服务端s1、s2、s3引用,即被不同服务端引用的次数大于等于2tn+1=3,则服务端s1可决定消息v1,完成可靠广播。此时将关于消息v1的结点从votes1中删除。
D6.由于buffer3为空,故不行该子步骤。
服务端s2、s3在步骤D中执行过程与服务端s1同理,即服务端s2可决定消息v1,完成可靠广播,服务端s3也可决定消息v1,完成可靠广播此时将关于消息v1的结点从votes2、votes3中删除。图4为服务端c1本地的DAG1及其引用关系逻辑上构成的有向无环图。其中response11在图4中表示为R11,response22表示为R22,response33表示为R33
实施例2:
客户端与服务端彼此建立认证的安全信道,这里假设第4个服务端s4为恶意节点,假设s4在本实施例中可以有任意行为,例如,向其他诚实的服务端单播能够进入DAG的消息,使得服务端转发的消息无法入图。
A.服务端s1、s2、s3分别初始化本地有向无环图结点集合DAG1、DAG2、DAG3,本地引用集合refs1、refs2、refs3,以及本地字典votes1、votes2、votes3
A1.服务端s1初始化本地有向无环图结点集合DAG1={H(responseinitial1),H(responseinitial2)},本地引用集合refs1={},以及本地字典votes1={}。其中H为抗碰撞哈希函数,responseinitial1和responseinitial2为有向无环图中的两个初始结点,这里仅设置为字符串,标识为初始结点,即设置responseinitial1=″intial_response1″,responseinitial2=″intial_response2″。服务端s2、服务端s3同理。
B.第4个客户端c4向所有服务端发送消息v4
B1.客户端c4向所有服务端发送消息v4=(initial,value4,4),其中initial为客户端发送消息的标识;
C.当服务端s1、s2、s3收到来自客户端c4的消息v4并且还有发送过服务端s1对第4个客户端c4的响应消息response14、服务端s2对第4个客户端c4的响应消息response24、服务端s3对第4个客户端c4的响应消息response34时,那么以概率P=1/(2tn+1)广播response14、response24、response34,但现在假设服务端s1、s2、s3均没有广播response14、response24、response34。此时恶意的服务端伪造了一条可以进入DAG1的消息,即response44=(response,v4,refs4={H(responseinitial1),H(responseinitial2)},4),并将response44向服务端s1单播。
D.当服务端s1收到来自服务端s4的response44时,如果response44中的refs4中的引用都在DAG1中,那么将response44加入到DAG1中,同时更新votes1。若votes1中有关于某个vk的结点被不同服务端引用的个数大于等于2tn+1,则可决定消息vk,完成可靠广播。
D1.当服务端s1收到来自服务端s4的response44时,首先判断H(response44)是否在DAG1中。由于H(response44)不在DAG1中,继续执行以下步骤。
D2.解析response44=(response,v4,refs4,4),判断response44中的refs4的引用是否都在DAG1中。refs4的引用H(responseinitial1),H(responseinitial2)都在DAG1中,那么将H(response44)作为结点加入到DAG1中。
D3.由于votes1目前为空,故不执行该子步骤。
D4.将键值对(H(response44):{H(response44)})加入字典votes1中,即votes1={(H(response44):{H(response44)})}。
D5.由于目前votes1并没有关于消息vk的结点被不同服务端引用的次数大于等于2tn+1,故不执行该子步骤。
D6.由于buffer1为空,故不执行该子步骤。
由于服务端s2和服务端s3并没有收到恶意结点向服务端s1单播的response44,所以目前只有s1的DAG1及其引用逻辑上形成的有向无环图拥有response44,如下图5所示。其中response44在图中表示为R44
B.第1个客户端c1向所有服务端发送消息v1
B1.客户端c1向所有服务端发送消息v1=(initial,value1,1),其中initial为客户端发送消息的标识,value1为客户端c1发送的消息内容。
C.当服务端s1收到来自客户端c1的消息v1并且还有发送过服务端s1对第1个客户端c1的响应消息response11时,那么以概率P=1/(2tn+1)广播response11。服务端s2、s3同理。
C1.服务端s1收到来自客户端c1的消息v1=(initial,value2,2)并且还没有发送过服务端s1对第1个客户端c1的响应消息response11时,那么令整数a=1,同时随机地从(1,2,...,2tn+1)选取一个整数b。假设服务端s1选取了整数b=1。服务端s2和服务端s3同理,但假设服务端s2和服务端s3选取的整数b不为1,服务端s2和服务端s3中止处理该消息。
C2.服务端s1中a=b,初始化refs1为空集。在服务端s1本地的DAG1中选取服务端s1已经广播且入图的结点作为第一个引用ref1,再尽量地随机选取其他服务端在DAG1中未被引用的结点作为第二个引用ref2,将ref1和ref2加入到引用集合refs1中。服务端s1选取H(responseinitial1)作为ref1,选取H(response44)作为ref2
C3.votes1={(H(response44):{H(response44)})},故不执行该子步骤。
C4.服务端s1向所有服务端广播response11=(response,v1,refs1,1),其中response为响应消息的标识。
D.当服务端s2收到来自服务端s1的response11时,如果response11中的refs1中的引用都在DAG2中,那么将response11加入到DAG2中,同时更新votes2。若votes2中有关于某个vk的结点被不同进程引用的个数大于等于2tn+1,则可决定vk中的valuek,完成可靠广播。
D1.当服务端s2收到来自服务端s1的response11时,首先判断H(response11)是否在DAG2中。由于H(response11)不在DAG2中,执行以下步骤。
D2.解析response11=(response,v1,refs1,1),判断response11中的refs1的引用是否都在DAG2中。refs4的引用H(responseinitial1)在DAG2中,但H(response44)不在DAG3中,H(response44)无法作为结点加入到DAG2中,将response11加入到本地缓存buffer2中。服务端s3同理。
所有服务端的有向无环图及缓存如图6所示。其中response44在图中表示为R44,response11在图中表示为R11
由于服务端s2和服务端s3已经将response11加入到本地缓存,故D3)至D6)无法执行,此时需要执行额外步骤。假设各服务端的参数设置x=1;
E1.服务端s2、s3本地的缓存buffer2、buffer3的大小超过阀值1,则分别为buffer2和buffer3中的所有消息广播同步请求syncRequest2=(sync,response11,refs1,2),syncRequest3=(sync,response11,refs1,3),并分别清空buffer2、buffer3。其中sync为同步请求的标识。
E2.当服务端s1收到来自其他服务端s2发送的同步请求syncRequest2=(sync,response11,refs1,2)时,检查同步请求中的H(response11),H(response11)在本地的DAG1中,那么向服务端s2单播response11及其refs1中的直接引用消息response44。同理服务端s1在收到syncRequest3时也向服务端s3单播response11及其refs1中的直接引用消息response44
D.当服务端s2首先收到来自服务端s1单播的response11时,又再一次将response11加入到缓存buffer2,服务端s3同理。
D.当服务端s2收到来自服务端s1的response44时,如果response44中的refs4中的引用都在DAG2中,那么将response44加入到DAG2中,同时更新votes2。若votes2中有关于某个vk的结点被不同服务端引用的个数大于等于2tn+1,则可决定消息vk,完成可靠广播。
D1.当服务端s2收到来自服务端s1的response44时,首先判断H(response44)是否在DAG2中。由于H(response44)不在DAG2中,继续执行以下步骤。
D2.解析response44=(response,v4,refs4,4),则判断response44中的refs4的引用是否都在DAG2中。refs4的引用H(responseinitial1),H(responseinitial3)都在DAG2中,那么将H(response44)作为结点加入到DAG3中。服务端s3同理。
D3.由于votes2目前为空,故不执行该子步骤。
D4.将键值对(H(response44):{H(response44)})加入字典votes2中,即votes2={(H(response44):{H(response44)})}。
D5.由于目前votes2并没有关于消息vk的结点被不同服务端引用的次数大于等于2tn+1,故不执行该子步骤。
D6.由于H(response44)加入DAG2和DAG3导致缓存buffer2和buffer3中的response11满足了加入DAG2和DAG3的条件,则执行步骤D1)-D6)。
最终,所有诚实的服务端在额外步骤E1)-E2)的保证下可以处理恶意的服务端向其他服务端单播可入图的消息,所有诚实的服务端的有向无环图及其缓存如图7所示。
后续在诚实的客户端发消息的处理与实施例1一致,故不再赘述。最终能够所有诚实的服务端即便在恶意服务端作恶的情况下也能够决定v4=(initial,value4,4),保证一致性、可验证性与全局性。
实施例3
本实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现实施例1或实施例2所述的方法.
实施例4
本实施提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现实施例1或实施例2所述的方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

Claims (10)

1.一种基于有向无环图的拜占庭可靠广播方法,其特征在于,涉及m个客户端与n个服务端,需要建立认证的安全信道,其中服务端的恶意结点数量至多为tn<n/3,包括以下步骤:
A.第i个服务端si初始化本地有向无环图结点集合DAGi,本地引用集合refsi,以及本地字典votesi,其中i∈{1,...,n};
B.第k个客户端ck向所有服务端发送消息vk,其中k∈{1,...,m};
C.当服务端si收到来自客户端ck的消息vk,如果还没有发送过关于vk的响应消息responseik,那么以概率P=1/(2tn+1)广播responseik
D.当服务端si收到来自服务端sj的responsejk时,如果responsejk中refsj的引用都在DAGi中,那么将H(responsejk)作为新的结点加入到DAGi中,同时更新votesi,其中j∈{1,...,n};若votesi中关于某个消息vk的结点被不同服务端引用的次数大于等于2tn+1,则可决定消息vk,完成关于消息vk可靠广播。
2.根据权利要求1所述的基于有向无环图的拜占庭可靠广播方法,其特征在于,所述步骤A具体包括:服务端si初始化本地有向无环图结点集合
DAGi={H(responseinitial1),H(responseinitial2)},
其中H为抗碰撞哈希函数,responseinitial1和responseinitial2为有向无环图中的两个初始结点,并初始化本地引用集合为空值refsi={}以及本地字典为空值votesi={}。
3.根据权利要求2所述的基于有向无环图的拜占庭可靠广播方法,其特征在于,所述步骤B具体包括:客户端ck向所有服务端发送消息vk=(initial,valuek,k),其中initial为客户端发送消息的标识,valuek为客户端发送的消息内容,k为客户端编号。
4.根据权利要求3所述的基于有向无环图的拜占庭可靠广播方法,其特征在于,所述步骤C具体包括:
C1.服务端si收到来自客户端ck的消息vk=(initial,valuek,k),如果还没有发送关于消息vk的响应消息responseik,那么令整数a=1,同时随机地从(1,2,...,2tn+1)中选取一个整数b,若a=b继续执行以下步骤,否则中止处理该消息;
C2.初始化refsi为空集,在服务端si本地的DAGi中选取si为发送方的结点作为第一个引用ref1,再随机选取在DAGi中其它服务端为发送方的结点作为第二个引用ref2,这两个引用应该优先选择未被引用的结点,然后将ref1和ref2加入到引用集合refsi中;
C3.若服务端si本地的字典votesi中关于消息vk的结点被不同服务端引用的次数大于等于tn+1,且当前服务端si还没有直接引用或间接引用该结点,则将该结点加入到引用集合refsi当中;
C4.服务端si向所有服务端广播responseik=(response,vk,refsi,i),其中response为响应消息的标识,i为服务端编号。
5.根据权利要求4所述的基于有向无环图的拜占庭可靠广播方法,其特征在于,所述步骤D具体包括:
D1.当服务端si收到来自服务端sj的responsejk时,判断H(responsejk)是否在DAGi中;若在则中止执行,否则执行以下步骤;
D2.解析responsejk=(response,vk,refsj,j),判断refsj的引用是否都在DAGi中,若不在将responsejk加入到本地缓存bufferi中,并中止执行,否则将H(responsejk)作为结点加入到DAGi中,执行以下步骤;
D3.遍历字典votesi,若refsj中的某个引用等于字典votesi中某个键、或者属于该键对应的值集合,将H(responsejk)加入到该键的值集合中,表明responsejk对该键对应的结点具有直接或间接引用;
D4.将键值对(H(responsejk):{H(responsejk)})加入字典votesi中;
D5.统计关于消息vk的结点被不同服务端引用的次数,若关于消息vk的结点被不同服务端引用的次数大于等于2tn+1,则可决定消息vk,完成可靠广播,将关于消息vk的结点从votesi中删除;
D6.若H(responsejk)作为结点加入到DAGi中使得bufferi中有响应消息满足加入DAGi的条件,则执行步骤D1至D6。
6.根据权利要求1至5任一项所述的基于有向无环图的拜占庭可靠广播方法,其特征在于,还包括E1:若服务端si本地缓存bufferi的大小超过阀值x,则为bufferi中的所有响应消息广播同步请求
syncRequesti=(sync,responsejk,refsj,i),并清空bufferi,其中sync为同步请求的标识。
7.根据权利要求6项所述的基于有向无环图的拜占庭可靠广播方法,其特征在于,还包括E2:当服务端si收到来自其他服务端sj发送的同步请求syncRequestj=(sync,responsejk,refsj,j)时,检查同步请求中的H(responsejk)是否在本地的DAGi中,如果存在,那么向服务端sj单播responsejk及其直接引用的响应消息。
8.一种基于有向无环图的拜占庭可靠广播系统,其特征在于,涉及m个客户端与n个服务端,需要建立认证的安全信道,其中服务端的恶意结点数量至多为tn<n/3,包括:
初始化单元:用于第i个服务端si初始化本地有向无环图结点集合DAGi,本地引用集合refsi,以及本地字典votesi,其中i∈{1,...,n};
消息发送单元:用于第k个客户端ck向所有服务端发送消息vk,其中k∈{1,...,m};
第一接收单元:用于当服务端si收到来自客户端ck的消息vk,如果还没有发送过关于vk的响应消息responseik,那么以概率P=1/(2tn+1)广播responseik
第二接收单元:用于当服务端si收到来自服务端sj的responsejk时,如果responsejk中refsj的引用都在DAGi中,那么将H(responsejk)作为新的结点加入到DAGi中,同时更新votesi,其中j∈{1,...,n};若votesi中关于某个消息vk的结点被不同服务端引用的次数大于等于2tn+1,则可决定消息vk,完成关于消息vk可靠广播。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的方法。
CN202311812944.4A 2023-12-26 2023-12-26 一种基于有向无环图的拜占庭可靠广播方法 Pending CN117896194A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311812944.4A CN117896194A (zh) 2023-12-26 2023-12-26 一种基于有向无环图的拜占庭可靠广播方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311812944.4A CN117896194A (zh) 2023-12-26 2023-12-26 一种基于有向无环图的拜占庭可靠广播方法

Publications (1)

Publication Number Publication Date
CN117896194A true CN117896194A (zh) 2024-04-16

Family

ID=90644988

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311812944.4A Pending CN117896194A (zh) 2023-12-26 2023-12-26 一种基于有向无环图的拜占庭可靠广播方法

Country Status (1)

Country Link
CN (1) CN117896194A (zh)

Similar Documents

Publication Publication Date Title
Sompolinsky et al. Phantom
KR102406020B1 (ko) 탈 중앙화된 비잔틴 오류 감내 분산 합의 장치 및 방법
CN101366238B (zh) 用于改进的基于网络的内容检查的系统和方法
US7508757B2 (en) Network with MAC table overflow protection
CN110245956A (zh) 一种基于异步多链的区块链交易确认方法及系统
CN111052091B (zh) 网络中的共识形成方法以及构成该网络的节点
Cohen et al. Not a coincidence: Sub-quadratic asynchronous byzantine agreement whp
CN110060161B (zh) 用于区块链交易防重的客户端服务实现方法及服务组件
CN110287205A (zh) 一种区块链跨分片交易数据处理方法及装置
US10476701B2 (en) Method for high-security data transmission of blockchain
CN111464531B (zh) 一种基于多重加密的即时确认式文件传输方法
WO2023011019A1 (zh) 基于区块链的数据处理方法、装置、设备、可读存储介质及计算机程序产品
CN113409047B (zh) 基于区块链的数据处理方法、装置、设备及可读存储介质
CN117896194A (zh) 一种基于有向无环图的拜占庭可靠广播方法
CN112866276B (zh) 一种基于拟态服务功能构架的主次重置判决系统
US20090280781A1 (en) Method and device for storing and transmitting messages
Nikolaou et al. Turtle consensus: Moving target defense for consensus
CN116132052A (zh) 跨链交易方法、装置、电子设备及存储介质
CN115099421A (zh) 面向群组的联邦学习系统
CN115276999A (zh) 一种基于信任模型的自适应切换高效容错共识方法
WO2016177220A1 (zh) 一种即时通信的信息存储方法及装置
CN114461730A (zh) 基于余数系统的自适应区块数据压缩方法
CN113824738A (zh) 一种区块链中节点通讯管理方法及系统
CN112671636A (zh) 群组消息推送方法、装置、计算机设备和存储介质
CN104881479A (zh) 一种限制用户最小操作间隔的方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination