一种基于XTS-SM4的存储加解密方法及装置与流程

文档序号:12133483阅读:733来源:国知局
一种基于XTS-SM4的存储加解密方法及装置与流程

本发明涉及信息安全技术和存储加密技术领域,尤其涉及一种基于XTS-SM4的存储加解密方法及装置。



背景技术:

互联网技术发展改变了我们和世界的交互方式,电子商务、网上银行、电子政务等信息技术给我们的生活提供极大方便的同时,也使信息安全技术显得尤为重要。密码算法在保证信息的安全性、完整性和不可抵赖性方面起着极其重要的作用。密码算法本土化是保证信息安全技术自主性的基础。SM4是国内官方公布的第一个商用密码算法。SM4是一种分组对称密码算法,分组长度和密钥长度都为128比特。

目前市场上针对安全通讯、安全存储的加解密设备主要采用软件实现。软件加密方式安全度低,容易被攻破,速度慢且消耗大量中央处理器(Central Processing Unit,CPU)资源,无法满足大数据时代对数据存取量大、速度快、安全度高的要求,进而不能适应银行系统、军事领域等高端涉密系统的要求。而采用硬件实现的加解密设备,速度较低,且需要CPU干涉较多,不满足大数据时代对存储加解密设备的要求。

现有的国密SM4算法的实现,大多是在减少资源和降低功耗上做文章,便于在集成电路上实现,性能较差。速度较快的一般采用多引擎方式实现电码本(Electronic Codebook,ECB)模式SM4算法,需要等待密钥扩展完成后才能开始,延时较大,安全性能差,存在可能对明文主动攻击的风险。另一个缺点是需要CPU干预较多,不能主动读写数据,完全靠CPU写入待处理数据,处理后的数据再由CPU读出,很容易导致SM4算法处理模块空闲或报文积压影响性能,造成CPU资源消耗较大且性能较差。

密文窃取可调加密模式SM4算法(简称XTS-SM4算法),使用两个SM4 密钥。其中一个用于执行SM4分组加密;另一个用于加密“调整值”。这种加密调整借助伽罗华域乘法和异或运算得到进一步扩散,确保数据相同的分组不会产生相同的密码文本。明文文本都会使用两个独立的密钥进行双重加密,逆向执行此流程即可实现数据解密,因各个分组相互独立没有链接,因此可以采用并行运算,如果存储的密码数据受损并崩溃,则只有特定分组的数据不可恢复,不会影响其它分组数据。和ECB模式相比,安全性得到大大提高,但需要进行2次SM4加密和伽罗华域乘法操作,特别是伽罗华域乘法需要进行128阶矩阵乘法,通常是系统性能的瓶颈。



技术实现要素:

本发明实施例的目的在于提供一种基于XTS-SM4的存储加解密方法及装置,可以解决存储加密系统延时长、带宽低问题,同时可降低CPU在存储加解密过程中资源消耗,提高系统的性能。

本发明实施例提供一种基于XTS-SM4的存储加解密方法,应用于一可编程逻辑器件的接收端,所述方法包括:

接收包含发送缓冲区描述符BD环的读指针和写指针的配置信息,其中所述读指针是软件初始配置的,所述写指针是有数据需要处理时,软件写BD信息后更新为指向当前BD的下一个BD首地址,所述BD信息包括待处理数据报文的相关信息、XTS-SM4加解密信息以及下一个BD的首地址信息;

在发送BD环的读指针与写指针不一致时,读取以所述读指针指向的当前BD的BD信息,根据所述BD信息读取待处理数据报文以及XTS-SM4加解密信息,并进行基于XTS-SM4的加解密处理;

在所述待处理数据报文读取完成后,将所述读指针更新为指向当前BD的下一个BD首地址。

其中,在所述待处理数据报文读取完成后,所述方法还包括:

回写当前BD的完成标志位和错误标志位。

其中,所述根据所述BD信息读取待处理数据报文以及XTS-SM4加解密信息,并进行基于XTS-SM4的加解密处理,包括:

根据所述待处理数据报文的相关信息读取待处理数据报文;

获取所述XTS-SM4加解密信息中的加解密模式、密钥Key1、密钥Key2和调整值Icfg;

对所述Key1和所述Key2同时进行密钥扩展,分别获取与所述Key1对应的多个第一扩展密钥和与所述Key2对应的多个第二扩展密钥;

根据多个所述第二扩展密钥对所述Icfg进行加密,得到加密结果Icfg_enc;

将所述待处理数据报文按照每128bit为一组进行分组,并对每组增加8bit的数据进行编号,其中8bit数据为与128bit数据合并后的合并数据中的高8位;

