首页> 中国专利> 一种在FPGA上实现SM4加密算法的模块及方法

一种在FPGA上实现SM4加密算法的模块及方法

摘要

本发明公开一种在FPGA上实现SM4加密算法的模块及方法,该模块包括一密钥扩展算法模块和一加密运算模块,密钥扩展算法模块接收初始密钥数据,对该初始密钥数据进行多轮迭代运算,每一轮迭代需该轮的轮密钥参与运算,生成轮密钥数据;加密运算模块接收待加密的明文数据和轮密钥数据,利用轮密钥数据对明文数据进行多轮迭代加密运算,每一轮迭代需该轮的轮密钥参与运算,生成最终的密文数据。本发明大大节约SM4运算所占用的时钟资源,在FPGA中的资源占用更少,提高加密算法的运算速度。

著录项

  • 公开/公告号CN112765614A

    专利类型发明专利

  • 公开/公告日2021-05-07

    原文格式PDF

  • 申请/专利权人 神州龙芯智能科技有限公司;

    申请/专利号CN202011347469.4

  • 发明设计人 肖隆腾;

    申请日2020-11-26

  • 分类号G06F21/60(20130101);G06F21/72(20130101);G06F21/76(20130101);

  • 代理机构11200 北京君尚知识产权代理有限公司;

  • 代理人李文涛

  • 地址 100089 北京市海淀区港闸区江海佳苑19幢1702室

  • 入库时间 2023-06-19 10:54:12

说明书

技术领域

本发明涉及一种SM4加密算法(国家商业密码算法)在FPGA(Field ProgrammableGate Array)可编程逻辑器件上的实现方法,具体涉及一种SM4加密算法在可编程逻辑器件上用电路实现的模块及方法。

背景技术

SMS4分组加密算法是中国无线标准中使用的分组加密算法,在2012年已经被国家商用密码管理局确定为国家密码行业标准,标准编号GM/T 0002-2012并且改名为SM4加密算法,与SM2椭圆曲线公钥密码算法,SM3密码杂凑算法共同作为国家密码的行业标准,在我国密码行业中有着极其重要的位置。SM4加密算法介绍详见《无线局域网产品使用的SMS4密码算法》(下载地址:https://www.oscca.gov.cn/sca/c100061/201611/1002423/files/330480f73 1f64e1ea75138211ea0dc27.pdf),该文件由国家密码局官网发布。

SM4加密算法是一个分组算法。该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

采用FPGA实现SM4算法的实质是利用FPGA内部逻辑电路来完成SM4算法的加解密功能。与采用软件来实现该算法相比,FPGA运算速率更快;与采用专业算法芯片ASIC相比,FPGA在工程应用上又显得更加的灵活。然而传统的FPGA上实现SM4加密算法的方法占用资源大,运算速度慢,亟待解决。

发明内容

为了使SM4加密算法在FPGA中的资源占用更少,运算速度更快,本发明提供一种SM4 加密算法在可编程逻辑器件上实现的模块及方法,可以大大节约SM4运算所占用的时钟资源,从而提高加密算法的运算速度。

为实现上述目的,本发明采用以下技术方案:

一种在FPGA上实现SM4加密算法的模块,包括一密钥扩展算法模块和一加密运算模块,密钥扩展算法模块接收初始密钥数据,对该初始密钥数据进行多轮迭代运算,每一轮迭代需该轮的轮密钥参与运算,生成轮密钥数据;加密运算模块接收待加密的明文数据和轮密钥数据,利用轮密钥数据对明文数据进行多轮迭代加密运算,每一轮迭代需该轮的轮密钥参与运算,生成最终的密文数据。

进一步地,密钥扩展算法模块和加密算法模块同时接收START起始信号、CLK时钟信号、RST复位信号,START起始信号用于启动密钥扩展算法模块和加密算法模块,CLK时钟信号用于作为密钥扩展算法模块和加密算法模块的电路的运行节拍,RST复位信号用于对密钥扩展算法模块和加密算法模块的状态清零复位。

进一步地,初始密钥数据、明文数据、最终的密文数据均为128比特,每个轮密钥为32 比特。

进一步地,密钥扩展算法模块和加密运算模块均进行32轮迭代运算。

进一步地,密钥扩展算法模块主要由6个2选1多路选择器、5个D触发器、1个6输入异或门构成。

进一步地,密钥扩展算法模块利用密钥扩展算法进行迭代计算。

进一步地,加密算法模块主要由6个2选1多路选择器、5个D触发器、1个6输入异或门构成。

进一步地,加密运算模块利用加密算法进行迭代计算。

一种在FPGA上实现SM4加密算法的方法,基于上述模块,包括以下步骤:

1)FPGA上电,模块初始化;

