一种攻击检测方法、装置及电子设备与流程

文档序号:17663973发布日期:2019-05-15 22:34阅读:144来源:国知局
一种攻击检测方法、装置及电子设备与流程

本发明涉及区块链的攻击检测技术领域,特别是涉及一种攻击检测方法、装置、电子设备及存储介质。



背景技术:

区块链网络中的每一节点都使用同一个算法进行挖矿,这种算法称为共识算法,通常使用的共识算法为pow(proof-of-work,工作量证明)算法。其中,挖矿指的是:生成新区块,pow算法指的是:在预设的出块时间间隔内,区块链网络中任何一个节点,如果想生成新区块写入至区块链中,就必须解出该区块链网络预设的工作量证明的难题,最快解题完成的节点,将其计算结果进行全网广播。区块链网络中的其他节点在接收到该计算结果后,都用同样的算法对该计算结果进行验证,如果该区块链网络中有预设数量个节点都验证该计算结果正确,则该节点生成新区块成功,可以将其生成的该新区块写入至区块链中,并获得虚拟货币奖励。

从区块链网络中获得的虚拟货币,可以通过交易平台进行交易。在交易过程中,虚拟货币的币价会随着区块数量的变化以及交易量的变化而随时变化。

基于pow算法构建的区块链,容易受到51%攻击,这是由于,在基于pow算法的区块链网络中,当节点接收到了从其他节点传来的更长的区块链时,会自动放弃当前的区块链,转而继续在接收到的更长的区块链上进行挖矿。这样就会导致拥有51%算力的节点,有了任意地修改交易记录的能力,具体为:拥有51%算力的节点,可以比区块链网络中的其他节点,更快速的生成新的区块,从而,可以伪造更长的区块链,使其他节点自动放弃当前的区块链,转而继续在该最长的伪造的区块链上进行挖矿。这样,由于虚拟货币的币价会随着区块数量的变化以及交易量的变化而随时变化,因此伪造的区块链会为参与虚拟货币交易的人员造成资产损失。

然而,发明人发现针对51%攻击,现有技术通常都是在该攻击发生,且造成资产损失后,根据资产损失才能推断出遭受攻击,不能及时检测出是否遭受攻击。



技术实现要素:

本发明实施例的目的在于提供一种攻击检测方法、装置、电子设备及存储介质,以便及时检测出是否遭受攻击。具体技术方案如下:

为了达到上述目的,第一方面,本发明实施例提供了一种攻击检测方法,应用于基于工作量证明pow算法的区块链网络中的监控节点,该方法,包括:

获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息;所述预设的第一时间间隔为出块时间间隔的预设倍数;

根据所述标识信息,确定第一节点;所述第一节点为在该预设的第一时间间隔内,生成新区块最多的节点;

计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;所述连续出块率为:在所述预设的第一时间间隔内,第一节点生成的新区块数量,与该预设的第一时间间隔内,所述区块链网络生成的新区块的总数量的比值;

根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。

可选的,所述根据所述预设连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受攻击的步骤,包括:

判断所述连续出块率是否为100%,如果是,则判定所述区块链网络,遭受到攻击,并进行第一报警提示。

可选的,所述方法,还包括:

在判断出所述连续出块率不是100%时,判定所述区块链网络,未遭受到攻击;

判断所述连续出块率是否大于预设的出块率阈值;

当所述连续出块率大于所述预设的出块率阈值时,获取所述区块链网络中流通的虚拟货币的当前币价;

获取所述区块链网络中空闲矿机的总算力;所述空闲矿机为所述区块链网络中用于生成新区块的节点;

从所述区块链网络中节点的保存信息中,获取所述区块链网络的当前挖矿难度;所述当前挖矿难度是在每增加预设数量个新区块后,根据挖矿难度计算公式计算得到的;所述挖矿难度计算公式为:挖矿难度=当前挖矿难度*(当前增加预设数量个新区块花费的时间/增加预设数量个新区块期望花费的时间);

根据所述区块链网络中虚拟货币的当前币价、所述区块链网络中空闲矿机的总算力、及所述区块链网络的当前挖矿难度,计算所述区块链网络的被攻击概率;