对所述Icfg_enc和aj进行伽罗华域GF(2128)乘法计算得到计算结果Tj;

根据所述加解密模式获取加解密指示信号mode_sel,当所述mode_sel代表加密指示信号时,对所述Tj和明文文本进行异或后的结果根据多个所述第一扩展密钥进行加密处理;当所述mode_sel代表解密指示信号时,对密文文本和所述Tj异或后的结果根据多个所述第一扩展密钥进行解密处理;

将所述Tj和对应数据在多个所述第一扩展密钥作用下的加解密的结果进行异或,得到加解密结果。

其中,所述对所述Icfg_enc和aj进行伽罗华域GF(2128)乘法计算得到计算结果Tj,具体包括:

从当前数据的高8位中获取j值,其中j为128bit分组数据在当前数据报文中的位置;

当j等于0时,T0=Icfg_enc;

当j不等于0时,包括:

当Tj-1的127比特位Tj-1[127]为0时,Tj等于Tj-1左移一位;

当Tj-1的127比特位Tj-1[127]为不为0时,将Tj-1左移一位后再将其低8位与十六进制数87进行异或运算得到Tj。

本发明实施例还提供一种基于XTS-SM4的存储加解密方法,应用于一可编程逻辑器件,所述方法包括:

接收包含接收缓冲区描述符BD环的读指针和写指针的配置信息;

在接收BD环的读指针与写指针不一致时,读取以所述读指针指向的当前BD的BD信息,对所述BD信息进行解析,获取对应数据缓存区的地址信息 以及下一个BD的首地址信息;

将经过加解密处理后的数据报文写入对应数据缓存区中,并将接收BD环的读指针更新为指向当前BD的下一个BD首地址。

其中,所述将经过加解密处理后的数据报文写入对应数据缓存区中,包括:

获取对应数据缓存区的地址信息中的首地址信息SystemAddr和数据缓存区大小信息RSVByteCnt;

将经过加解密处理后的数据报文的长度与所述RSVByteCnt进行比较;

当经过加解密处理后的数据报文的长度小于等于所述RSVByteCnt,将经过加解密处理后的数据报文写入首地址为SystemAddr的数据缓存区中;

当经过加解密处理后的数据报文的长度大于所述RSVByteCnt,在首地址为SystemAddr的数据缓存区中写入所述RSVByteCnt长度的数据,将经过加解密处理后的数据报文中的其余数据存到当前BD的下一个BD首地址对应的数据缓存区中。

其中,所述将经过加解密处理后的数据报文写入对应数据缓存区中之后,所述方法还包括:

回写当前BD的完成标志位和当前BD对应数据缓存区的数据信息。

本发明实施例还提供一种基于XTS-SM4的存储加解密装置,应用于一可编程逻辑器件,所述装置包括:

第一接收模块,用于接收包含发送缓冲区描述符BD环的读指针和写指针的配置信息,其中所述读指针是软件初始配置的,所述写指针是有数据需要处理时,软件写BD信息后更新为指向当前BD的下一个BD首地址,所述BD信息包括待处理数据报文的相关信息、XTS-SM4加解密信息以及下一个BD的首地址信息;

读取处理模块,用于在发送BD环的读指针与写指针不一致时,读取以所述读指针指向的当前BD的BD信息,根据所述BD信息读取待处理数据报文以及XTS-SM4加解密信息,并进行基于XTS-SM4的加解密处理;

更新模块,用于在所述待处理数据报文读取完成后,将所述读指针更新为指向当前BD的下一个BD首地址。

其中,所述装置还包括:

第一回写模块,用于在所述待处理数据报文读取完成后,回写当前BD的完成标志位和错误标志位。

其中,所述读取处理模块包括:

第一子模块,用于根据所述待处理数据报文的相关信息读取待处理数据报文;

第二子模块,用于获取所述XTS-SM4加解密信息中的加解密模式、密钥Key1、密钥Key2和调整值Icfg;

第三子模块,用于对所述Key1和所述Key2同时进行密钥扩展,分别获取与所述Key1对应的多个第一扩展密钥和与所述Key2对应的多个第二扩展密钥;

第四子模块,用于根据多个所述第二扩展密钥对所述Icfg进行加密,得到加密结果Icfg_enc;

第五子模块,用于将所述待处理数据报文按照每128bit为一组为一组进行分组,并对每组增加8bit的数据进行编号,其中8bit数据为与128bit数据合并后的合并数据中的高8位;

第六子模块,用于对所述Icfg_enc和aj进行伽罗华域GF(2128)乘法计算得到计算结果Tj;