2)模块启动,接收待加密的明文数据及初始密钥数据;

3)密钥扩展算法模块接收初始密钥数据,开始第一轮迭代并产生第一个轮密钥;

4)加密算法模块接收待加密的明文数据和第一个轮密钥,开始第一轮迭代加密运算,产生第一轮的密文数据;

5)在同一时钟节拍下并行运算步骤3)和4),进行多轮迭代;其中,加密算法模块第一轮的参与迭代的初值为待加密的明文数据,之后每一轮参与迭代的值是上一轮加密运算后产生的密文数据;

6)加密运算模块加密结束后,输出最终的密文数据。

进一步地,初始密钥数据、明文数据、最终的密文数据均为128比特,每个轮密钥为32 比特;迭代次数一共32轮。

与现有技术相比,本发明达到的有益效果是:

(1)本发明充分利用FPGA可编程逻辑器件的并行运算特性,实现了SM4商用密码算法的加密功能。现有实现方法中,需要32个CLK时钟用于轮密钥的产生,另需要32个CLK 时钟用于加密运算。即传统方法一共需要占用64个CLK时钟。而本发明所阐述的方法仅需要占用32个CLK时钟即可完成SM4加密算法,与传统的FPGA上实现SM4加密算法的方法相比,所需要的时钟资源更少,大大节约了算法实现的时间,大幅度提高了SM4加密运算的速率。

(2)本发明还节约了FPGA片内的存储器资源。现有实现方法中,需要对32个轮密钥进行寄存,每一个轮密钥是32比特的,这就需要用到32个32位的寄存器,属于串行模型, 32个轮密钥产生完毕后,才开始执行加密运算。本发明采用即时产生即时使用的方法,是充分利用FPGA并行运算的特性,即一边产生轮密钥一边使用该轮密钥来进行加密运算,即在SM4密钥扩展算法运算时,每当密钥扩展算法产生一个新的轮密钥,即将该轮密钥用于明文数据的加密运算,不需要等待32个轮密钥全部产生毕后才开始进行明文数据的加密运算,从而来提高SM4加密算法的运算速度,而且仅需要使用一个32位的寄存器对本轮产生的轮密钥进行存储,大大减少了对FPGA片内资源的占用。

附图说明

图1为一种在FPGA上实现SM4加密算法的模块的连线框图。

图2为密钥扩展算法模块内部连线框图。

图3为加密算法模块内部连线框图。

图4为密钥扩展算法与加密算法并行运算流程图。

图5为一种FPGA实现SM4加密算法的流程简图。

图6为采用vivado软件对本发明的方法进行功能仿真的波形图。

具体实施方式

为使本发明的技术方案能更明显易懂,特举实施例并结合附图详细说明如下。

本实施例提供一种在FPGA上实现SM4加密算法的模块(以下简称SM4加密算法模块,SM4 CRYPT MODULE),该模块内部由一个密钥扩展算法模块(RK MODULE)和一个加密运算模块(CP MODULE)组成(见图1所示的SM4加密算法电路功能模块连线框图),具体说明如下。

SM4加密算法模块包含如下输入信号:

1:128比特明文数据;

2:128比特密钥数据;

3:START起始信号;

4:CLK时钟信号;

5:RST复位信号。

SM4加密算法模块包含如下输出信号:

1:128比特密文数据;

2:FINISH加密结束信号。

SM4加密算法模块的内部包含如下两个功能模块:

1:密钥扩展算法模块(RK MODULE);

2:加密算法模块(CP MODULE)。

模块之间的信号连接关系如下:

1:128比特明文直接输入到加密算法模块(CP MODULE);

2:128比特密钥直接输入到密钥扩展算法模块(RK MODULE);

3:START起始信号同时连接到密钥扩展算法模块(RK MODULE)和加密算法模块(CPMODULE);

4:CLK时钟信号同时连接到密钥扩展算法模块(RK MODULE)和加密算法模块(CPMODULE);

5:RST复位信号同时连接到密钥扩展算法模块(RK MODULE)和加密算法模块(CPMODULE);

6:密钥扩展算法模块(RK MODULE)的RK轮密钥数据输出信号,连接到加密算法模块(CP MODULE)的轮密钥输入端口。每个轮密钥都是32比特的,因此,RK轮密钥端口为32位宽度的数据端口。

其中,所述128比特明文是待加密的数据,该数据由调用SM4加密算法模块(SM4CRYPT MODULE)者发起;

