当前位置: 首页 > 专利查询>湖北大学专利>正文

一种轻量级的SM4算法的硬件实现电路制造技术

技术编号:33276265 阅读:11 留言:0更新日期:2022-04-30 23:35
本发明专利技术涉及一种轻量级的SM4算法的硬件实现电路,包括控制模块,控制模块用于根据当前的周期数和时钟输出相应的控制信号;S盒模块,用于对来自密钥扩展模块和加密模块的数据进行S盒操作;固定参数CK生成模块,用于根据控制信号生成相应的固定参数;密钥扩展模块,用于根据控制信号更新密钥来生成轮密钥;加密模块,用于根据控制信号利用轮密钥更新加密运算的中间结果。该电路首先接收初始信号,然后由控制模块产生相应的控制信号完成密钥扩展运算、加密运算,最后得到加密结果并输出密文。本发明专利技术的整个加密过程采用单比特串行的方式进行数据传输。与现有技术相比,本发明专利技术实现面积极小,适用于资源受限的设备,具有良好的应用前景。前景。前景。

【技术实现步骤摘要】
一种轻量级的SM4算法的硬件实现电路


[0001]本专利技术涉及SM4算法的加密实现技术,具体涉及一种轻量级的SM4算法硬件实现电路。

技术介绍

[0002]随着物联网技术的发展和普及,资源受限设备的应用越来越广泛。如何在充分利用既有资源为资源受限设备存取、传输的数据提供有效的安全性保护就显得尤为重要。
[0003]SM4算法是由国家商用密码管理办公室于2006年公布的用于无线局域网产品的密码算法。SM4算法继2012年被批准为行业标准后,2021年正式成为ISO/IEC国际标准。
[0004]SM4算法是一种基于Feistel结构的分组密码算法,其分组长度和密钥长度均为128比特。SM4加密算法由32次迭代运算和一次反序变换构成,每次迭代都需要载入一组轮密钥。解密算法与加密算法结构相同,区别是轮密钥的使用顺序相反。
[0005]SM4算法既可以用软件实现,也可以用硬件实现。其中硬件实现方式运行速度快,安全性高。SM4算法硬件实现可使用全展开的硬件电路结构,可获得高吞吐率,但面积开销很大。采用按轮展开的方式则可以在很大程度上减少面积的开销,但吞吐率会较低。现有的专利或者技术通常用BP算法极其变体、Paar算法机器变体、矩阵分解的方式来实现线性层,然而上述方法并不适配单比特串行的硬件实现方式,因此此处采用一种将线性层与后续异或操作结合的新方法,以此达到节约硬件开销的目的。

技术实现思路