根据所述连续出块率、所述被攻击概率和预设的第二判定条件,检测所述区块链网络,是否易遭受攻击。

可选的,所述根据所述区块链网络中虚拟货币的当前币价、所述区块链网络中空闲矿机的总算力、及所述区块链网络的当前挖矿难度,计算所述区块链网络的被攻击概率的步骤,包括:

根据所述区块链网络中虚拟货币的当前币价和所述区块链网络的当前挖矿难度,计算所述虚拟货币的当前预估成本:

当前预估成本attack_cost=当前挖矿难度*当前币价,计算得到当前攻击所述区块链网络的当前预估成本;

根据所述区块链网络中空闲矿机的总算力和所述区块链网络的当前挖矿难度,计算所述区块链中空闲算力占比:

空闲算力占比rent=空闲矿机的总算力/当前挖矿难度,计算得到所述区块链网络的空闲算力占比;

根据所述当前预估成本和所述空闲算力占比,计算所述区块链网络的被攻击概率:

attack_prob=sigmoid(attack_cost,rent)=1/(1+e-rent/attack_cost),计算在从当前时刻开始的预设的第二单位时间内,所述区块链网络的被攻击概率;

其中,attack_prob表示所述区块链网络中的被攻击概率,sigmoid(attack_cost,rent)表示参数为所述当前预估成本和所述空闲算力占比的sigmoid函数,所述sigmoid函数用于将变量映射到0~1之间。

可选的,所述根据所述连续出块率、所述被攻击概率和预设的第二判定条件,检测所述区块链网络,是否易遭受攻击的步骤,包括:

当所述连续出块率在预设的第一报警区间内,且所述被攻击概率大于预设的第一概率阈值时,判定所述区块链网络,易遭受攻击,并进行第二报警提示;

当所述连续出块率在预设的第二报警区间内,且所述被攻击概率大于预设的第二概率阈值时,判定所述区块链网络,易遭受攻击,并进行第二报警提示;所述第一报警区间,和所述第二报警区间均为开区间;其中,所述预设的第一报警区间的上限是100%,下限为所述预设的第二报警区间的上限;所述第二报警区间的下限为所述出块率阈值;所述第一概率阈值小于所述第二概率阈值。第二方面,本发明实施例提供了一种攻击检测装置,该装置包括:

获取模块,用于获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息;所述预设的第一时间间隔为出块时间间隔的预设倍数;

确定模块,用于根据所述标识信息,确定第一节点;所述第一节点为在该预设的第一时间间隔内,生成新区块最多的节点;

计算模块,用于计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;所述连续出块率为:在所述预设的第一时间间隔内,第一节点生成的新区块数量,与该预设的第一时间间隔内,所述区块链网络生成的新区块的总数量的比值;

第一检测模块,用于根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。

可选的,所述第一检测模块,具体用于:

判断所述连续出块率是否为100%,如果是,则判定所述区块链网络,遭受到攻击,并进行第一报警提示。

可选的,所述装置,还包括:第二检测模块;

所述第一检测模块,还用于:

在判断出所述连续出块率不是100%时,判定所述区块链网络,未遭受到攻击;并启动所述第二检测模块;

所述第二检测模块,包括:

判断子模块,用于在连续出块率不是100%时,判断所述连续出块率是否大于预设的出块率阈值;

币价获取子模块,用于当所述连续出块率大于预设的出块率阈值时,获取所述区块链网络中流通的虚拟货币的当前币价;

算力获取子模块,用于获取所述区块链网络中空闲矿机的总算力;所述空闲矿机为所述区块链网络中用于生成新区块的节点;

难度获取子模块,用于从所述区块链网络中节点的保存信息中,获取所述区块链网络的当前挖矿难度;所述当前挖矿难度是在每增加预设数量个新区块后,根据挖矿难度计算公式计算得到的;所述挖矿难度计算公式为:挖矿难度=当前挖矿难度*(当前增加预设数量个新区块花费的时间/增加预设数量个新区块期望花费的时间);