所述128比特密钥用于密钥扩展算法的初始密钥值,该数据由调用SM4加密算法模块(SM4 CRYPT MODULE)者发起;

所述START起始信号用于起动SM4加密算法模块(SM4 CRYPT MODULE)的起始标识信号,该信号由调用SM4加密算法模块(SM4 CRYPT MODULE)者发起;

所述CLK时钟信号用于SM4加密算法模块(SM4 CRYPT MODULE)电路的运行节拍;

所述RST复位信号用于SM4加密算法模块(SM4 CRYPT MODULE)状态清零复位;

所述RK轮密钥信号为SM4加密算法模块(SM4 CRYPT MODULE)内部信号,由密钥扩展算法模块(RK MODULE)产生,提供给加密算法模块(CP MODULE)使用。数据位宽为32位;

所述128比特密文是明文经过加密算法运算之后的结果,该数据输出给调用SM4加密算法模块(SM4 CRYPT MODULE)者;

所述FINISH结束信号用于加密运算完成的标识,该信号输出给调用SM4加密算法模块 (SM4 CRYPT MODULE)者;

所述SM4加密算法模块(SM4 CRYPT MODULE)用于对128比特明文数据进行加密;

所述密钥扩展算法模块(RK MODULE)用于对128比特密钥数据进行密钥扩展,该模块对128比特密钥数据进行32轮迭代运算,每迭代一轮会产生一个32比特的轮密钥;

所述加密算法模块(CP MODULE)用于对128比特明文数据进行加密,加密过程需要进行32轮迭代运算,每一轮迭代都需要该轮的轮密钥参与运算。

进一步地,密钥扩展算法模块(RK MODULE)的内部连接关系见图2,主要由6个2选1多路选择器、5个D触发器、1个6输入异或门构成。

所述6个2选1多路选择器,分别为S0、S1、S2、S3、S4、S5;

所述5个D触发器,分别为Q0、Q1、Q2、Q3、Q4;

所述1个6输入异或门,为XOR。

所述2选1多路选择器S4,其输入信号CK[31:0]表示32个固定参数,固定参数CK0参与第1轮迭代运算,固定参数CK1参与第2轮迭代运算,固定参数CK2参与第3轮迭代运算,依次类推,固定参数CK31参与第32轮迭代运算。

所述2选1多路选择器S0,其输入信号为MK0;

所述2选1多路选择器S1,其输入信号为MK1;

所述2选1多路选择器S2,其输入信号为MK2;

所述2选1多路选择器S3,其输入信号为MK3;

所述MK0、MK1、MK2、MK3,是由128比特加密密钥被拆分为4个32比特的数MK0、 MK1、MK2、MK3,这4个32比特的数参与密钥扩展算法的迭代。

所述K4是每一轮密钥扩展算法迭代后所得到的值,它作为本轮迭代所得值输出给加密算法模块(CP MODULE);所述K4同时作为参数参与下一轮密钥扩展算法的迭代。

所述密钥扩展算法(RK MODULE)的数学表达式如下,以下算法和代码中的各符号含义详见《无线局域网产品使用的SMS4密码算法》:

所述密钥扩展算法(RK MODULE)迭代过程,其硬件描述语言(verilog)关键代码如下:

assign k4=k0^T_Skim_Data_out;//把k0与T_Skim_Data_out的异或值连接到k4信号上

assign T_Skim_MK=k1^k2^k3^ck;//把k1、k2、k3、ck的异或值连接到T_Skim_MK信号上

always@(posedge Clk or negedge Rst_n)//当CLK的上升沿或Rst_n的下降沿来临时执行以下的语句

if(!Rst_n)//Rst_n为低,表征复位信号有效,执行begin与end之间的语句。

begin//复位状态下的所有操作开始

k3_r<=32'h0000_0000;//复位状态时,将k3_r寄存器的值清零

k2_r<=32'h0000_0000;//复位状态时,将k2_r寄存器的值清零

k1_r<=32'h0000_0000;//复位状态时,将k1_r寄存器的值清零

k0_r<=32'h0000_0000;//复位状态时,将k0_r寄存器的值清零

end//复位状态下的所有操作结束

else if(Load)//非复位状态下,Load信号有效,数据刚加载成功,进行第一次迭代

{k3_r,k2_r,k1_r,k0_r}<={MK3,MK2,MK1,MK0};//第1次迭代

else if(Load_Flag)//数据不是初始加载,进行第2次至第32次迭代

{k3_r,k2_r,k1_r,k0_r}<={k4,k3_r,k2_r,k1_r}.//第2次至第32次迭代