第七子模块,用于根据所述加解密模式获取加解密指示信号mode_sel,当所述mode_sel代表加密指示信号时,对所述Tj和明文文本进行异或后的结果根据多个所述第一扩展密钥进行加密处理;当所述mode_sel代表解密指示信号时,对密文文本和所述Tj异或后的结果根据多个所述第一扩展密钥进行解密处理;

第八子模块,用于将所述Tj和对应数据在多个所述第一扩展密钥作用下的加解密的结果进行异或,得到加解密结果。

其中,所述第六子模块进一步用于:

从当前数据的高8位中获取j值,其中j为128bit分组数据在当前数据报文中的位置;

当j等于0时,T0=Icfg_enc;

当j不等于0时,包括:

当Tj-1的127比特位Tj-1[127]为0时,Tj等于Tj-1左移一位;

当Tj-1的127比特位Tj-1[127]为不为0时,将Tj-1左移一位后再将其低8位与十六进制数87进行异或运算得到Tj。

本发明实施例还提供一种基于XTS-SM4的存储加解密装置,应用于一可编程逻辑器件,所述装置包括:

第二接收模块,用于接收包含接收缓冲区描述符BD环的读指针和写指针的配置信息;

读取解析模块,用于在接收BD环的读指针与写指针不一致时,读取以所述读指针指向的当前BD的BD信息,对所述BD信息进行解析,获取对应数据缓存区的地址信息以及下一个BD的首地址信息;

写入接收模块,用于将经过加解密处理后的数据报文写入对应数据缓存区中,并将接收BD环的读指针更新为指向当前BD的下一个BD首地址。

其中,所述写入接收模块包括:

获取子模块,用于获取对应数据缓存区的地址信息中的首地址信息SystemAddr和数据缓存区大小信息RSVByteCnt;

比较子模块,用于将经过加解密处理后的数据报文的长度与所述RSVByteCnt进行比较;

第一写入子模块,用于当经过加解密处理后的数据报文的长度小于等于所述RSVByteCnt,将经过加解密处理后的数据报文写入首地址为SystemAddr的数据缓存区中;

第二写入子模块,用于当经过加解密处理后的数据报文的长度大于所述RSVByteCnt,在首地址为SystemAddr的数据缓存区中写入所述RSVByteCnt长度的数据,将经过加解密处理后的数据报文中的其余数据存到当前BD的下一个BD首地址对应的数据缓存区中。

其中,所述装置还包括:

第二回写模块,用于所述写入接收模块将经过加解密处理后的数据报文写入对应数据缓存区中之后,回写当前BD的完成标志位和当前BD对应数据缓存区的数据信息。

本发明的上述技术方案的有益效果如下:

通过并行处理技术将算法迭代全展开,解决存储加密系统延时长、带宽低的问题。通过FPGA实现主动级联读写功能,有效解决了采用SM4算法空闲或报文积压问题,有效降低CPU在加解密系统中的资源消耗;FPGA通过DMA读操作,使BD信息和待处理的数据送入FPGA,经解析送到XTS-SM4处理,处理之后的数据,通过PCIe DMA写操作送给对应的系统缓存区,两方向处理相互独立,互不影响,可以同时并行处理,大大提高性能。

附图说明

图1为本发明实施例基于XTS-SM4的存储加解密方法步骤示意图一;

图2为本发明实施例发送BD环示意图;

图3为本发明实施例XTS-SM4算法实现示意图;

图4为本发明实施例加密算法流程图;

图5为本发明实施例解密算法流程图;

图6为本发明实施例基于XTS-SM4的存储加解密方法步骤整体示意图一;

图7为本发明实施例基于XTS-SM4的存储加解密方法步骤示意图二;

图8为本发明实施例接收BD环示意图;

图9为本发明实施例基于XTS-SM4的存储加解密方法步骤整体示意图二;

图10为本发明实施例数据报文传输路径示意图。

具体实施方式

为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。

本发明实施例提供一种基于XTS-SM4的存储加解密方法,应用于一可编程逻辑器件,如图1所示,所述方法包括:

步骤S101、接收包含发送缓冲区描述符BD环的读指针和写指针的配置信息,其中所述读指针是软件初始配置的,所述写指针是有数据需要处理时,软件写BD信息后更新为指向当前BD的下一个BD首地址,所述BD信息包括待处理数据报文的相关信息、XTS-SM4加解密信息以及下一个BD的首地址信息;

步骤S102、在发送BD环的读指针与写指针不一致时,读取以所述读指针指向的当前BD的BD信息,根据所述BD信息读取待处理数据报文以及XTS-SM4加解密信息,并进行基于XTS-SM4的加解密处理;