概率计算子模块,用于根据所述区块链网络中虚拟货币的当前币价、所述区块链网络中空闲矿机的总算力、及所述区块链网络的当前挖矿难度,计算所述区块链网络的被攻击概率;

检测子模块,用于根据所述连续出块率、所述被攻击概率和预设的第二判定条件,检测所述区块链网络,是否易遭受攻击。

可选的,所述概率计算子模块,具体用于:

根据所述区块链网络中虚拟货币的当前币价和所述区块链网络的当前挖矿难度,计算所述虚拟货币的当前预估成本:

当前预估成本attack_cost=当前挖矿难度*当前币价,计算得到当前攻击所述区块链网络的当前预估成本;

根据所述区块链网络中空闲矿机的总算力和所述区块链网络的当前挖矿难度,计算所述区块链中空闲算力占比:

空闲算力占比rent=空闲矿机的总算力/当前挖矿难度,计算得到所述区块链网络的空闲算力占比;

根据所述当前预估成本和所述空闲算力占比,计算所述区块链网络的被攻击概率:

attack_prob=sigmoid(attack_cost,rent)=1/(1+e-rent/attack_cost),计算当前所述区块链网络的被攻击概率;

其中,attack_prob表示所述区块链网络中的被攻击概率,sigmoid(attack_cost,rent)表示参数为所述当前预估成本和所述空闲算力占比的sigmoid函数,所述sigmoid函数用于将变量映射到0~1之间。

可选的,所述检测子模块,具体用于:

当所述连续出块率在预设的第一报警区间内,且所述被攻击概率大于预设的第一概率阈值时,判定所述区块链网络,易遭受攻击,并进行第二报警提示;

当所述连续出块率在预设的第二报警区间内,且所述被攻击概率大于预设的第二概率阈值时,判定所述区块链网络,易遭受攻击,并进行第二报警提示;所述第一报警区间,和所述第二报警区间均为开区间;其中,所述预设的第一报警区间的上限是100%,下限为所述预设的第二报警区间的上限;所述第二报警区间的下限为所述出块率阈值;所述第一概率阈值小于所述第二概率阈值。

第三方面,本发明实施例提供了一种电子设备,该电子设备包括:处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现如下步骤:

获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息;所述预设的第一时间间隔为出块时间间隔的预设倍数;

根据所述标识信息,确定第一节点;所述第一节点为在该预设的第一时间间隔内,生成新区块最多的节点;

计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;所述连续出块率为:在所述预设的第一时间间隔内,第一节点生成的新区块数量,与该预设的第一时间间隔内,所述区块链网络生成的新区块的总数量的比值;

根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。

第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现如下步骤:

获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息;所述预设的第一时间间隔为出块时间间隔的预设倍数;

根据所述标识信息,确定第一节点;所述第一节点为在该预设的第一时间间隔内,生成新区块最多的节点;

计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;所述连续出块率为:在所述预设的第一时间间隔内,第一节点生成的新区块数量,与该预设的第一时间间隔内,所述区块链网络生成的新区块的总数量的比值;

根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。

本发明实施例提供的攻击检测方法、装置及电子设备,可以在获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息时,根据所述标识信息,确定第一节点;计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。针对现有技术,在攻击发生,且造成资产损失后,根据资产损失才能推断出遭受攻击,不能及时检测出是否遭受到攻击的问题。本发明实施例提供的方法,可以及时的检测出区块链网络是否遭到受攻击,有利于在检测出遭受到攻击时,及时做出应对措施,降低资产损失。

当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1a为本发明实施例提供的攻击检测方法的一种流程示意图;

图1b为本发明实施例提供的根据连续出块率和预设的第一判定条件,检测所区块链网络是否遭受到攻击的一种流程示意图;

图2为本发明实施例提供的攻击检测方法的另一种流程示意图;

图3为本发明实施例提供的攻击检测装置的一种结构示意图;

图4为本发明实施例提供的攻击检测装置的另一种结构示意图;

图5为图4所示实施例中第二检测模块的一种结构示意图;

图6为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了实现及时检测出区块链网络是否遭受到攻击。本发明实施例提供了一种攻击检测方法、装置和电子设备。

