本发明涉及计算机领域,具体来说,涉及计算机网络与存储领域,更具体地说,涉及一种基于智能网卡的消息验证与存储方法及系统。
背景技术:
随着云计算、高性能计算规模的不断增大,系统稳定性面临的挑战越来越大。软件错误、系统漏洞、人为操作失误等严重威胁系统数据安全和稳定性。消息验证与消息存储是搭建高可靠性应用的基础,常用于区块链系统、数据库系统、文件系统的搭建中,快速的消息验证、消息存储有益于高可靠、高可用系统的实现。传统的网卡仅用于数据传输中的数据封装与解封、链路管理、数据编译码等,消息验证与存储处理在计算机软件层,这样消息验证与存储处理要占用系统cpu,开销较大,影响系统应用的稳定性。
技术实现要素:
因此,本发明的目的在于克服上述现有技术的缺陷,提供一种新的能够实现消息快速发送和接收存储的基于智能网卡的消息发送方法及接收方法。
根据本发明的第一方面,本发明提供一种用于智能网卡的消息发送方法,所述智能网卡所在节点存储有为所述节点生成的密钥列表,密钥列表包含了该节点与其他节点的共享密钥,其中,系统中每一对节点有一个共享密钥,不同节点对的共享密钥不同,所述方法包括如下步骤:
f1、根据待发送的消息生成消息头和消息内容,其中所述消息头包括消息长度、发送消息的源节点序号、发送消息的目的节点序号等信息,消息内容以消息键-消息值对形式表示。
f2、基于所述消息头和消息内容以及所述密钥列表生成验证码向量;其中,所述验证码向量被添加在消息内部且所述验证码向量包含多个消息验证码,每一个消息验证码与某一个节点对应;所述消息验证码是基于待发送消息的内容和该消息验证码对应的节点与发送消息的源节点的共享密钥生成的,包括:
f21、遍历发送节点的密钥列表;
f22、依次以待发送的消息内容、密钥列表中的一个密钥作为哈希函数的输入生成消息验证码;
f23、将所有的消息验证码组织为验证码向量。
f3、将所述消息头、消息内容以及验证码向量组成发送消息包发送。
根据本发明的第二方面,本发明提供一种用于智能网卡的消息接收方法,所述智能网卡所在节点存储有为所述节点生成的密钥列表,密钥列表包含了该节点与其他节点的共享密钥,其中,系统中每一对节点有一个共享密钥,不同节点对的共享密钥不同,所述方法包括如下步骤:
j1、接收根据本发明第一方面所述的消息发送方法发送的消息;
j2、使用接收节点对应的密钥列表对接收到的消息进行验证;
j3、将验证通过的消息进行存储。
其中,所述步骤j2包括:
j21、从接收到的消息的验证码向量中获取与本接收节点对应的消息验证码及发送消息的源节点序号;
j22、基于发送消息的源节点序号从本接收节点的密钥列表中找到本接收节点与发送消息的源节点对应的共享密钥;
j23、将步骤j21中获取的本接收节点对应的消息验证码与步骤j22中找到的共享密钥进行匹配验证。
所述步骤j3中将所有验证成功的消息组织为队列的形式进行存储,包括:
j31、提取消息队列中待存储消息的消息键;
j32、基于消息键通过哈希运算计算该待存储消息对应的哈希表项;其中,采用多槽位的哈希表结构使同一个哈希表项包含多个槽位,对消息队列中不同的待存储消息对应同一个哈希表项的哈希冲突时,将发生哈希冲突的不同待存储消息存储在同一个哈希表项的不同槽位。
j33、将待存储消息存储在步骤j32中计算的哈希表项对应的位置。
根据本发明的第三方面,本发明提供一种智能网卡,包括存储器和处理器,所述存储器中存储计算机程序,所述处理器执行所述计算机程序以实现本发明第一方面和第二方面所述方法的步骤。
根据本发明的第三方面,本发明提供一种基于智能网卡的网络系统,包括系统配置装置以及多个网络节点,每个网络节点包括一个如本发明第三方面所述的智能网卡,其中,
系统配置装置用于为系统中的每一个节点生成密钥列表,以使每个节点的密钥列表包含该节点与其他所有节点的共享密钥,且每一对节点有一个共享密钥,不同的节点对共享密钥不同。
所述节点还包括消息格式化模块,用于将待发送的消息进行格式化处理,将其处理成包含消息头、消息键和消息值的形式,并为待发送的消息生成验证码向量。
所述智能网卡包括消息验证模块和消息存储模块,其中:
消息验证模块,用于基于节点的密钥列表验证接收节点接收到的消息与其所携带的验证码向量是否匹配,将通过验证的消息以队列形式传递给消息保存模块进行下一步处理;消息保存模块,用于将通过验证的消息保存到哈希表中。
与现有技术相比,本发明的优点在于:本发明实现了快速的消息验证与消息存储,将消息验证与存储操作载卸载到网络设备上,一方面降低了终端cpu负载,另一方面利用网卡的流式处理能力加速消息验证与消息存储过程。本发明降低了恶意攻击带来的资源损耗,将消息验证过程卸载到网卡上,当系统面对恶意攻击时,由网卡进行恶意消息的筛选,避免了恶意攻击带来的系统网络协议栈开销。本发明适应性强,适用基于多核处理器、基于fpga的多种智能网卡平台。本发明使用灵活,不对消息验证中所用安全哈希算法和哈希表索引计算中所用哈希算法进行限制,可根据具体需求自由选择。
附图说明
以下参照附图对本发明实施例作进一步说明,其中:
图1为根据本发明实施例的一种基于智能网卡的网络统框架示意图;
图2为根据本发明实施例的一种基于智能网卡的网络系统中系统配置装置生成密钥列表的流程示意图;
图3为根据本发明实施例的一种基于智能网卡的网络系统中的消息格式化模块工作流程示意图;
图4为根据本发明实施例的一种基于智能网卡的网络系统中消息验证模块工作流程示意图;
图5为根据本发明实施例的一种基于智能网卡的消息验证与存储方法的消息存储流程示意图。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
需要说明的是,智能网卡除了承担传统网卡数据传输的功能之外,还可以承担数据的流式处理任务。使用智能网卡,可以将cpu的计算任务卸载到网络中,使数据在流动过程中得到处理,实现系统性能的优化。因此,为降低系统消息验证与存储开销,本发明提出一种用于智能网卡的消息发送方法和接收方法,实现快速消息验证与存储。概况地说,先为系统各节点生成密钥列表;然后在发送端将消息进行格式化并为消息生成验证码向量;在接收端智能网卡上使用验证码向量对消息进行检验;最后由智能网卡将通过检验的消息保存到系统内存的哈希表中。
本发明方法可概括为四个主要部分:系统配置、消息格式化、消息验证和消息保存。系统配置部分是为各节点生成密钥列表;消息格式化部分由消息发送端完成,对待发送消息进行格式化处理,并利用密钥列表生成验证码向量;消息验证部分和消息保存步骤由接收端的智能网卡完成,消息验证步骤使用密钥列表检验消息与其携带的验证码向量是否匹配,以保证消息的安全传输;消息保存部分负责将消息保存在系统内存中的哈希表里,以实现消息的存储。
下面结合附图和实施例详细说明本发明。
根据本发明的一个实施例,如图1所示,一种基于智能网卡的网络系统,包括系统配置装置以及多个网络节点,每个网络节点包括一个智能网卡及消息格式化模块,其中:
所述系统配置装置为系统中的各节点生成密钥列表以使每个节点的密钥列表包含该节点与其他所有节点的共享密钥,且每一对节点有一个共享密钥,不同的节点对共享密钥不同;系统中的节点指的是网络节点对于系统中的任意两个节点,系统配置装置使用安全哈希函数输入两个节点的参数配置,产生一个共享密钥。
根据本发明的一个实施例,如图2所示,所述系统配置装置为系统中的每一个节点生成密钥列表,包括如下步骤:
步骤11:获取系统参数,输入总节点个数、待生成密钥长度,以i、j作为节点变量以方便说明,系统中节点编号记为0~n,置i=0,j=1;
步骤12:选取节点i、节点j,为节点i、节点j生成指定长度的密钥,生成密钥的算法可由用户指定,只要生成的密钥长度与用户指定的密钥长度相同既可;
步骤13:判断步骤12生成的当前密钥与密钥列表中的密钥是否重复,若是,转到步骤15,若否,转到步骤14;
步骤14:将当前密钥添加到节点i和节点j的密钥列表中;
步骤15:使j=j 1,执行步骤16;
步骤16:判断当前j是否小于节点数n,若是,则执行步骤12;若否,则执行步骤17;
步骤17:以新节点作为初始节点,使i=i 1,执行步骤18;
步骤18:判断当前i是否小于n,若是,则执行步骤19;若否,则结束生成密钥列表的流程;
步骤19:对新的未生成密钥的节点对生成共享密钥,使j=i 1,执行步骤12。
所述消息格式化模块在发送节点发送消息前,对待发送的消息进行格式化处理,将其处理成消息头(header)、消息键(key)和消息值(value)的形式,其中消息头包含消息的长度信息和源节点序号以辅助消息接收端在网卡上的消息验证与消息保存操作,还包括发送消息的目的节点序号等信息,消息内容以key-value形式组织以方便消息在接收端哈希表中的存储;添加消息验证码向量mac,即将消息格式化为header-key-value-mac格式,消息验证码向量mac由安全哈希算法(securehashalgorithm)根据消息和密钥列表生成,依次以待发送的消息内容、密钥列表中的一个密钥作为哈希函数的输入生成消息验证码,哈希函数的输出即为消息验证码;其中,其中消息验证码可以被添加到消息的任意位置,只需在消息头部指定消息验证码在消息内的偏移即可;验证码向量包含多个消息验证码,其中每一个消息验证码对应密钥列表中的一条密钥,并与系统中的一个节点对应,验证码向量可以保证消息的完整性和不可否认性。
根据本发明的一个实施例,如图3所示,所述消息格式化模块对待发送的消息进行格式化处理包括如下步骤:
步骤21:获取待发送消息的消息键(key)、消息值(value)、发送节点序号,执行步骤22;
步骤22:计算消息长度信息,将长度信息和发送节点序号写入消息头既由消息长度信息、发送节点序号生成消息头header,将待发送消息组织成header-key-value形式,执行步骤23;
步骤23:以k代表第k个节点,置k=0,系统中节点编号记为0~n,执行步骤24;
步骤24:读取发送节点的密钥列表中的第k个密钥,将读取的密钥和待发送消息作为输入参数传递给安全哈希函数,生成消息验证码,安全哈希算法可由用户指定,并使其输入的密钥长度和密钥列表中的密钥相匹配,执行步骤25;
步骤25:将验证码添加到验证码向量中,验证码向量包含系统中所有节点的验证码,每一个消息验证码对应密钥列表中的一条密钥并与系统中的某一个节点对应,将消息组织成header-key-value-mac的形式,其中mac为验证码向量,执行步骤26;
步骤26:置k=k 1,执行步骤27;
步骤27:判断当前k是否等于n 1,若是,消息格式化处理结束,否则,执行步骤24。
所述智能网卡包括消息验证模块和消息保存模块,其中,消息验证模块使用密钥列表检验消息与其携带的验证码向量是否匹配,以保证消息的安全传输并将通过验证的消息以队列形式传递给消息保存模块以存储在系统内存中,发现恶意消息后直接丢弃,降低恶意消息引入的系统资源消耗;所述消息保存模块负责将消息保存在系统内存中的哈希表里,以实现消息的存储。具体的,所述消息验证模块对接收到的消息进行验证,其利用密钥列表检验消息与其携带的验证码向量是否匹配。所述消息验证模块根据其本节点序号在验证码向量中提取对应验证码,并根据消息源节点序号在本节点的密钥列表中提取与源节点共享的密钥,使用安全哈希算法和对应的共享密钥检验消息与验证码是否匹配,该模块将通过验证的消息以队列形式传递给消息保存模块。所述消息保存模块,将通过验证的消息保存到系统内存的哈希表中。具体的,所述消息保存模块根据消息中的key值计算消息对应的哈希表项,并使用一种多槽位的哈希表结构来解决哈希冲突。在这种哈希表结构中,一个哈希表项中包含多个槽位,发生哈希冲突的消息被保存在同一个哈希表项的不同槽位中。消息保存模块使用消息对应的哈希表项序号、槽位序号和哈希表在内存中的偏移地址来计算消息在内存中的保存地址。该模块使用一个位图记录槽位的使用情况,同时为了降低位图的访问开销,将位图存储在网卡之中。
根据本发明的一个实施例,如图4所示,所述消息验证模块对接收到的消息进行验证包括如下步骤:
步骤31:获取接收节点信息,输入本节点序号;
步骤32:缓存消息,从智能网卡网络中读取消息并缓存到队列中;
步骤33:从待验证消息的验证码向量中提取与本节点对应的验证码,即从验证码向量中提取在发送节点使用与本节点对应的共享密钥生成的验证码;
步骤34:从消息头提取源节点序号;
步骤35:从本节点的密钥列表中读取与源节点共享的密钥,既根据源节点序号从本节点密钥列表中查找与源节点共享的密钥;
步骤36:计算本节点的目标验证码,既使用本节点中与源节点共享的密钥根据所接收消息计算目标验证码;
步骤37:判断本节点的目标验证码与消息验证码是否匹配,既比较从消息中提取的验证码和由消息所携带的信息计算得到的目标验证码是否相同,若相同,执行步骤38,否则执行步骤39;
步骤38:转发消息,即将消息以队列组织缓存在待存储消息队列中;
步骤39:丢弃消息。
如图5所示,所述消息存储模块对通过验证的消息进行存储包括如下步骤:
步骤41:获取系统内存哈希表信息,输入槽位宽度、槽位数、哈希表地址,其中,槽位宽度指单个槽位的大小、槽位数指是每个哈希表项包含的槽位个数、哈希表地址是哈希表在内存中的起始物理地址;
步骤42:缓存消息,既从消息队列中读取待存储的消息;
步骤43:提取消息的消息键key并计算待访问哈希表项,其中,计算待访问哈希表项的哈希算法可由用户指定;
步骤44:查询哈希表位图记录的槽位使用情况,既通过访问位图读取待访问哈希表项的槽位使用情况;
步骤45:选择新槽位,既根据当前槽位使用情况,使用轮询方式选择新的可用槽位;
步骤46:更新位图,既将槽位的使用情况写回位图;
步骤47:根据选择的槽位计算内存访问地址,可使用如下方式计算内存访问地址,既待存储消息在内存中的保存地址是哈希表在内存中的偏移地址与消息在哈希表内的偏移地址之和,而消息在哈希表内的偏移地址由哈希表项和槽位号计算得到,故待存储消息的访问地址为:内存访问地址=哈希表地址 槽位宽度*(待访问哈希表项*槽位数 待访问槽位号);
步骤48:读取消息剩余部分信息,包括消息值和消息头,并将其封装为pcie包上传到系统内存。
本发明的益处在于,本发明实现了快速的消息验证与消息存储,将消息验证与存储操作载卸载到网络设备上,一方面降低了终端cpu负载,另一方面利用网卡的流式处理能力加速消息验证与消息存储过程。本发明降低恶意攻击带来的资源损耗,将消息验证过程卸载到网卡上,当系统面对恶意攻击时,由网卡进行恶意消息的筛选,避免了恶意攻击带来的系统网络协议栈开销。本发明的方法适应性强,适用基于多核处理器、基于fpga的多种智能网卡平台;使用灵活,不对消息验证中所用安全哈希算法和哈希表索引计算中所用哈希算法进行限制,可根据具体需求自由选择。
需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能既可。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
1.一种用于智能网卡的消息发送方法,所述智能网卡所在节点存储有为所述节点生成的密钥列表,密钥列表包含了该节点与其他节点的共享密钥,其中,系统中每一对节点有一个共享密钥,不同节点对的共享密钥不同,所述方法包括如下步骤:
f1、根据待发送的消息生成消息头和消息内容,其中所述消息头包括消息长度、发送消息的源节点序号、发送消息的目的节点序号等信息,消息内容以消息键-消息值对形式表示;
f2、基于所述消息头和消息内容以及所述密钥列表生成验证码向量;
f3、将所述消息头、消息内容以及验证码向量组成发送消息包发送。
2.根据权利要求1所述的一种基于智能网卡的消息发送方法,其特征在于,
所述验证码向量被添加在消息任意位置,并通过在消息头部指定消息验证码在消息内的偏移;
所述验证码向量包含多个消息验证码,每一个消息验证码与一个节点对应;
其中,所述消息验证码是基于待发送消息的内容和该消息验证码对应的节点与发送消息的源节点的共享密钥生成的。
3.根据权利要求2所述的一种基于智能网卡的消息发送方法,其特征在于,所述步骤f2包括:
f21、遍历发送节点的密钥列表;
f22、依次以待发送的消息内容、密钥列表中的一个密钥作为哈希函数的输入生成消息验证码;
f23、将所有的消息验证码组织为验证码向量。
4.一种用于智能网卡的消息接收方法,所述智能网卡所在节点存储有为所述节点生成的密钥列表,密钥列表包含了该节点与其他节点的共享密钥,其中,系统中每一对节点有一个共享密钥,不同节点对的共享密钥不同,所述方法包括如下步骤::
j1、接收根据权利要求1至4之一的消息发送方法发送的消息,
j2、使用接收节点对应的密钥列表对接收到的消息进行验证;
j3、将验证通过的消息进行存储。
5.根据权利要求4所述的一种用于智能网卡的消息接收方法,其特征在于,所述步骤j2包括:
j21、从接收到的消息的验证码向量中获取与本接收节点对应的消息验证码及发送消息的源节点序号;
j22、基于发送消息的源节点序号从本接收节点的密钥列表中找到本接收节点与发送消息的源节点对应的共享密钥;
j23、将步骤j21中获取的本接收节点对应的消息验证码与步骤j22中找到的共享密钥进行匹配验证。
6.根据权利要求5所述的一种用于智能网卡的消息接收方法,其特征在于,所述步骤j3中将所有验证成功的消息组织为队列的形式进行存储,包括:
j31、提取消息队列中待存储消息的消息键;
j32、基于消息键通过哈希运算计算该待存储消息对应的哈希表项;
j33、将待存储消息存储在步骤j32中计算的哈希表项对应的位置。
7.根据权利要求6所述的一种用于智能网卡的消息接收方法,其特征在于,采用多槽位的哈希表结构使同一个哈希表项包含多个槽位,对消息队列中不同的待存储消息对应同一个哈希表项的哈希冲突,将发生哈希冲突的不同待存储消息存储在同一个哈希表项的不同槽位。
8.一种智能网卡,包括存储器和处理器,所述存储器中存储计算机程序,所述处理器执行所述计算机程序以实现权利要求1至3、4至7任一所述方法的步骤。
9.一种网络系统,其特征在于,包括系统配置装置以及多个网络节点,每个网络节点包括一个如权利要求8所述的智能网卡,其中,
系统配置装置用于为系统中的每一个节点生成密钥列表,以使每个节点的密钥列表包含该节点与其他所有节点的共享密钥,且每一对节点有一个共享密钥,不同的节点对共享密钥不同。
10.根据权利要求9所述的网络系统,其特征在于,
所述节点还包括消息格式化模块,用于将待发送的消息进行格式化处理,将其处理成包含消息头、消息键和消息值的形式,并为待发送的消息生成验证码向量。
11.根据权利要求10所述的网络系统,其特征在于,
所述智能网卡包括消息验证模块和消息存储模块,其中:
消息验证模块,用于基于节点的密钥列表验证接收节点接收到的消息与其所携带的验证码向量是否匹配,将通过验证的消息以队列形式传递给消息保存模块进行下一步处理;
消息保存模块,用于将通过验证的消息保存到哈希表中。
技术总结