发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种IPSec加解密卸载方法,能够基于智能网卡实现IPSec加解密的高性能卸载。
为实现上述目的及其他相关目的,本发明提供一种IPSec加解密卸载方法,包括以下步骤:构建智能网卡的驱动程序,基于所述驱动程序提供安全联盟至所述智能网卡,获取IPSec报文并设置所述IPSec报文的元数据;在所述智能网卡上设置网卡微引擎,基于所述网卡微引擎接收所述IPSec报文、所述元数据和所述安全联盟,根据所述元数据获取所述IPSec报文对应的安全联盟,基于所述安全联盟对所述IPSec报文进行加解密。
于本发明一实施例中,对于需要加密的IPSec报文,所述元数据包括IPSec报文标识、安全联盟索引和防攻击序列号;对于需要解密的IPSec报文,所述元数据包括PSec报文标识、安全联盟索引和解密成功失败结果。
于本发明一实施例中,所述驱动程序包括上下文管理单元、安全联盟管理单元和报文管理单元;
所述安全联盟管理单元用于获取并存储所述安全联盟;
所述上下文管理单元用于提供所述安全联盟至所述智能网卡;
所述报文管理单元用于获取IPSec报文并设置IPSec报文的元数据。
于本发明一实施例中,所述安全联盟管理单元获取所述安全联盟通过以下任一方式:
1)基于用户主机设置所述安全联盟到Linux内核XFRM模块,基于所述XFRM模块将安全联盟经由所述上下文管理单元传送至所述安全联盟单元;
2)在Linux用户态基于iproute2套件手动设置安全联盟到Linux内核XFRM模块,基于所述XFRM模块将安全联盟经由所述上下文管理单元传送至所述安全联盟单元;
3)在Linux用户态基于调试工具针对网络接口直接配置所述安全联盟至所述安全联盟管理单元。
于本发明一实施例中,所述网卡微引擎包括配置管理单元、IPSec协议处理单元和加解密引擎管理单元;
所述配置管理单元用于从所述驱动程序中卸载并存储所述安全联盟;
所述IPSec协议处理单元用于接收所述IPSec报文和所述元数据,根据所述元数据从所述配置管理单元获取所述IPSec报文对应的安全联盟;
所述加解密引擎管理单元基于所述安全联盟对所述IPSec报文进行加解密。
于本发明一实施例中,所述IPSec协议处理单元根据所述IPSec报文的传输方向确定采用用于加密的安全联盟或用于解密的安全联盟。
于本发明一实施例中,所述加解密引擎管理单元包括DMA输入模块、SRAM、加解密模块和DMA输出模块;
所述DMA输入模块用于将位于DRAM中的IPSec报文基于DMA方式传送至所述SRAM;
所述加解密模块用于读取所述SRAM中的IPSec报文进行加解密,并将加解密后的IPSec报文存储至所述SRAM;
所述DMA输出模块用于将所述加解密后的IPSec报文基于DMA方式传送至所述DRAM。
于本发明一实施例中,所述DMA输入模块、所述SRAM、所述加解密模块和所述DMA输出模块采用并行处理模式。
于本发明一实施例中,还包括基于所述网卡微引擎对所述安全联盟进行更新;
基于所述网卡微引擎对所述安全联盟进行更新包括以下步骤:
当需要对IPSec报文进行加解密时,获取所述安全联盟的生存时长;
当所述生存时长大于老化时间阈值时,所述网卡自动丢弃所述IPSec报文;
当所述生存时长不大于所述老化时间阈值时,将所述IPSec报文的数据长度累加至报文字节总数;若所述报文字节总数大于报文字节数阈值,所述网卡自动丢弃所述IPSec报文,设置所述安全联盟为无效状态并获取更新的安全联盟,否则基于所述安全联盟进行所述IPSec报文的加解密。
于本发明一实施例中,所述安全联盟还包括IPSec封装模式和IPSec封装协议,以分别实现隧道模式的封装解封装和ESP协议的封装解封装。
如上所述,本发明所述的IPSec加解密卸载方法,具有以下有益效果。
(1)通过在智能网卡驱动程序中嵌入IPSec协议卸载相关的上下文管理、安全联盟(SA)管理和报文管理驱动单元,在网卡微引擎(ME)中嵌入配置管理、IPSec协议处理(IPsecPacket Processing,PP)和加解密引擎管理(crypto Engine Management,CEM)等微引擎处理单元,完成一套IPSec的卸载和加解密系统,该系统的驱动模块程序向上完全兼容Linux协议栈的IPsec标准卸载软件XFRM接口和DPDK(Intel Data Plane Development Kit)的rte_security库中的标准卸载接口,从而IPSec卸载的即插即用,无需额外任何其它工作。
(2)有效提升了IPSec加解密的卸载性能。
(3)能够适用于多种应用场景,极具实用性。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明的IPSec加解密卸载方法基于智能网卡实现IPSec加解密的高性能卸载,且能够实现IPSec卸载的即插即用,无需额外任何其它工作,极具实用性。
如图1所示,于一实施例中,本发明的IPSec加解密卸载方法包括以下步骤。
步骤S1、构建智能网卡的驱动程序,基于所述驱动程序提供安全联盟至所述智能网卡,获取IPSec报文并设置所述IPSec报文的元数据。
具体地,如图2所示,所述驱动程序包括上下文管理单元、安全联盟(SA)管理单元和报文管理单元。所述安全联盟管理单元用于获取并存储所述安全联盟;所述上下文管理单元用于提供所述安全联盟至所述智能网卡;所述报文管理单元用于获取IPSec报文并设置IPSec报文的元数据。
具体地,所述SA管理单元缓存SA数据并将其转换成所述在智能网卡中的SA存储格式,以便于后续直接卸载到所述智能网卡中。卸载到所述智能网卡的SA包含的参数如表1所示,但不限于表1所示。
表1、SA参数
于本发明一实施例中,所述安全联盟管理单元获取所述安全联盟通过以下任一方式。
1)基于用户主机设置所述安全联盟到Linux内核XFRM模块,基于所述XFRM模块将安全联盟经由所述上下文管理单元传送至所述安全联盟单元。
具体地,本发明基于Linux网络协议栈中XFRM模块的IPsec卸载标准接口structxfrmdev_ops完成,其中Linux内核版本不小于5.0,较低版本的Linux内核不支持xfrmdev卸载架构,需安装xfrmdev卸载。如图2的步骤100所示,用户通过IKE(Internet KeyExchange,Internet密钥交换)协商的应用demo(如strongSwan等)协商出SA,并将SP(Security Policy)和SA发送到内核XFRM模块。如步骤103和步骤112所示,所述XFRM模块再将SA经由所述上下文管理单元传送至所述安全联盟单元。
2)在Linux用户态基于iproute2套件手动设置安全联盟到Linux内核XFRM模块,基于所述XFRM模块将安全联盟经由所述上下文管理单元传送至所述安全联盟单元。
具体地,如图2的步骤101所示,在Linux用户态也可以直接通过iproute2工具中的xfrm命令手动设置SP和SA)到内核XFRM模块,无需通过IKE协商。如步骤103和步骤112所示,所述XFRM模块再将SA经由所述上下文管理单元传送至所述安全联盟单元。
3)在Linux用户态基于调试工具针对网络接口直接配置所述安全联盟至所述安全联盟管理单元。
具体地,如步骤102所示,本发明通过调试工具,在Linux用户态通过调用ioctl可以针对网络接口,如PF((Physical Function)接口、VF(Virtual Function)接口,直接配置SA到所述安全联盟单元,无需XFRM协议栈的参与,从而大大简化了配置调试流程。
所述上下文管理单元适配Linux协议栈接口,能够向上提供xfrmdev_ops的标准回调接口,包括添加SA接口(xdo_dev_state_add)、删除SA接口(xdo_dev_state_delete)、释放SA接口(xdo_dev_state_free)以及卸载功能是否可用接口(xdo_dev_offload_ok);同时适配NIC配置接口,能够向下通过PCIe通道将SA写入到所述智能网卡中。
所述报文管理单元在获取IPSec报文后,负责针对每个需要加密的IPSec报文设置元数据(metadata数据),以基于所述metadata数据告知所述智能网卡的IPSec协议处理单元所述IPSec报文需要进行IPSec协议的相关处理。在Linux内核中以skb结构存放报文数据的方式下,metadata数据可以放在skb的data数据区前面。在本发明中,所述IPsec报文分为两个方向,从本地主机(host)空间发出去的报文需要加密,从物理链路(line)上收到的报文需要解密。如图3所示,当所述报文管理单元需要从host空间发送加密后的IPSec报文时,所述metadata数据包括IPSec报文标识(ipsec flag)、安全联盟索引(Index)和防攻击序列号(Extended Sequence Number,ESN),也可包含其它更多数据。其中,所述IPSec报文标识用于标识该报文是IPSec协议报文。当所述报文管理单元需要把解密后的IPSec报文发送到host空间时,所述metadata数据包括PSec报文标识(ipsec flag)、安全联盟索引(Index)和解密成功失败结果(result),也可以包含其它更多数据。host空间内核协议栈可以根据解密成功失败结果进行相关处理。
步骤S2、在所述智能网卡上设置网卡微引擎,基于所述网卡微引擎接收所述IPSec报文、所述元数据和所述安全联盟,根据所述元数据获取所述IPSec报文对应的安全联盟,基于所述安全联盟对所述IPSec报文进行加解密。
具体地,如图2所示,所述网卡微引擎包括配置管理单元、IPSec协议处理单元和加解密引擎管理单元。所述配置管理单元用于从所述驱动程序中卸载并存储所述安全联盟。所述IPSec协议处理单元用于接收所述IPSec报文和所述元数据,根据所述元数据从所述配置管理单元获取所述IPSec报文对应的安全联盟。所述加解密引擎管理单元基于所述安全联盟对所述IPSec报文进行加解密。
为了提升IPSec协议处理性能,本发明将在Linux协议栈完成的IPSec协议相关的部分处理也卸载到所述IPSec协议处理单元中完成,支持的卸载内容主要包括ESP头的封装解封装和隧道模式的封装解封装。如表1中SA参数的描述,SA中的参数mode表示匹配该条SA的IPSec会话是隧道模式封装或解封装还是传输模式,SA中的参数Offload_type表示匹配该条SA的IPSec会话是否需要进行ESP头部封装或解封装。当需要加解密的报文进入IPSec协议处理单元,会根据匹配到的SA中的上述参数进行相应的封装和解封装。
为了加速所述网卡微引擎针对SA的搜索匹配性能,本发明在加密路径和解密路径上针对SA搜索匹配提出了差异化处理机制。由于SP和SA的搜索匹配在Linux XFRM协议栈已经完成,故在卸载SA时将SA在内核XFRM模块中的内存handle映射成Index,作为存储在所述配置管理单元的SAD数据库中的索引号。当从host空间发送需要加密的IPsec报文时,所述IPSec协议处理单元直接根据所述索引号Index查找对应的SA而无需根据SPI、源和目的地址等相关参数匹配检索加密需要的SA。
为了降低业务层面复杂度,SA无需指明其用于加密或者解密。通常情况下,向外发送的报文需要加密,向内接收的报文需要解密。所述IPSec协议处理单元能够确定所接收的报文是从host空间发送过来的还是从line接收到的。如果是从host空间发送出去的报文,所述IPSec协议处理单元设置其匹配的SA用于加密;如果是从line接收到的报文,所述IPSec协议处理单元设置其匹配的SA用于解密。
为了高速访问内存,本发明中的加解密和鉴权认证等硬件运算的数据都放在SRAM中运行,而IPSec报文存储在DRAM中。故如图4所示,本发明的加解密引擎管理单元包括DMA输入模块41、SRAM42、加解密模块43和DMA输出模块44。所述DMA输入模块41将位于DRAM中的IPSec报文基于DMA方式传送至所述SRAM42;所述加解密模块43读取所述SRAM42中的IPSec报文进行硬件的加解密,并将加解密后的IPSec报文存储至所述SRAM42;所述DMA输出模块用于将所述加解密后的IPSec报文基于DMA方式传送至所述DRAM。
优选地,所述DMA输入模块、所述SRAM、所述加解密模块和所述DMA输出模块采用并行处理模式,从而最大化运算数据的吞吐量。例如,当第N个包在加解密引擎上处理时,第N+1个需要被加解密的包能被DMA输入模块从DRAM拷贝到SRAM,同时第N-1个已经被加解密的包能被DMA输出模块从SRAM拷贝到DRAM。更进一步的,SRAM上可以根据需要调整缓存数据包的个数以适配所述加解密模块的运算效率。
下面具体阐述一下本发明的IPSec加解密的流程。
当需要从host空间发送IPsec报文时,Linux的XFRM模块完成IPSec的协议处理并设置skb中的struct xfrm_offload数据结构,以此告知驱动程序所述skb报文需要IPSec的卸载处理,如图2中的步骤105所示。所述报文管理单元获取struct xfrm_offload数据结构中的相关信息,生成metada数据并放置到skb原始数据区的最前面,如图3中skb->data所示。其中ipsec_flag用于告知所述智能网卡所述IPSec报文需要IPSec加密或封装处理。所述智能网卡可以根据ipsec_flag按IPSec协议的metadata数据获取对应参数信息,MAC+IP即为需要发送的IPSec报文的原始数据。如图2的步骤111所示,所述报文管理单元通过DMA拷贝所述IPSec报文和所述metadata数据到所述智能网卡的TX发送报文单元。
TX报文发送单元通过图2中的步骤124把所述IPSec报文和所述metadata数据发送至IPSec协议处理单元。所述IPSec协议处理单元根据所述metadata数据判断是否为IPSec报文。若不是IPSec报文,则直接进入步骤121将报文发送出去;若是IPSec报文,从所述metada数据中获取SA的索引值,通过步骤122从所述配置管理单元中的SAD数据库中直接获取对应的SA,并在完成IPSec的相关协议处理后(如隧道模式封装等)通过步骤123送到所述加解密引擎管理单元进行硬件加密,加密后的IPSec报文通过步骤126进入TX报文发送单元,从而将加密后的IPSec报文发送出所述智能网卡。
当所述智能网卡从line上接收到一个IPSec报文时,如图2中的步骤120,RX接收报文单元直接将所述IPSec报文通过步骤125传送至所述IPSec协议处理单元。所述IPSec协议处理单元首先解析该报文是否为ESP或者UDP封装的ESP协议报文。如果不是ESP协议封装报文,则直接跳过所述IPSec协议单元处理。如果解析后的报文是ESP协议报文,则需要使用报文中的SPI索引号、源和目的IP地址作为检索关键字搜索对应的SA。所述IPSec协议处理单元使用SA中的相关参数完成IPSec协议处理,主要是ESP头解封装或者隧道解封装,然后把该报文通过图2中的步骤123送入所述加解密引擎管理单元。所述加解密引擎管理单元使用该SA执行硬件解密操作,根据解密是否成功的结果,设置metadata数据中result,并把解密后的报文通过图2中的步骤127送入RX接收报文单元,RX接收报文单元通过步骤110把解密后的数据报文DMA到hos空间。驱动程序的报文管理单元收到解密后的报文后,获取metadata数据中的相关信息并将其从skb剥离,然后将解密的result告知Linux协议栈,Linux的XFRM模块根据该结果进行相关的fallback处理。
需要说明的是,尽管SA被整体卸载到网卡,SA的管理如添加、删除和秘钥更新仍然在Linux用户态的业务层维护全部控制。更进一步的,基于SA的加解密字节数限制和SA的老化时间也都有业务或协议栈实现软限制。但是,在本发明中还将进行基于SA的报文字节数和SA的老化时间相关的卸载,将软限制的丢包卸载到所述智能网卡硬限制中完成,从而提升SA丢包的处理性能。
当某条SA被卸载到所述智能网卡时,所述IPSec协议处理单元中启动更新机制。具体地,基于所述网卡微引擎对所述安全联盟进行更新包括以下步骤。
1)当需要对IPSec报文进行加解密时,获取所述安全联盟的生存时长。具体地,每秒定时更新累加SA的生存时长,将累加的生存时场设置为当前生存时长。
2)当所述生存时长大于老化时间阈值时,所述网卡自动丢弃所述IPSec报文。
3)当所述生存时长不大于所述老化时间阈值时,将所述IPSec报文的数据长度累加至报文字节总数;若所述报文字节总数大于报文字节数阈值,所述网卡自动丢弃所述IPSec报文,设置所述安全联盟为无效状态并获取更新的安全联盟,否则基于所述安全联盟进行所述IPSec报文的加解密。
其中,上述丢弃报文行为及报文统计并不上载到host空间,但本发明通过调试工具可以从安全联盟管理单元直接读取每个SA因为字节数限制和老化时间限制丢弃的报文数量。通常情况下,这种硬限制特性应该和软限制配合工作,以便host空间能够根据实时状况做出对应的SA更新调整。
秘钥更新的主要原因是SA达到了生命周期或者业务层面认为需要更新。卸载到所述智能网卡的SA没有更新生存周期的机制,所以秘钥更新完全有上层管理控制。根据IKE协议的规范,应该在SA老化时间的50%的情况下更新SA,也就是说硬限制阈值理论上是软限制阈值的两倍。考虑到SA在客户端和服务器的一致性,当需要更新一个SA时,需要旧的SA和新的SA并存一段时间,以允许双方完全处理在网络中或者收发包队里中的报文加解密。因此,所述网卡无条件保存所有卸载的SA直到业务应用删除为止,业务应用在更新一个SA之后,应允许原来老的SA存活一段时间后再从网卡中删除掉。
综上所述,本发明的IPSec加解密卸载方法通过在智能网卡驱动程序中嵌入IPSec协议卸载相关的上下文管理、安全联盟(SA)管理和报文管理驱动单元,在网卡微引擎中嵌入配置管理、IPSec协议处理和加解密引擎管理等微引擎处理单元,完成一套IPSec的卸载和加解密系统,该系统的驱动模块程序向上完全兼容Linux协议栈的IPsec标准卸载软件XFRM接口和DPDK的rte_security库中的标准卸载接口,从而IPSec卸载的即插即用,无需额外任何其它工作;有效提升了IPSec加解密的卸载性能;能够适用于多种应用场景,极具实用性。因此,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。