为了实现对攻击的检测,本发明实施例设置了一个监控节点,该监控节点与基于工作量证明pow算法的区块链网络中的节点通信连接,其实现对攻击的检测。具体的,监控节点可以是区块链网络中原有的一个节点,也可以是新增的节点。

参见图1a,本发明实施例提供的攻击检测方法,应用于基于工作量证明pow算法的区块链网络中的监控节点,包括:

s101:获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息;所述预设的第一时间间隔为出块时间间隔的预设倍数;

例如,出块时间间隔可以是10分钟,也就是每10分钟生成一个新区块。

在一种具体的实施例中,可以将第一时间间隔设为出块时间间隔的5倍,那么,预设的第一时间间隔就是5*10,即50分钟。

s102:根据所述标识信息,确定第一节点;所述第一节点为在该预设的第一时间间隔内,生成新区块最多的节点;

例如,以上述实施例为例,在预设的第一时间间隔,也就是50分钟内,生成新区块的节点,分别是:节点a、节点b、节点c,其中,节点a生成新区块的数量为3个,节点b和节点c分别生成1个新区块。

由于节点a生成新区块的数量最多,所以节点a为第一节点。

可选的,在一种情况中,在50分钟内,节点a、节点b分别生成了2个新区块,节点c生成了1个新区块。由于节点a、节点b生成的新区块数量均是最多的,那么,可以将节点a、节点b任一视为第一节点,或将节点a、节点b均视为第一节点。

将节点a、节点b任一视为第一节点,或将节点a、节点b均视为第一节点,并不影响连续出块率的计算结果。

s103:计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;所述连续出块率为:在所述预设的第一时间间隔内,第一节点生成的新区块数量,与该预设的第一时间间隔内,所述区块链网络生成的新区块的总数量的比值;

例如,在预设的第一时间间隔50分钟内,区块链网络生成的新区块的总数量为5个,第一节点生成的新区块的数量为3个,那么,连续出块率为3/5。

s104:根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。

具体的,可以是:判断所述连续出块率是否为100%,如果是,则判定所述区块链网络,遭受到攻击,并进行第一报警提示。

由图1a所示的实施例可见,针对现有技术,在攻击发生,且造成资产损失后,根据资产损失才能推断出遭受攻击,不能及时检测出是否遭受到攻击的问题。本发明实施例提供的方法,可以及时的检测出区块链网络是否遭到受攻击,有利于在检测出遭受到攻击时,及时做出应对措施,降低资产损失。

可选的,在其他实施例中,根据连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击的步骤,参见图1b,可以包括:

s1041:判断连续出块率是否为100%;如果是,则执行s1049;如果否,则执行s1042;

s1042:判定区块链网络,未遭受到攻击;

s1043:判断连续出块率是否大于预设的出块率阈值;如果是,则执行s1044;如果否,则执行s10410;

s1044:获取该区块链网络中流通的虚拟货币的当前币价;

s1045:获取区块链网络中空闲矿机的总算力;所述空闲矿机为所述区块链网络中用于生成新区块的节点;

s1046:从区块链网络中节点的保存信息中,获取该区块链网络的当前挖矿难度;所述当前挖矿难度是在每增加预设数量个新区块后,根据挖矿难度计算公式计算得到的;所述挖矿难度计算公式为:挖矿难度=当前挖矿难度*(当前增加预设数量个新区块花费的时间/增加预设数量个新区块期望花费的时间);

区块链网络预设工作量证明的难题的难度,决定了节点需要花费多长时间,才能生成一个新区块。通常区块链网络预设的是每10分钟生成一个新区块,即出块时间间隔是10分钟。为了保证每10分钟生成一个新区块,就需要调整难题的难度也就是挖矿难度。例如:区块链网络中规定,每当增加预设数量个新区块时,利用挖矿难度计算公式:挖矿难度=当前挖矿难度*(当前增加预设数量个新区块花费的时间/增加预设数量个新区块期望花费的时间)调整挖矿难度。比如:每当增加2016个新区块时,利用挖矿难度计算公式:挖矿难度=当前挖矿难度*(当前增加2016个新区块花费的时间/20160)调整挖矿难度,其中,由于预设的出块时间间隔是10分钟,那么,增加2016个新区块,期望花费的时间就是2016*10=20160分钟。其中,区块链网络中挖矿难度的初始值,是在构建该区块链网络时,人为设定的。