进一步地,加密算法模块(CP MODULE)的内部连接关系见图3,主要由6个2选1多路选择器、5个D触发器、1个6输入异或门构成。

所述6个2选1多路选择器,分别为S0、S1、S2、S3、S4、S5;

所述5个D触发器,分别为Q0、Q1、Q2、Q3、Q4;

所述1个6输入异或门,为XOR。

所述2选1多路选择器S4,其输入信号RK[31:0]表示32个轮密钥,轮密钥CK0参与第1轮迭代运算,轮密钥CK1参与第2轮迭代运算,轮密钥CK2参与第3轮迭代运算,依次类推,轮密钥CK31参与第32轮迭代运算。

所述2选1多路选择器S0,其输入信号为X0;

所述2选1多路选择器S1,其输入信号为X1;

所述2选1多路选择器S2,其输入信号为X2;

所述2选1多路选择器S3,其输入信号为X3;

所述X0、X1、X2、X3,是由128比特加密密钥被拆分为4个32比特的数X0、X1、X2、 X3,这4个32比特的数参与加密算法的迭代。

所述X4是每一轮加密算法迭代后所得到的值,它作为一个参数参与下一轮加密算法的迭代。

所述加密算法(CP MODULE)的数学表达式如下,以下算法和代码中的各符号含义详见《无线局域网产品使用的SMS4密码算法》:

所述加密算法模块(CP MODULE)迭代过程,其硬件描述语言(verilog)关键代码如下:

assign x4=x0^T_Data_out;//把x0与T_Skim_Data_out的异或值连接到x4信号上

assign T_Data_in=x1^x2^x3^rk;//把x1、x2、x3、rk的异或值连接到T_Data_in信号上

assign Data_out=Finish?{Y3,Y2,Y1,Y0}:32'd0;//迭代完成后,转换字(32bit)顺序

always@(posedge Clk or negedge Rst_n)//当CLK的上升沿或Rst_n的下降沿来临时执行以下的语句

if(!Rst_n)//Rst_n为低,表征复位信号有效,执行begin与end之间的语句。

begin//复位状态下的所有操作开始

x3_r<=32'h0000_0000;//复位状态时,将x3_r寄存器的值清零

x2_r<=32'h0000_0000;//复位状态时,将x2_r寄存器的值清零

x1_r<=32'h0000_0000;//复位状态时,将x1_r寄存器的值清零

x0_r<=32'h0000_0000;//复位状态时,将x0_r寄存器的值清零

end//复位状态下的所有操作结束 else if(Start_Flag)//非复位状态下,Start_Flag信号有效,数据刚加载成功,进行第1次迭代

{x3_r,x2_r,x1_r,x0_r}<={X3,X2,X1,X0};//第1次迭代

else if(Start_Flag_2)//数据不是初始加载,以下进行第2次至第32次迭代

{x3_r,x2_r,x1_r,x0_r}<={x4,x3_r,x2_r,x1_r}.//第2次至第32次迭代

所述{Y3,Y2,Y1,Y0}是一个128比特的数,由4个32比特的数Y3、Y2、Y1、Y0 构成,是经过加密运算后,最终得到的密文。

本实施例还提供一种在FPGA上实现SM4加密算法的方法,其基于SM4加密算法模块的运算流程,如图5所示,具体包括如下步骤:

步骤1:FPGA上电,CLK时钟产生并稳定,RST复位信号有效,算法模块初始化;

步骤2:初始化完成,RST复位信号释放,并检测到START起始信号的到来;

步骤3:算法模块查询到明文数据及密钥数据,并导入数据;

步骤4:密钥扩展算法模块(RK MODULE)开始第一轮迭代并产生第一个轮密钥;

步骤5:加密算法模块(CP MODULE)收到128比特明文值和第一个轮密钥的同时开启第一轮迭代加密运算,产生第一轮的密文数据;

步骤6:在同一时钟节拍下并行运算步骤4和步骤5,一共32轮,即32个CLK时钟节拍。加密算法模块(CP MODULE)第一轮的参与迭代的初值是128比特明文值,往后每一轮参与迭代的值是上一轮加密运算后产生的密文值;

步骤7:加密结束,128比特密文端口输出密文值,同时置FINISH加密结束标识位为有效。

采用vivado软件对本发明的方法进行功能仿真,仿真的波形图如图6所示。由该图可知从START起始信号开始到FINISH信号有效为止,加密过程仅用了32个CLK时钟。对照《无线局域网产品使用的SMS4密码算法》文件可知,加密结果是正确的。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可以轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号