步骤S103、在所述待处理数据报文读取完成后,将所述读指针更新为指向当前BD的下一个BD首地址。

具体的,通过软件驱动配置好S2C方向的发送BD(Buffer Descriptor)环,通过PCIe(PCI Express)接口接收发送BD环的读指针s2c_rd_ptr和写指针s2c_wr_ptr,其中s2c_rd_ptr是软件初始配置的,s2c_wr_ptr为更新后的。具体的,当有数据需要加解密处理时,利用软件配置来写当前BD的BD信息,BD信息包含待处理数据缓存区的首地址SystemAddr、包头SOP、包尾EOP、长度ByteCnt、加解密模式、调整值Icfg、密钥Key1、Key2及下一个BD的首地址信息。利用软件写完当前BD的BD信息后,更新写指针s2c_wr_ptr指向下一个相邻BD的首地址。然后可编程逻辑器件(Field-Programmable Gate Array,FPGA)通过PCIe口接收初始设置的读指针和更新后的写指针。同时需要配置FPGA内部直接内存存取(DMA)使能控制寄存器。如图2所示,为发送BD环示意图,其中发送BD环包含的内容如表1所示:

表1

发送BD环的读指针和写指针最初指向同一个BD的首地址,在经过软件配置来写当前BD的BD信息且对写指针进行更新后,比较读指针和写指针,此时由于读指针为初始配置状态,写指针为更新后的状态,两者所指向的是不同BD的首地址,FPGA主动读取以读指针为首地址的当前BD的BD信息。

FPGA通过DMA方式主动读取以s2c_rd_ptr为首地址的当前BD的BD信息,通过解析其内容,获取待处理数据报文的相关信息,包括首地址SystemAddr、包头SOP、包尾EOP、长度ByteCnt,读取待处理报文,并获取XTS-SM4加解密信息,包括加解密模式、调整值Icfg、密钥Key1、密钥Key2信息,对待处理数据报文进行基于XTS-SM4的加解密处理。

在读取待处理数据报文后,将s2c_rd_ptr进行更新,更新为下一BD的首地址,对当前BD进行相关处理后,转入下一次的操作。判断DMA使能控制寄存器的值是否为1,当确定DMA使能控制寄存器的值为1时,判断此时的读指针与写指针是否相同,当读指针和写指针分别指向不同BD的首地址时,继续执行步骤S102和步骤S103。当读指针和写指针指向相同BD的首地址时,重新判断DMA使能控制寄存器的值是否为1。

需要说明的是,读指针的更新是由FPGA来操作完成的,写指针的更新是由软件配置完成的,两者之间相互独立,并行处理。当FPGA将待处理数据报文读入后,更新读指针指向当前BD的下一个BD首地址。当有待处理的数据时,软件将待处理数据的相关信息写入当前写指针对应的BD中,更新写指针指向当前BD的下一个BD首地址。

可编程逻辑器件可以是CPLD(Complex Programmable Logic Device)、FPGA以及特定用途集成电路(Application Specific Integrated Circuit,ASIC) 等形式的硬件器件,本发明实施例是利用FPGA实现的,DMA、XTS-SM4功能都是基于硬件描述语言Verilog完成的,可以通过ASIC芯片实现,有很好的灵活性和可扩展性。目前大多数的服务器和存储系统都是基于Intel平台的,因此可以将FPGA或者ASIC芯片放到电路板上做成PCIe插卡,直接插到服务器或者存储系统中实现存储加解密,还可以将FPGA或者ASIC芯片直接挂接在CPU的PCIe总线下或者PCIe桥接芯片下面,和存储系统融为一个整体。

在本发明上述实施例中,在所述待处理数据报文读取完成后,所述方法还包括:

回写当前BD的完成标志位和错误标志位。

具体的,FPGA读取待处理数据报文后,将读指针更新为下一BD的首地址,将当前BD的完成标志位CMP置1,并根据数据校验是否有误,置相应的错误标志位,通过PCIe回写当前BD。然后进行下一次操作。

在FPGA通过PCIe回写当前BD后,软件驱动检测到当前BD的完成标志位和错误标志位信息,清除完成标志位,释放当前BD及数据报文对应的缓存区,以便重复利用,当检测到错误标志时,考虑进行重传机制。具体的,在BD中含有DMA数据传输过程中的错误信息标志位,例如传输校验错误,BD中的数据长度ByteCnt信息与实际传输的数据长度不一致等错误信息。驱动软件可以通过读取这些信息,决定是否重传相关数据,同时也方便定位问题。

在本发明上述实施例中,所述根据所述BD信息读取待处理数据报文以及XTS-SM4加解密信息,并进行基于XTS-SM4的加解密处理,如图3所示,包括:

根据所述待处理数据报文的相关信息读取待处理数据报文;

获取所述XTS-SM4加解密信息中的加解密模式、密钥Key1、密钥Key2和调整值Icfg;

对所述Key1和所述Key2同时进行密钥扩展,分别获取与所述Key1对应的多个第一扩展密钥和与所述Key2对应的多个第二扩展密钥;

根据多个所述第二扩展密钥对所述Icfg进行加密,得到加密结果Icfg_enc;

将所述待处理数据报文按照每128bit为一组进行分组,并对每组增加8bit的数据进行编号,其中8bit数据为与128bit数据合并后的合并数据中的高8 位;

对所述Icfg_enc和aj进行伽罗华域GF(2128)乘法计算得到计算结果Tj;

根据所述加解密模式获取加解密指示信号mode_sel,当所述mode_sel代表加密指示信号时,对所述Tj和明文文本进行异或后的结果根据多个所述第一扩展密钥进行加密处理;当所述mode_sel代表解密指示信号时,对密文文本和所述Tj异或后的结果根据多个所述第一扩展密钥进行解密处理;

将所述Tj和对应数据在多个所述第一扩展密钥作用下的加解密的结果进行异或,得到加解密结果。

具体的,获取待处理数据报文首地址SystemAddr、包头SOP、包尾EOP、长度ByteCnt,读取待处理数据报文,获取XTS-SM4加解密信息中的加解密模式、密钥Key1、密钥Key2和调整值Icfg。如图3所示,将Key2进行密钥扩展,执行32次,每执行获取一个第二扩展密钥,对调整值Icfg进行加密采用32级流水线,32个周期后获取调整值Icfg加密结果Icfg_enc。将输入的需要加密的数据,按照每128bit为一组进行分组,并对分组后的数据与8bit数据进行合并,其中8bit数据为合并数据中的高8位,同时采用8bit数据对128bit数据进行编号,高8位为低128bit数据在磁盘扇区中的位置。

进行Key2密钥扩展的同时,需要进行Key1密钥扩展,执行32次,每执行获取一个第一扩展密钥,将Key1的扩展密钥保存在Key1_rk0~Key1_rk3132个寄存器中。Key1的密钥扩展提前到和调整值Icfg的SM4加密同时进行,大大缩短了解密延时,缩短延时32个周期。因解密需要先用第32轮的扩展密钥Key1_rk31,对Key1的密钥扩展已经提前计算,并将Key1_rk0~Key1_rk31保存在寄存器中,因此对解密不需要等待,立即可以进行解密操作。

如图4和图5所示,调整值Icfg在Key2密钥作用下经过SM4加密的结果Icfg_enc和aj进行GF(2128)乘法,采用一次一位和一次异或即可。获得Tj。接收输入的加解密指示信号mode_sel,当指示信号mode_sel为0时,如图4所示,对明文文本Plaintext和Tj异或后的结果根据多个第一扩展密钥进行加密。当指示信号mode_sel为1时,如图5所示,对密文文本Ciphertext和Tj异或后的结果根据多个第一扩展密钥进行解密。

如图4所示,最后将Tj和对应数据在Key1密钥作用下的加密结果进行异 或,即为最后的加密结果。如图5所示,将Tj和对应数据在Key1密钥作用下的解密结果进行异或,即为最后的解密结果。因加解密需要32个周期,对Tj也进行32个周期延时,Tj_buf0~Tj_buf31为32个寄存器。因加解密采用32级流水线,流水线一旦建立每个周期都可以处理一个128bit数据块。根据调整值Icfg的加密单元、明文数据的加密单元及密文数据的解密单元基本相同且不同时进行处理的特点,只例化一个单元,根据选择控制进行分时复用,即图3中矩形框①①①是分时复用的,在FPGA内部是一个单元,使加解密单元占用的FPGA的资源减少为原来的1/3。经过加解密处理之后的数据存到先入先出队列(First Input First Output,FIFO)中,取出FIFO中的数据通过PCIe DMA写到数据存储区中。

在本发明上述实施例中,所述对所述Icfg_enc和aj进行伽罗华域GF(2128)乘法计算得到计算结果Tj,具体包括:

从当前数据的高8位中获取j值,其中j为128bit分组数据在当前数据报文中的位置;

当j等于0时,T0=Icfg_enc;

当j不等于0时,包括:

当Tj-1的127比特位Tj-1[127]为0时,Tj等于Tj-1左移一位;

当Tj-1的127比特位Tj-1[127]为不为0时,将Tj-1左移一位后再将其低8位与十六进制数87进行异或运算得到Tj。