s1047:根据区块链网络中虚拟货币的当前币价、区块链网络中空闲矿机的总算力及区块链网络的当前挖矿难度,计算该区块链网络的被攻击概率;

s1048:根据连续出块率、被攻击概率和预设的第二判定条件,检测所述区块链网络,是否易遭受攻击;

s1049:判定区块链网络,遭受到攻击,并进第一行报警提示;

s10410:判定区块链网络,不易遭受攻击,不进行报警。

在一种具体的实施例中,出块率阈值可以为50%,这样,当连续出块率小于或等于50%时,就不需要计算区块链网络的被攻击概率,而直接判定该区块链网络不易遭受到攻击。而当连续出块率小于100%且大于50%时,就需要进一步计算该区块链网络的被攻击概率,根据连续出块率和被攻击概率,检测所述区块链网络,是否易遭受攻击。

可选的,所述根据所述区块链网络中虚拟货币的当前币价、所述区块链网络中空闲矿机的总算力、及所述区块链网络的当前挖矿难度,计算所述区块链网络的被攻击概率的步骤,可以包括:

根据所述区块链网络中虚拟货币的当前币价和所述区块链网络的当前挖矿难度,计算所述虚拟货币的当前预估成本:

当前预估成本attack_cost=当前挖矿难度*当前币价,计算得到当前攻击所述区块链网络的当前预估成本;

根据所述区块链网络中空闲矿机的总算力和所述区块链网络的当前挖矿难度,计算所述区块链中空闲算力占比:

空闲算力占比rent=空闲矿机的总算力/当前挖矿难度,计算得到所述区块链网络的空闲算力占比;

根据所述当前预估成本和所述空闲算力占比,计算所述区块链网络的被攻击概率:

attack_prob=sigmoid(attack_cost,rent)=1/(1+e-rent/attack_cost),计算当前所述区块链网络的被攻击概率;

其中,attack_prob表示所述区块链网络中的被攻击概率,sigmoid(attack_cost,rent)表示参数为所述当前预估成本和所述空闲算力占比的sigmoid函数,所述sigmoid函数用于将变量映射到0~1之间。

例如:可以从交易所获取该区块链网络中虚拟货币的当前币价为26630.24元,可以从该区块链网络中节点的保存信息中,获取该区块链网络的当前挖矿难度为4,那么,可以利用预设的公式:

当前预估成本=当前挖矿难度*当前币价,计算得到在当前预估成本为4*26630.24。

可以从各个矿池方,获得该区块链网络中空闲矿机的总算力;其中,区块链网络可以由一个或多个矿池方组成,一个矿池方为一个或多个节点组成。一个矿池内的节点共同参与挖矿,当该矿池中有节点生成新区块成功,获得奖励是,该矿池中的节点可以平均或按比率,比如:按各个节点拥有的算力比率,分配该奖励。矿池方记录着其矿池中各个节点的算力。空闲矿机为该区块链网络中可以用于生成新区块的节点。

比如,获取该区块链网络中空闲矿机的总算力为40,利用预设的公式:

空闲算力占比=空闲矿机的总算力/当前挖矿难度,计算得到空闲算力占比为40/4=10。

利用预设的公式:

attack_prob=sigmoid(attack_cost,rent)=1/(1+e-rent/attack_cost),计算当前该区块链网络的被攻击概率为sigmoid(4*26630.24,10)=1/(1+e-10/4*26630.24)。

可选的,根据连续出块率、被攻击概率和预设的第二判定条件,检测区块链网络,是否易遭受攻击的步骤,可以包括:

当所述连续出块率在预设的第一报警区间内,且所述被攻击概率大于预设的第一概率阈值时,判定所述区块链网络,易遭受攻击,并进行第二报警提示;

