发明内容
本发明的主要目的在于提供一种基于哈希图的攻击处理方法、设备及存储介质,旨在解决现有技术中Hashgraph具有潜在的被分裂攻击的风险,安全性不高的技术问题。
为实现上述目的,本发明第一方面提供一种基于哈希图的攻击处理方法,方法包括以下步骤:
当前节点获取哈希图中除当前节点外的任一节点的第一事件;
对第一事件中的哈希值进行验证,以得到验证结果;
在验证结果为不通过时,获取第一事件的父事件的节点;
获取父事件的节点的第二事件;
检测第二事件中是否存在相同的两个事件;
在第二事件中存在相同的两个事件的情况下,确定存在分裂攻击。
可选地,获取第一事件的父事件的节点,包括:
获取第一事件的other-parent字段;
根据other-parent字段确定第一事件的父事件的节点。
可选地,检测第二事件中是否存在相同的两个事件,包括:
获取第二事件的self-parent字段;
根据self-parent字段检测第二事件中是否存在相同的两个事件。
可选地,还包括:
在第二事件中不存在相同的两个事件的情况下,获取哈希图的其他节点的第一事件,并返回对第一事件中的哈希值进行验证的步骤。
可选地,还包括:
在确定存在分裂攻击之后,为父事件的节点添加分裂标识;
将分裂标识发送至哈希图的其他节点,以使其他节点对分裂标识进行真实性验证。
可选地,还包括:
检测第二事件中任意两个相同的事件是否均达成共识;
在两个相同的事件均未达成共识的情况下,删除两个相同的事件及其子事件;
在两个相同的事件中有一个达成共识的情况下,删除未达成共识的事件及其子事件。
可选地,还包括:
在第二事件中不存在相同的两个事件的情况下,检测当前节点的有向无环图是否处于分裂状态;
在有向无环图处于分裂状态的情况下,根据有向无环图确定分裂事件的父事件的第一节点;
获取第一节点的第三事件;
检测第三事件中是否存在相同的两个事件,以得到检测结果;
根据检测结果对当前节点的账本数据进行恢复。
可选地,根据检测结果对当前节点的账本数据进行恢复,包括:
在检测结果为第三事件中不存在相同的两个事件的情况下,删除分裂事件之后的账本数据;
重新获取哈希图中除当前节点和第一节点外的节点发送的第四事件;
根据第四事件对当前节点的账本数据进行恢复。
本发明第二方面提供一种基于哈希图的攻击处理设备,攻击处理设备包括:存储器、处理器及存储在存储器上并可在处理器上运行的基于哈希图的攻击处理程序,基于哈希图的攻击处理程序配置为实现如上的基于哈希图的攻击处理方法的步骤。
本发明第三方面提供一种存储介质,存储介质上存储有基于哈希图的攻击处理程序,基于哈希图的攻击处理程序被处理器执行时实现如上的基于哈希图的攻击处理方法的步骤。
通过本发明实施例提供的方案,通过当前节点获取哈希图中除当前节点外的任一节点的第一事件;对第一事件中的哈希值进行验证,以得到验证结果;在验证结果为不通过时,获取第一事件的父事件的节点;获取父事件的节点的第二事件;检测第二事件中是否存在相同的两个事件;在第二事件中存在相同的两个事件的情况下,确定存在分裂攻击。其中,通过对哈希图进行分裂攻击检测,有利于在哈希图中存在恶意节点时,及时采取处理措施,有效地保障了哈希图的安全性。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的攻击处理设备结构示意图。
如图1所示,该攻击处理设备可以包括:处理器1001,例如CPU,通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏、输入单元比如键盘,可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器,例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对攻击处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及攻击处理程序。
在图1所示的攻击处理设备中,网络接口1004主要用于与外部网络进行数据通信;用户接口1003主要用于接收用户的输入指令;攻击处理设备通过处理器1001调用存储器1005中存储的攻击处理程序,并执行以下操作:
当前节点获取哈希图中除当前节点外的任一节点的第一事件;
对第一事件中的哈希值进行验证,以得到验证结果;
在验证结果为不通过时,获取第一事件的父事件的节点;
获取父事件的节点的第二事件;
检测第二事件中是否存在相同的两个事件;
在第二事件中存在相同的两个事件的情况下,确定存在分裂攻击。
进一步地,处理器1001可以调用存储器1005中存储的攻击处理程序,还执行以下操作:
获取第一事件的other-parent字段;
根据other-parent字段确定第一事件的父事件的节点。
进一步地,处理器1001可以调用存储器1005中存储的攻击处理程序,还执行以下操作:
获取第二事件的self-parent字段;
根据self-parent字段检测第二事件中是否存在相同的两个事件。
进一步地,处理器1001可以调用存储器1005中存储的攻击处理程序,还执行以下操作:
在第二事件中不存在相同的两个事件的情况下,获取哈希图的其他节点的第一事件,并返回对第一事件中的哈希值进行验证的步骤。
进一步地,处理器1001可以调用存储器1005中存储的攻击处理程序,还执行以下操作:
在确定存在分裂攻击之后,为父事件的节点添加分裂标识;
将分裂标识发送至哈希图的其他节点,以使其他节点对分裂标识进行真实性验证。
进一步地,处理器1001可以调用存储器1005中存储的攻击处理程序,还执行以下操作:
检测第二事件中任意两个相同的事件是否均达成共识;
在两个相同的事件均未达成共识的情况下,删除两个相同的事件及其子事件;
在两个相同的事件中有一个达成共识的情况下,删除未达成共识的事件及其子事件。
进一步地,处理器1001可以调用存储器1005中存储的攻击处理程序,还执行以下操作:
在第二事件中不存在相同的两个事件的情况下,检测当前节点的有向无环图是否处于分裂状态;
在有向无环图处于分裂状态的情况下,根据有向无环图确定分裂事件的父事件的第一节点;
获取第一节点的第三事件;
检测第三事件中是否存在相同的两个事件,以得到检测结果;
根据检测结果对当前节点的账本数据进行恢复。
进一步地,处理器1001可以调用存储器1005中存储的攻击处理程序,还执行以下操作:
在检测结果为第三事件中不存在相同的两个事件的情况下,删除分裂事件之后的账本数据;
重新获取哈希图中除当前节点和第一节点外的节点发送的第四事件;
根据第四事件对当前节点的账本数据进行恢复。
本实施例通过上述方案,通过当前节点获取哈希图中除当前节点外的任一节点的第一事件;对第一事件中的哈希值进行验证,以得到验证结果;在验证结果为不通过时,获取第一事件的父事件的节点;获取父事件的节点的第二事件;检测第二事件中是否存在相同的两个事件;在第二事件中存在相同的两个事件的情况下,确定存在分裂攻击。其中,通过对哈希图进行分裂攻击检测,有利于在哈希图中存在恶意节点时,及时采取处理措施,有效地保障了哈希图的安全性。
基于上述硬件结构,提出本发明攻击处理方法实施例。
参照图2,图2为本发明攻击处理方法第一实施例的流程示意图。
在第一实施例中,攻击处理方法包括以下步骤:
S10:当前节点获取哈希图中除当前节点外的任一节点的第一事件;
可以理解的是,在哈希图中,每一个节点都在传播经过签名的新交易以及从临近节点接收到的交易信息。当前节点,指哈希图中进行检测的一个节点。第一事件,指哈希图中除当前节点外的任一节点对应的事件。通常一个事件(Event)中包含交易、两个哈希值、时间戳、签名等信息,通过gossip协议进行通信。
S20:对第一事件中的哈希值进行验证,以得到验证结果;
应当理解的是,事件中通常包含有两个哈希值,一个指向当前节点上次最新的事件,另一个指向当前节点所收到的另一个节点的最新事件。对哈希值进行验证的具体方式,本实施例不加以限制。
当第一事件中的哈希值验证通过时,则进行后续的共识操作,当验证不通过时,则说明当前节点可能是恶意节点,需要进行进一步的检测才能确定。
S30:在验证结果为不通过时,获取第一事件的父事件的节点;
具体地,获取第一事件的other-parent字段;根据other-parent字段确定第一事件的父事件的节点。
需要说明的是,通常Transactions字段是事件里包含的所有交易,self-Parent字段包括当前节点自己创建的父事件,other-Parent字段包括其他节点创建的父事件。因此,通过other-Parent字段可以解析出第一事件的父事件对应的节点。
S40:获取父事件的节点的第二事件;
以当前节点是节点A为例,本实施例中节点A在获取到第一事件的父事件后,从中解析出该父事件对应的节点B,并查找节点B发送给节点A的第二事件。
S50:检测第二事件中是否存在相同的两个事件;
具体地,获取第二事件的self-parent字段;根据self-parent字段检测第二事件中是否存在相同的两个事件。
通过第二事件的self-parent字段可以检查节点B是否同时以相同的self-parent向节点A发出了两个事件。
S60:在第二事件中存在相同的两个事件的情况下,确定存在分裂攻击。
应当理解的是,若第二事件中存在相同的两个事件,则说明节点B为恶意节点,并且节点B在发动分裂攻击。
若第二事件中不存在相同的两个事件,则节点A继续获取哈希图的其他节点的第一事件,并返回对第一事件中的哈希值进行验证的步骤,以确定其他节点是否在发动分裂攻击。
本实施例通过当前节点获取哈希图中除当前节点外的任一节点的第一事件;对第一事件中的哈希值进行验证,以得到验证结果;在验证结果为不通过时,获取第一事件的父事件的节点;获取父事件的节点的第二事件;检测第二事件中是否存在相同的两个事件;在第二事件中存在相同的两个事件的情况下,确定存在分裂攻击。其中,通过对哈希图进行分裂攻击检测,有利于在哈希图中存在恶意节点时,及时采取处理措施,有效地保障了哈希图的安全性。
进一步地,如图3所示,基于第一实施例提出本发明攻击处理方法第二实施例,在本实施例中,在确定存在分裂攻击之后,对当前节点需要进行处理,具体步骤如下:
S70:为父事件的节点添加分裂标识;
以当前节点是节点A、父事件的节点是节点B为例,当节点A检测到节点B在实施分裂攻击时,节点A在gossip通信列表中为节点B添加分裂标识,即将节点B标注为恶意节点。
S80:将分裂标识发送至哈希图的其他节点,以使其他节点对分裂标识进行真实性验证。
当其他节点接收到节点A发送的分裂标识后,其他节点要验证节点A的分裂标识是否是真实的,以其他节点中的某节点C为例,节点C对分裂标识进行验证的步骤如下:
节点C检查接收到的事件中是否存在节点B发送的并且节点A标识过的事件。
若是,则节点C查找已接收的来自节点B的事件,并检查是否节点B同时以相同的self-parent发出了两个不同的事件;若节点B同时以相同的self-parent发出了两个不同的事件,则说明节点B发动分裂攻击,节点C认可节点A的分裂标识,并实施后续处理步骤;若节点B并没有同时以相同的self-parent发出了两个不同的事件,则节点C抛弃节点A发送的分裂标识。
若否,则节点C实施后续处理步骤,等待并检查节点B发送的事件是否被节点A所标记。
需要说明的是,其他节点收到分裂标识后,通过对分裂标识进行验证,可以有效避免恶意节点借着分裂标识攻击其他的节点,这也是抗分裂攻击一种辩证的预防手段。
上述后续处理步骤包括:
S90:检测第二事件中任意两个相同的事件是否均达成共识;
当节点A将节点B标注为恶意节点后,节点A停止与节点B的通信,并追踪节点B同时生成的两个事件的后续共识情况。
S100:在两个相同的事件均未达成共识的情况下,删除两个相同的事件及其子事件;
S110:在两个相同的事件中有一个达成共识的情况下,删除未达成共识的事件及其子事件。
本实施例通过将恶意节点进行标识并广播的机制,可以让其余节点及时预警;通过在发现并识别了分裂攻击后,对恶意节点发送的事件进行针对性地删除,可以防止恶意的事件导致的DAG账本的分裂,进一步提高了哈希图的安全性。
进一步地,如图4所示,基于第一实施例提出本发明攻击处理方法第三实施例,在本实施例中,当由于Gossip同步原因,无法检测出分裂攻击,进而某一节点的DAG账本出现分裂,此时需要进行DAG账本恢复操作,步骤如下:
S120:在第二事件中不存在相同的两个事件的情况下,检测当前节点的有向无环图是否处于分裂状态;
以节点A的DAG账本出现分裂为例,当节点A发现接收的DAG账本形态与节点A的DAG账本形态存在分叉差异时,确定节点A的DAG账本处于分裂状态。
S130:在有向无环图处于分裂状态的情况下,根据有向无环图确定分裂事件的父事件的第一节点;
应当理解的是,在节点A的DAG账本处于分裂状态的情况下,节点A通过DAG结构追溯到分裂事件,并查找该分裂事件中的other-parent字段,解析出该分裂事件的父事件对应的节点B(即第一节点)。
S140:获取第一节点的第三事件;
S150:检测第三事件中是否存在相同的两个事件,以得到检测结果;
节点A获取节点B发送的第三事件,并检查节点B是否同时以相同的self-parent发出了两个不同的事件,得到检测结果。
S160:根据检测结果对当前节点的账本数据进行恢复。
若检测结果为是,则节点A在gossip通信列表中为节点B添加恶意节点的分裂标识,并将此分裂标识发送到其他节点,以使其他节点收到分裂标识后进行验证处理,同时,节点A停止与节点B的通信,并对节点A的账本数据进行恢复。
若检测结果为否,则直接对节点A的账本数据进行恢复。
其中,对当前节点的账本数据进行恢复的步骤为:删除分裂事件之后的账本数据;重新获取哈希图中除当前节点和第一节点外的节点发送的第四事件;根据第四事件对当前节点的账本数据进行恢复。
本实施例在没有检测出分裂攻击的情况下,对账本数据进行恢复,即便恶意节点成功实施了分裂攻击,系统也会在特定时间内恢复并提供正常的区块链记账服务,确保了哈希图的一致性和可靠性。
此外,本发明实施例还提出一种计算机可读存储介质,计算机可读存储介质上存储有攻击处理程序,控制程序被处理器执行时使得处理器能够执行上述的攻击处理方法。
本发明计算机可读存储介质的具体实施例与上述控制方法各实施例基本相同,在此不作赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。