[0006]本专利技术要解决的技术问题是针对以上不足,提供一种轻量级的SM4算法的硬件实现电路
[0007]为解决以上技术问题,本专利技术采用以下技术方案:本专利技术整个电路的输入信号为:明文i_plaintext、初始密钥i_key、时钟信号clk、开始信号start、复位信号rst。整个电路的输出信号为:密文o_data,完成信号o_done;其中控制模块的输入信号是开始信号start、复位信号rst、时钟信号clk和固定参数d_ck,输出信号是控制信号ctrl_k、ctrl_s、ctrl_rt_s、ctrl_sbox、ctrl_sbox_k、ctrl_ck、ctrl_init_ck和加密完成信号o_done、单比特固定参数ck、单比特系统参数fk;S盒模块的输入信号为控制信号ctrl_sbox_k、需要执行S盒操作的数据sbox_in,输出信号为S盒的结果sbox_out;固定参数CK生成模块的输入信号是控制信号ctrl_ck、ctrl_init_ck,输出信号是8比特长的固定参数d_ck;密钥扩展模块的输入信号是初始密钥i_key、时钟信号clk、单比特系统参数fk、单比特固定参数ck、S盒操作的结果sbox_out、控制信号ctrl_k、ctrl_sbox_k,输出信号是轮密钥rk、需要执行S盒操作的数据sbox_in_k;加密模块的输入信号是明文i_plaintext、时钟信号clk、轮密钥rk、S盒操作的结果sbox_out、控制信号ctrl_sbox_s、ctrl_s、ctrl_rt,输出信号是密文o_data、完成信号o_done、需要执行S盒操作的数据sbox_in_s。
[0008]控制模块,接收来自外界的信号(开始信号start、复位信号rst和时钟信号clk)经过处理后向其他模块发出控制信号ctrl_k、ctrl_s、ctrl_rt_s、ctrl_sbox、ctrl_sbox_k、ctrl_ck、ctrl_init_ck,向外输出加密完成信号o_done,同时将来自固定参数CK生成模块的8比特固定参数d_ck以单比特ck的形式输入至密钥扩展模块、将系统参数FK以单比特fk的形式输入至密钥扩展模块。
[0009]S盒模块,在控制信号ctrl_sbox_k的控制下选择接收来自加密模块的8比特数据sbox_in_s或来自密钥扩展模块的8比特数据sbox_in_k进行置换操作并将8比特置换结果sbox_out输回加密模块或密钥扩展模块。
[0010]固定参数CK生成模块,在控制信号ctrl_ck和ctrl_init_ck的控制下将生成的密钥扩展所需的8位固定参数d_ck输入到控制模块。
[0011]密钥扩展模块,接收来自外部输入的初始密钥i_key、来自控制模块的单比特系统参数fk、单比特固定参数ck、来自S盒模块的8比特数据sbox_out。并在时钟信号clk、和控制信号ctrl_k、ctrl_sbox_k的控制下完成密钥扩展,同时向加密模块输入轮密钥rk、向S盒模块输入8比特数据sbox_in_k。
[0012]加密模块,接收来自外部输入的明文i_plaintext、来自密钥扩展模块的轮密钥rk、来自S盒模块的8比特数据sbox_out。并在时钟信号clk和控制信号ctrl_sbox_s、ctrl_s、ctrl_rt_s的控制下完成加密操作,并向S盒模块输入8比特数据sbox_in_s、向外输出密文o_data。
[0013]进一步的,所述控制模块内置轮计数器round和时钟计数器count,轮计数器round用来表示0至38轮,共计39轮,其中第0轮共计128个时钟周期,其余轮次均为32个时钟周期;时钟计数器count用于表示0至127共128个时钟;所述控制模块在当加密操作执行且开始信号start为0时将两个计数器均初始化为0;当开始信号start为1时,时钟计数器count在每一个时钟上升沿到来时计数,当round=0、count=127时将round+1、count置0;当round≠0、count=31时将round+1、count置0;其余情况下将count+1、round不变;当35≤count≤38时,将完成信号o_done置1,其他情况下将完成信号o_done置0;o_done用来判断是否输出加密所产生的密文;所述控制模块在当加密操作执行且round=0时,置fk的值为系统参数FK的第count个比特,否则fk置0,fk数值用于初始化密钥;控制模块还接收来自固定参数CK生成模块的输出的8比特数据d_ck,并根据count信号的数值分割d_ck为单比特数据ck:当120≤count≤127或round≠0时,假设count后三位比特构成的十进制数为i,则ck的数值等于d_ck从低位起的第i个比特的值,否则ck置0,ck数值用于计算轮密钥。
[0014]进一步的,所述S盒模块用于接收来自控制模块的信号ctrl_sbox_k,且在当ctrl_sbox_k=1时,对来自密钥扩展模块的8比特数据进行S盒操作,将输出数据返回给密钥扩展模块;在当ctrl_sbox_k=0时,对来自加密模块的8比特数据进行S盒操作,将输出数据返回给加密模块。
[0015]进一步的,所述固定参数CK生成模块用于生成32组密钥扩展时所需的32比特固定参数;固定参数CK生成模块由来自控制模块的信号ctrl_ck和ctrl_init_ck控制;并用于在当ctrl_ck=1、ctrl_init_ck=1时,d_ck置为00000000;当ctrl_ck=1、ctrl_ini本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种轻量级的SM4算法的硬件实现电路,其特征在于,包括控制模块、S盒模块、固定参数CK生成模块、密钥扩展模块和加密模块,所述控制模块分别连接S盒模块和固定参数CK生成模块;所述控制模块的输入信号包括开始信号start、复位信号rst、时钟信号clk和固定参数d_ck,输出信号包括控制信号ctrl_k、ctrl_s、ctrl_rt_s、ctrl_sbox、ctrl_sbox_k、ctrl_ck、ctrl_init_ck、加密完成信号o_done、单比特固定参数ck和单比特系统参数fk;控制模块用于接收来输入信号并将信号处理后向其他模块发出控制信号,最终向外输出加密完成信号o_done,同时将来自固定参数CK生成模块的固定参数d_ck以单比特ck的形式输入至密钥扩展模块以及将系统参数FK以单比特fk的形式输入至密钥扩展模块;S盒模块用于在控制信号ctrl_sbox_k的控制下选择接收来自加密模块的数据sbox_in_s或来自密钥扩展模块的数据sbox_in_k并进行置换操作,将置换结果sbox_out输回加密模块或密钥扩展模块;固定参数CK生成模块用于在控制信号ctrl_ck和ctrl_init_ck的控制下生成扩展密钥时所需的的固定参数d_ck并将固定参数d_ck输入到控制模块;密钥扩展模块用于接收来自外部输入的初始密钥i_key、来自控制模块的单比特系统参数fk、单比特固定参数ck和来自S盒模块的数据sbox_out,并在时钟信号clk和控制信号ctrl_k、ctrl_sbox_k的控制下完成密钥扩展,同时向加密模块输入轮密钥rk以及向S盒模块输入数据sbox_in_k;加密模块用于接收来自外部输入的明文i_plaintext、来自密钥扩展模块的轮密钥rk和来自S盒模块的数据sbox_out,并在时钟信号clk和控制信号ctrl_sbox_s、ctrl_s和ctrl_rt_s的控制下完成加密操作,并向S盒模块输入数据sbox_in_s,向外输出密文o_data。2.根据权利要求1所述的轻量级的SM4算法的硬件实现电路,其特征在于,所述控制模块内置轮计数器round和时钟计数器count,轮计数器round用来表示0至38轮,共计39轮,其中第0轮共计128个时钟周期,其余轮次均为32个时钟周期;时钟计数器count用于表示0至127共128个时钟;所述控制模块在当加密操作执行且开始信号start为0时将两个计数器均初始化为0;当开始信号start为1时,时钟计数器count在每一个时钟上升沿到来时计数,当round=0、count=127时将round+1、count置0;当round≠0、count=31时将round+1、count置0;其余情况下将count+1、round不变;当35≤count≤38时,将完成信号o_done置1,其他情况下将完成信号o_done置0;o_done置1时控制模块输出加密所产生的密文,o_done置0时控制模块不输出加密所产生的密文;所述控制模块在当加密操作执行且round=0时,置fk的值为系统参数FK的第count个比特,否则fk置0,fk数值用于初始化密钥;控制模块还接收来自固定参数CK生成模块的输出的8比特数据d_ck,并根据count信号的数值分割d_ck为单比特数据ck:当120≤count≤127或round≠0时,假设count后三位比特构成的十进制数为i,则ck的数值等于d_ck从低位起的第i个比特的值,否则ck置0,ck数值用于计算轮密钥。3.根据权利要求1所述的轻量级的SM4算法的硬件实现电路,其特征在于,所述S盒模块用于接收来自控制模块的信号ctrl_sbox_k,且在当ctrl_sbox_k=1时,对来自密钥扩展模
块的8比特数据进行S盒操作,将输出数据返回给密钥扩展模块;在当ctrl_sbox_k=0时,对来自加密模块的8比特数据进行S盒操作,将输出数据返回给加密模块。4.根据权利要求1所述的轻量级的SM4算法的硬件实现电路,其特征在于,所述固定参数CK生成模块用于生成32组密钥扩展所需的32比特固定参数d_ck;固定参数CK生成模块由来自控制模块的信号ctrl_ck和ctrl_init_ck控制;并用于在当ctrl_ck=1、ctrl_init_ck=1时,d_ck置为00000000;当ctrl_ck=1、ctrl_init_ck=0时,d_ck+00000111,并将d_ck的值输出到控制模块。5.根据权利要求1所述的轻量级的SM4算法的硬件实现电路,其特征在于,所述密钥扩展模块用于对初始密钥进行32轮密钥扩展操作以生成32组轮密钥;所述密钥扩展模块由控制信号ctrl_k、ctrl_sbox_k和时钟信号clk进行控制,并接收来自外部输入的初始密钥i_key,来自控制模块的单比特系统参数fk、单比特固定参数ck和来自S盒模块的sbox_out,并向加密模块输入轮密钥rk、向S盒模块输入sbox_in_k;所述密钥扩展模块包括两组寄存器,其中一组用于存储轮密钥中间状态的寄存器由高位至低位依次编号为FF
127
,FF
126
,