当所述连续出块率在预设的第二报警区间内,且所述被攻击概率大于预设的第二概率阈值时,判定所述区块链网络,易遭受攻击,并进行第二报警提示;所述第一报警区间,和所述第二报警区间均为开区间;其中,所述预设的第一报警区间的上限是100%,下限为所述预设的第二报警区间的上限;所述第二报警区间的下限为所述出块率阈值;所述第一概率阈值小于所述第二概率阈值。

在一种具体的实施例中,预设的第一报警区间可以为(80%,100%),预设的第一概率阈值可以为70%,预设的第二报警区间可以为(50%,80%),预设的第二概率阈值可以为80%,出块率阈值50%。

那么,当80%<block_prob<100%,且attack_prob>70%时,确定该区块链网络易遭受攻击,并进行第二报警提示;

当50%<block_prob<80%,且attack_prob>80%时,确定所述区块链网络易遭受攻击,并进行第二报警提示。其中,block_prob表示连续出块率,attack_prob表示被攻击概率,第二报警提示可以是,极有可能会遭受攻击。

以下,列举一个具体示例,对本发明实施例提供的攻击检测方法,做进一步详细的说明。如图2所示,该示例流程包括如下步骤:

s201:获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息;

s202:根据标识信息,确定第一节点;

s203:计算获取的第一节点在预设的第一时间间隔内的连续出块率;

s204:判断该连续出块率是否为100%;如果是,则执行s213;如果否,则执行s205;

s205:判定该连续出块率是否大于50%;如果是,则执行s206;如果否,则执行s214;

s206:获取区块链网络中流通的虚拟货币的当前币价;

s207:获取区块链网络中空闲矿机的总算力;

s208:从区块链网络中节点的保存信息中,获取该区块链网络的当前挖矿难度;

本发明实施例并不限定,s206、s207、s208三者间的执行顺序。

s209:利用预设的公式:当前预估成本=当前挖矿难度*当前币价,计算得到当前攻击该区块链网络的当前预估成本;

s210:利用预设的公式:空闲算力占比=空闲矿机的总算力/当前挖矿难度,计算得到该区块链网络的空闲算力占比;

本发明实施例并不限定,s209、s210两者间的执行顺序,在其他实施例中也可以先执行s210,再执行s209。

s211:利用预设的公式:attack_prob=sigmoid(attack_cost,rent)=1/(1+e-rent/attack_cost),计算当前该区块链网络的被攻击概率;其中,attack_prob表示所述区块链网络中的被攻击概率,attack_cost表示所述当前预估成本,rent表示所述空闲算力占比,sigmoid(attack_cost,rent)表示参数为所述当前预估成本和所述空闲算力占比的sigmoid函数,所述sigmoid函数用于将变量映射到0~1之间;

s212:当80%<block_prob<100%,且attack_prob>70%时,确定该区块链网络易遭受到攻击,并进行第二报警提示;或,当50%<block_prob<80%,且attack_prob>80%时,确定所述区块链网络易遭受到攻击,并进行第二报警提示;其中,block_prob表示连续出块率,attack_prob表示被攻击概率;

s213:判定该区块链网络,遭受到攻击,并进行第一报警提示;

s214:判定该区块链网络,不易遭受攻击,不进行报警。

其中,第一报警提示,可以是遭受到攻击的提示;第二报警提示可以是,极有可能会遭受攻击的提示。

例如:将本发明实施例提供的攻击检测方法,应用到某基于pow算法的区块链网络中,用于检测区块链网络是否遭受到51%攻击。

具体的,可以通过在该区块链网络中搭建一个也基于pow算法的监控节点,同时,利用区块链网络中的数据共享的特点,从该区块链网络中获取数据,用于检测该区块链网络是否遭受到51%攻击。

还可以通过在该区块链网络中选择一个节点作为监控节点,可以为该节点增添新的功能,用于检测该区块链网络是否遭受到51%攻击。

例1、利用该监控节点,计算得到该区块链网络,在预设的第一时间间隔50分钟内,连续出块率为2/5,即连续出块率40%,判定该区块链网络,未遭受到51%攻击。下一步,判断该区块链网络是否易遭受51%攻击。由于连续出块率小于50%,所以该区块链网络不易遭受51%攻击,不进行报警。