如图3所示,从FPGA内部FIFO中读取136bit数据(包含8位j值和128位数据)获取j值。当j等于0时,T0=Icfg_enc;当j不等于0时,分两种情况:当Tj-1的127比特位Tj-1[127]为0时,Tj等于Tj-1左移一位;当Tj-1的127比特位Tj-1[127]为不为0时,将Tj-1左移一位后再将其低8位与十六进制数87进行异或结果即为Tj。

需要说明的是,FPGA通过解析S2C方向的BD的内容,通过比较相邻的Key2、Key1、Icfg值来决定是否执行密钥扩展和调整值加密功能。Key1不同执行Key1密钥扩展;Key2不同执行Key2密钥扩展;Key2和Icfg任意一个不一致,需要执行Icfg加密功能。

较佳的,FPGA可以一次通过级联方式一次读取多个BD,一次获取多个 BD对应的信息,进行多个BD对应数据缓存区的顺序读写,读写完成后,一次进行多个BD的级联更新,来提高效率。

优选的,通过解决现有技术中实现XTS-SM4算法中存在的GF(2128)乘法运算需要复杂的运算问题,将复杂的GF(2128)乘法运算结合XTS-SM4算法的实际特点,转化为一次移位和一次异或运算,大大节省了FPGA资源提高了性能,消除了伽罗华域乘法引起的性能瓶颈。

本发明实施例发送方向的整体流程,如图6所示:

软件驱动配置发送BD环;

软件驱动配置发送BD环写指针s2c_wr_ptr、读指针s2c_rd_ptr及DMA使能控制寄存器;

判断DMA使能控制寄存器值是否为1;

当DMA使能控制寄存器值为1时,判断s2c_wr_ptr!=s2c_rd_ptr&&s2c_rd_ptr!=0是否成立;当DMA使能控制寄存器值不为1时,停留在此继续等待;

当s2c_wr_ptr、s2c_rd_ptr满足条件,FPGA发起DMA读操作,获取s2c_rd_ptr为首地址当前BD的BD信息,解析当前BD的内容获取密钥、Icfg等信息,并将密钥、Icfg进行处理;当s2c_wr_ptr、s2c_rd_ptr不满足条件,转到重新判断DMA使能控制寄存器值是否为1的步骤;

FPGA发起以SystemAddr为首地址、ByteCnt为长度的DMA读操作,获取待处理的数据,并将待处理数据报文进行加解密;

判断DMA读操作是否完成;

当DMA读操作完成,FPGA将当前的s2c_rd_ptr更新为下一BD的首地址;否则继续进行DMA读操作;

回写当前BD中的完成标志位、错误标志位后,进行下一次操作;

在回写当前BD中的完成标志位、错误标志位后,软件驱动清除完成标志位,释放当前BD及数据报文对应的缓存区,当检测到错误标志时,考虑进行重传机制。

本发明实施例还提供一种基于XTS-SM4的存储加解密方法,应用于一可编程逻辑器件,如图7所示,所述方法包括:

步骤S201、接收包含接收缓冲区描述符BD环的读指针和写指针的配置信息;

步骤S202、在接收BD环的读指针与写指针不一致时,读取以所述读指针指向的当前BD的BD信息,对所述BD信息进行解析,获取对应数据缓存区的地址信息以及下一个BD的首地址信息;

步骤S203、将经过加解密处理后的数据报文写入对应数据缓存区中,并将接收BD环的读指针更新为指向当前BD的下一个BD首地址。

具体的,软件驱动配置好C2S方向的接收BD环,通过PCIe接口接收接收BD环的写指针c2s_wr_ptr和读指针c2s_rd_ptr。如图8所示,为接收BD环示意图,其中接收BD环包含的内容如表2所示:

表2

具体的,在读取以读指针指向的当前BD的BD信息之前,需要对读指针和写指针进行比较,需要说明的是,读指针是由FPGA更新的,写指针是由软件更新的。当读指针和写指针不同时,读取以读指针指向的当前BD的BD信息。

FPGA通过DMA方式主动读取读指针c2s_rd_ptr指向的当前BD的BD信息,解析出对应数据缓存区首地址SystemAddr、大小RSVByteCnt及下一个BD的首地址等信息。

FPGA将经XTS-SM4加解密处理后的数据报文通过PCIe DMA的方式写入首地址为SystemAddr数据存储区中。并将接收BD环的读指针更新为指向当前BD的下一个BD首地址。FPGA发送完一个数据报文或者一个数据缓存区长度的数据,对当前BD进行相关处理,并判断是否进行下一次操作。