,FF0,该组寄存器的输入数据为K
in
,输出数据为K
out
;将另一组用于存储S盒输入和输出的寄存器RT_KEY由高位至低位依次编号为FF
S7
,FF
S6
,

,FF
S0
,该组寄存器的输入数据为RT_KEY
in
,输出数据为RT_KEY
out
;密钥扩展模块输出到加密模块的轮密钥为rk,其中:RT_KEY
out
=rk=FF
23
所述密钥扩展模块的两组寄存器在每个时钟周期执行循环移位操作,由低位向高位移位1比特位;所述密钥扩展模块在当来自控制模块的控制信号ctrl_sbox_k=1时,将存储在寄存器RT_KEY里的数据输入至S盒模块,并接收来自S盒的输出数据S7,S6,

,S0,其中RT_KEY
out
=S7, 将S6,S5,

,S0分别存储至寄存器RT_KEY里的FF
S7
,FF
S6
,

,FF
S1
中;当ctrl_sbox_k=0时密钥扩展模块不接收来自S盒模块的数据,RT_KEY
out
=FF
S7
,其余位向左循环移1比特位;密钥扩展模块在当round=0且ctrl_k=00时,进行初始化密钥的操作,此时每个时钟周期FF0接收K
in
,而K
in
的值为fk与i_key异或的结果,其中fk来自密钥控制模块,i_key来自外部输入,在128个时钟周期内FF
127
,FF
126
,