例2、利用该监控节点,计算得到该区块链网络,在预设的第一时间间隔50分钟内,连续出块率为3/5,即连续出块率60%;判定该区块链网络,未遭受到51%攻击。下一步,判断该区块链网络是否易遭受51%攻击。其中,该区块链网络的出块时间间隔为10分钟,预设的第一时间间隔为5倍的出块时间间隔。获取该区块链网络中流通的虚拟货币的当前币价,该区块链网络中空闲矿机的总算力和区块链网络的当前挖矿难度,用于计算该区块链网络的被攻击概率。

由于第一时间间隔为50分钟,表明每隔50分钟后,计算一次连续出块率。这样,本次获取的连续出块率,与下次获取的连续出块率的间隔时间约为1小时。也就是说,在预设的第一时间间隔为50分钟的情况下,利用本发明实施例提供的方法,每次检测的是从当前时刻开始1小时内,区块链网络被攻击的概率。

如果计算得到在当前1小时内,攻击该区块链网络的当前预估成本为12149;计算得到该区块链网络的空闲算力占比为23。

那么,利用预设的公式:

attack_prob=sigmoid(attack_cost,rent)=1/(1+e-rent/attack_cost),计算在当前1小时内,计算得到该区块链网络的被攻击概率为sigmoid(12149,23)=1/(1+e-23/12149)=0.5,也就是该区块链网络的被攻击概率为50%。

由于该区块链网络的连续出块率60%,在区间50%<block_prob<80%范围内,但该区块链网络的被攻击概率为50%,不在attack_prob>80%的区间范围内,所以该区块链网络不易遭受51%攻击,不进行报警。

针对现有技术,在攻击发生,且造成资产损失后,根据资产损失才能推断出遭受攻击,不能及时检测出是否遭受到攻击的问题。本发明实施例提供的方法,可以及时的检测出区块链网络是否遭到受攻击,有利于在检测出遭受到攻击时,及时做出应对措施,降低资产损失。

另外,相较于现有技术,在攻击发生之后,对攻击造成的损失进行弥补。本发明实施例提供的方法,可以实现在攻击发生之前,检测出区块链网络是否易遭受到攻击;以便在攻击之前,避免攻击的发生,进而可以防止攻击发生后造成的资产损失。

与图1a所示实施例对应的,本发明实施例还提供了一种攻击检测装置。

参见图3,该装置包括:

获取模块301,用于获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息;所述预设的第一时间间隔为出块时间间隔的预设倍数;

确定模块302,用于根据所述标识信息,确定第一节点;所述第一节点为在该预设的第一时间间隔内,生成新区块最多的节点;

计算模块303,用于计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;所述连续出块率为:在所述预设的第一时间间隔内,第一节点生成的新区块数量,与该预设的第一时间间隔内,所述区块链网络生成的新区块的总数量的比值;

第一检测模块304,用于根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。

可选的,所述第一检测模块304,具体用于:

判断所述连续出块率是否为100%,如果是,则判定所述区块链网络,遭受到攻击,并进行第一报警提示。

可选的,参见图4,所述装置,还包括:第二检测模块401;

所述第一检测模块304,还用于:

在判断出所述连续出块率不是100%时,判定所述区块链网络,未遭受到攻击;并启动所述第二检测模块;

参见图5,所述第二检测模块401,包括:

币价获取子模,501,用于当所述连续出块率大于预设的出块率阈值时,获取所述区块链网络中流通的虚拟货币的当前币价;

算力获取子模块502,用于获取所述区块链网络中空闲矿机的总算力;所述空闲矿机为所述区块链网络中用于生成新区块的节点;

难度获取子模块503,用于从所述区块链网络中节点的保存信息中,获取所述区块链网络的当前挖矿难度;所述当前挖矿难度是在每增加预设数量个新区块后,根据挖矿难度计算公式计算得到的;所述挖矿难度计算公式为:挖矿难度=当前挖矿难度*(当前增加预设数量个新区块花费的时间/增加预设数量个新区块期望花费的时间);