在本发明上述实施例中,所述将经过加解密处理后的数据报文写入对应数据缓存区中,包括:

获取对应数据缓存区的地址信息中的首地址信息SystemAddr和数据缓存区大小信息RSVByteCnt;

将经过加解密处理后的数据报文的长度与所述RSVByteCnt进行比较;

当经过加解密处理后的数据报文的长度小于等于所述RSVByteCnt,将经过加解密处理后的数据报文写入首地址为SystemAddr的数据缓存区中;

当经过加解密处理后的数据报文的长度大于所述RSVByteCnt,在首地址为SystemAddr的数据缓存区中写入所述RSVByteCnt长度的数据,将经过加解密处理后的数据报文中的其余数据存到当前BD的下一个BD首地址对应的数据缓存区中。

具体的,若数据报文的长度小于等于RSVByteCnt,整个数据报文送到首地址为SystemAddr的数据缓存区中,否则在首地址为SystemAddr的数据缓存区中送入RSVByteCnt长度的数据,其余数据存到下一个BD对应的数据缓存区中。

在本发明上述实施例中,所述将经过加解密处理后的数据报文写入对应数据缓存区中之后,所述方法还包括:

回写当前BD的完成标志位和当前BD对应数据缓存区的数据信息。

具体的,FPGA送完一个数据报文或者一个数据缓存区长度的数据后,更新当前BD的完成标志CMP位和当前BD对应数据缓存区的数据信息,当前BD对应数据缓存区的数据信息至少包括包头SOP、包尾EOP和长度ByteCnt,通过PCIe接口回写当前BD。然后判断是否进行下一次操作。

在FPGA通过PCIe接口回写当前BD后,软件驱动检测到当前BD的完成标志位,加解密完成后,可以根据长度ByteCnt信息将数据缓存区中的数据取出,清除完成位,释放当前BD及数据报文对应的缓存区,以便重复利用,同时更新写指针。

本发明实施例接收方向的整体流程,如图9所示:

软件驱动配置接收BD环;

软件驱动配置接收BD环初始写指针c2s_wr_ptr、读指针c2s_rd_ptr;

判断DMA使能控制寄存器值是否为1;

当DMA使能控制寄存器值为1时,判断c2s_wr_ptr!=c2s_rd_ptr&&c2s_rd_ptr!=0是否成立;当DMA使能控制寄存器值不为1时,停留在此继续等待;

当c2s_wr_ptr、c2s_rd_ptr满足条件,FPGA发起DMA读操作,获取s2c_rd_ptr为首地址当前BD的BD信息,解析获取SystemAddr、RSVByteCnt、NextBDPtr等信息;当s2c_wr_ptr、s2c_rd_ptr不满足条件,转到重新判断DMA使能控制寄存器值是否为1的步骤;

FPGA发起以SystemAddr为首地址的DMA写操作,处理后的数据报文长度小于或等于RSVByteCnt,写入长度为报文长度;否则本次写入长度为RSVByteCnt,其余部分写入下一个BD对应数据缓存区;

判断DMA写操作是否完成;

当DMA写操作完成,FPGA将当前的s2c_rd_ptr更新为下一BD的首地址;否则继续进行DMA写操作;

回写当前BD的完成标志位、包头、包尾、报文长度后,进行下一次操作;

在回写当前BD的完成标志位、包头、包尾、报文长度后,软件驱动检测到完成标志位,根据长度ByteCnt信息将数据缓存区中的数据取出,清除完成标志位,释放当前BD及数据报文对应的缓存区,并更新c2s_wr_ptr。

如图10所示,待处理数据报文通过PCIe接口进入FPGA,FPGA利用DMA读操作功能读取待处理数据报文,将带处理数据报文进行加解密处理。然后FPGA利用DMA写操作功能将经过处理后的数据报文写入接收BD环的数据缓存区中。

本发明实施例还提供一种基于XTS-SM4的存储加解密装置,应用于一可编程逻辑器件的接收端,所述装置包括:

第一接收模块,用于接收包含发送缓冲区描述符BD环的读指针和写指针的配置信息,其中所述读指针是软件初始配置的,所述写指针是有数据需要处理时,软件写BD信息后更新为指向当前BD的下一个BD首地址,所述BD信息包括待处理数据报文的相关信息、XTS-SM4加解密信息以及下一个BD的首地址信息;

读取处理模块,用于在发送BD环的读指针与写指针不一致时,读取以所述读指针指向的当前BD的BD信息,根据所述BD信息读取待处理数据报文以及XTS-SM4加解密信息,并进行基于XTS-SM4的加解密处理;