,FF0在每个时钟周期内执行循环左移1位的操作,经过128个时钟周期后完成密钥的初始化,且将结果存储在寄存器的FF
127
,FF
126
,

,FF0中,同时FF
S0
接收数据RT_KEY
in
,RT_KEY
in
为FF
87
、FF
55
、FF
23
和ck四比特位异或的结果,经过128个时钟周期后寄存器RT_KEY中FF
S7
,FF
S6
,

,FF
S0
存储着需要进行S盒操作的8比特数据a0;所述密钥扩展模块在当1≤round≤32时生成加密所需的轮密钥rk,此时每个时钟周期FF0接收K
in
而K
in
的值为K
out
=FF
127
,当count=0,8,16,24时,ctrl_sbox_k=1时,密钥扩展模块接收S盒输出的数据S7,S6,

,S0,并令RT_KEY
out
=S7,将S6,S5,

,S0分别存储回FF
S7
,FF
S6
,

,FF
S1
;密钥扩展部分的线性层由下述操作完成:当0≤count≤12时,ctrl_k=01时,密钥扩展模块循环移位至FF
119
、FF
109
和FF0的数据分别更改为FF
...

【专利技术属性】
技术研发人员:向泽军张若琳林达罗晓蝶张莎莎曾祥勇李念
申请(专利权)人:湖北大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1