概率计算子模块504,用于根据所述区块链网络中虚拟货币的当前币价、所述区块链网络中空闲矿机的总算力、及所述区块链网络的当前挖矿难度,计算所述区块链网络的被攻击概率;

检测子模块505,用于根据所述连续出块率、所述被攻击概率和预设的第二判定条件,检测所述区块链网络,是否易遭受攻击。

可选的,所述概率计算子模块504,具体用于:

根据所述区块链网络中虚拟货币的当前币价和所述区块链网络的当前挖矿难度,计算所述虚拟货币的当前预估成本:

当前预估成本attack_cost=当前挖矿难度*当前币价,计算得到当前攻击所述区块链网络的当前预估成本;

根据所述区块链网络中空闲矿机的总算力和所述区块链网络的当前挖矿难度,计算所述区块链中空闲算力占比:

空闲算力占比rent=空闲矿机的总算力/当前挖矿难度,计算得到所述区块链网络的空闲算力占比;

根据所述当前预估成本和所述空闲算力占比,计算所述区块链网络的被攻击概率:

attack_prob=sigmoid(attack_cost,rent)=1/(1+e-rent/attack_cost),计算当前所述区块链网络的被攻击概率;

其中,attack_prob表示所述区块链网络中的被攻击概率,sigmoid(attack_cost,rent)表示参数为所述当前预估成本和所述空闲算力占比的sigmoid函数,所述sigmoid函数用于将变量映射到0~1之间。

可选的,所述检测子模块505,具体用于:

当所述连续出块率在预设的第一报警区间内,且所述被攻击概率大于预设的第一概率阈值时,判定所述区块链网络,易遭受攻击,并进行第二报警提示;

当所述连续出块率在预设的第二报警区间内,且所述被攻击概率大于预设的第二概率阈值时,判定所述区块链网络,易遭受到攻击,并进行第二报警提示;所述第一报警区间,和所述第二报警区间均为开区间;其中,所述预设的第一报警区间的上限是100%,下限为所述预设的第二报警区间的上限;所述第二报警区间的下限为所述出块率阈值;所述第一概率阈值小于所述第二概率阈值。

针对现有技术,在攻击发生,且造成资产损失后,根据资产损失才能推断出遭受攻击,不能及时检测出是否遭受到攻击的问题。本发明实施例提供的装置,可以及时的检测出区块链网络是否遭到受攻击,有利于在检测出遭受到攻击时,及时做出应对措施,降低资产损失。

另外,相较于现有技术,在攻击发生之后,对攻击造成的损失进行弥补。本发明实施例提供的装置,可以实现在攻击发生之前,检测出区块链网络是否易遭受到攻击;以便在攻击之前,避免攻击的发生,进而可以防止攻击发生后造成的资产损失。

与图1a所示实施例对应的,本发明实施例还提供了一种电子设备,如图6所示,包括处理器601、通信接口602、存储器603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信,

存储器603,用于存放计算机程序;

处理器601,用于执行存储器603上所存放的程序时,实现如下步骤:

获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息;所述预设的第一时间间隔为出块时间间隔的预设倍数;

根据所述标识信息,确定第一节点;所述第一节点为在该预设的第一时间间隔内,生成新区块最多的节点;

计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;所述连续出块率为:在所述预设的第一时间间隔内,第一节点生成的新区块数量,与该预设的第一时间间隔内,所述区块链网络生成的新区块的总数量的比值;

根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。

本发明实施例提供的电子设备,可以实现在获取在预设的第一时间间隔内,生成新区块的各个节点的标识信息时,根据所述标识信息,确定第一节点;计算获取的所述第一节点在所述预设的第一时间间隔内的连续出块率;根据所述连续出块率和预设的第一判定条件,检测所述区块链网络是否遭受到攻击。针对现有技术,在攻击发生,且造成资产损失后,根据资产损失才能推断出遭受攻击,不能及时检测出是否遭受到攻击的问题。本发明实施例提供的电子设备,可以及时的检测出区块链网络是否遭到受攻击,有利于在检测出遭受到攻击时,及时做出应对措施,降低资产损失。

上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一攻击检测方法的步骤。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一攻击检测方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1