更新模块,用于在所述待处理数据报文读取完成后,将所述读指针更新为指向当前BD的下一个BD首地址。

在本发明上述实施例中,所述装置还包括:

第一回写模块,用于在所述待处理数据报文读取完成后,回写当前BD的完成标志位和错误标志位。

其中,所述读取处理模块包括:

第一子模块,用于根据所述待处理数据报文的相关信息读取待处理数据报文;

第二子模块,用于获取所述XTS-SM4加解密信息中的加解密模式、密钥Key1、密钥Key2和调整值Icfg;

第三子模块,用于对所述Key1和所述Key2同时进行密钥扩展,分别获取与所述Key1对应的多个第一扩展密钥和与所述Key2对应的多个第二扩展密钥;

第四子模块,用于根据多个所述第二扩展密钥对所述Icfg进行加密,得到加密结果Icfg_enc;

第五子模块,用于将所述待处理数据报文按照每128bit为一组进行分组,并对每组增加8bit的数据进行编号,其中8bit数据为与128bit数据合并后的合并数据中的高8位;

第六子模块,用于对所述Icfg_enc和aj进行伽罗华域GF(2128)乘法计算得到计算结果Tj;

第七子模块,用于根据所述加解密模式获取加解密指示信号mode_sel,当所述mode_sel代表加密指示信号时,对所述Tj和明文文本进行异或后的结果根据多个所述第一扩展密钥进行加密处理;当所述mode_sel代表解密指示信号时,对密文文本和所述Tj异或后的结果根据多个所述第一扩展密钥进行解密处理;

第八子模块,用于将所述Tj和对应数据在多个所述第一扩展密钥作用下的加解密的结果进行异或,得到加解密结果。

在本发明上述实施例中,所述第六子模块进一步用于:

从当前数据的高8位中获取j值,其中j为128bit分组数据在当前数据报文中的位置;

当j等于0时,T0=Icfg_enc;

当j不等于0时,包括:

当Tj-1的127比特位Tj-1[127]为0时,Tj等于Tj-1左移一位;

当Tj-1的127比特位Tj-1[127]为不为0时,将Tj-1左移一位后再将其低8位与十六进制数87进行异或运算得到Tj。

本发明实施例还提供一种基于XTS-SM4的存储加解密装置,应用于一可编程逻辑器件,所述装置包括:

第二接收模块,用于接收包含接收缓冲区描述符BD环的读指针和写指针的配置信息;

读取解析模块,用于在接收BD环的读指针与写指针不一致时,读取以所述读指针指向的当前BD的BD信息,对所述BD信息进行解析,获取对应数据缓存区的地址信息以及下一个BD的首地址信息;

写入接收模块,用于将经过加解密处理后的数据报文写入对应数据缓存区中,并将接收BD环的读指针更新为指向当前BD的下一个BD首地址。

在本发明上述实施例中,所述写入接收模块包括:

获取子模块,用于获取对应数据缓存区的地址信息中的首地址信息SystemAddr和数据缓存区大小信息RSVByteCnt;

比较子模块,用于将经过加解密处理后的数据报文的长度与所述RSVByteCnt进行比较;

第一写入子模块,用于当经过加解密处理后的数据报文的长度小于等于所述RSVByteCnt,将经过加解密处理后的数据报文写入首地址为SystemAddr的数据缓存区中;

第二写入子模块,用于当经过加解密处理后的数据报文的长度大于所述RSVByteCnt,在首地址为SystemAddr的数据缓存区中写入所述RSVByteCnt长度的数据,将经过加解密处理后的数据报文中的其余数据存到当前BD的下一个BD首地址对应的数据缓存区中。

在本发明上述实施例中,所述装置还包括:

第二回写模块,用于所述写入接收模块将经过加解密处理后的数据报文写入对应数据缓存区中之后,回写当前BD的完成标志位和当前BD对应数据缓存区的数据信息。

本发明实施例基于XTS-SM4的存储加解密方法,通过并行处理技术将算法迭代全展开,解决存储加密系统延时长、带宽低的问题。通过FPGA实现主动级联读写功能,有效解决了采用SM4算法空闲或报文积压问题,有效降低CPU在加解密系统中的资源消耗;FPGA通过DMA读操作,使BD信息和待处理的数据送入FPGA,经解析送到XTS-SM4处理,处理之后的数据,通过PCIe DMA写操作送给对应的系统缓存区,两方向处理相互独立,互不影响,可以同时并行处理,大大提高性能。

需要说明的是,本发明实施例提供的基于XTS-SM4的存储加解密装置是应用上述方法的装置,则上述方法的所有实施例均适用于该装置,且均能达到相同或相似的有益效果。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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