CN109299614A - 一种采用流水线方式实现sm4密码算法的系统及方法 - Google Patents
一种采用流水线方式实现sm4密码算法的系统及方法 Download PDFInfo
- Publication number
- CN109299614A CN109299614A CN201811274070.0A CN201811274070A CN109299614A CN 109299614 A CN109299614 A CN 109299614A CN 201811274070 A CN201811274070 A CN 201811274070A CN 109299614 A CN109299614 A CN 109299614A
- Authority
- CN
- China
- Prior art keywords
- register
- data
- output
- input
- cyclic shifter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 24
- 125000004122 cyclic group Chemical group 0.000 claims description 179
- 230000001360 synchronised effect Effects 0.000 claims description 40
- 230000015654 memory Effects 0.000 claims description 22
- 238000012545 processing Methods 0.000 claims description 8
- 101100274507 Caenorhabditis elegans cki-1 gene Proteins 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 2
- 238000005457 optimization Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bioethics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
Abstract
本发明属于信息安全技术领域,具体涉及一种采用流水线方式实现SM4密码算法的系统及方法。本发明提高了加密/解密的速度,可满足大数据量、高实时性的加密/解密应用需求;同时通过对轮密钥生成模块和轮数据生成模块的优化,减少了FPGA硬件门电路中的逻辑单元的消耗。
Description
技术领域
本发明属于信息安全技术领域,具体涉及一种采用流水线方式实现SM4密码算法的系统及方法。
背景技术
随着计算机网络及通信技术的迅速发展,信息安全问题受到越来越多的关注,信息安全问题已经被我国政府提高到了国家发展战略的层次。对于企业及技术研发者来说,核心数据或研发的核心软件也时刻面临着被轻易复制盗窃的巨大风险。因此,需要使用安全的密码算法对核心数据或核心软件进行加密保护。
SM4密码算法于2012年被中国国家商用密码管理局确定为国家密码行业标准,标准编号为GM/T0002-2012。SM4密码算法是一种分组密码算法,分组长度为128比特,密钥长度为128比特。即SM4密码算法是每次输入128比特的数据,经过一系列的处理后,最后输出另一个不同的128比特的数据。
一般的,SM4密码算法可使用C、JAVA等语言工具编写软件模块实现,这是一种软件加密实现方法。SM4密码算法也可使用FPGA硬件门电路实现,这是一种硬件加密实现方法。硬件加密比软件加密具有速度更快的优点。
使用FPGA硬件门电路实现SM4密码算法时,往往是使用简单的逻辑电路来实现,这种实现方法具有消耗逻辑单元多、处理时间长、加密/解密速度慢的缺点,满足不了大数据量、高实时性的加密/解密处理需求。
发明内容
(一)要解决的技术问题
本发明提出一种采用流水线方式实现SM4密码算法的系统及方法,以解决如何克服FPGA硬件门电路中使用简单的逻辑电路实现SM4密码算法时消耗逻辑单元多、处理时间长、加密/解密速度慢的技术问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种采用流水线方式实现SM4密码算法的系统,该系统包括输入信息存储器、输出信息存储器、加密/解密控制信号寄存器、轮密钥生成控制信号寄存器、密钥寄存器、启动控制信号寄存器、同步时钟生成模块、双字顺序调整模块、轮密钥生成模块和轮数据生成模块;其中,
输入信息存储器和输出信息存储器,分别用于存储输入的数据和输出的数据;
加密/解密控制信号寄存器,用于寄存加密/解密的控制信号,该控制信号决定系统进行加密操作或解密操作;
轮密钥生成控制信号寄存器,用于寄存轮密钥生成模块的启动信号,该启动信号决定轮密钥生成模块是否启动工作状态;
密钥寄存器,用于系统的加密/解密;
启动控制信号寄存器,用于寄存同步时钟生成模块的控制信号,该控制信号决定同步时钟生成模块启动工作或停止工作;
同步时钟生成模块,用于为轮数据生成模块提供基准的同步时钟,同步时钟生成模块受启动控制信号寄存器的启动控制信号的控制,依据不同的启动控制信可进入工作状态或停止工作状态;
双字顺序调整模块,用于对输入数据进行双字序调整并对调整后的数据进行输出;
轮密钥生成模块,包括参量FK0、参量FK1、参量FK2、参量FK3、参量CKi(i=0~31)、密钥MK0、密钥MK1、密钥MK2、密钥MK3、2输入异或运算器、寄存器X0、寄存器X1、寄存器X2、寄存器X3、寄存器K0、寄存器K1、寄存器K2、寄存器K3、寄存器K4、寄存器CK、寄存器rki(i=0~31)、2输入数据选择器、32输入数据选择器、4输入异或运算器、3输入异或运算器、S盒变换器、循环移位器0、循环移位器1、32输出数据选择器、轮密钥输出控制器、轮密钥RKi(i=0~31)、16进制计数器和64进制计数器;其中,
依据SM4密码算法标准,参量FK0=A3B1BAC6,参量FK1=56AA3350,参量FK2=677D9197,参量FK3=B27022DC,参量CK0=00070E15,参量CK1=1C232A31,参量CK2=383F464D,参量CK3=545B6269,参量CK4=70777E85,参量CK5=8C939AA1,参量CK6=A8AFB6BD,参量CK7=C4CBD2D9,参量CK8=E0E7EEF5,参量CK9=FC030A11,参量CK10=181F262D,参量CK11=343B4249,参量CK12=50575E65,参量CK13=6C737A81,参量CK14=888F969D,参量CK15=A4ABB2B9,参量CK16=C0C7CED5,参量CK17=DCE3EAF1,参量CK18=F8FF060D,参量CK19=141B2229,参量CK20=30373E45,参量CK21=4C535A61,参量CK22=686F767D,参量CK23=848B9299,参量CK24=A0A7AEB5,参量CK25=BCC3CAD1,参量CK26=D8DFE6ED,参量CK27=F4FB0209,参量CK28=10171E25,参量CK29=2C333A41,参量CK30=484F565D,参量CK31=646B7279;
密钥MK0、密钥MK1、密钥MK2、密钥MK3均为32比特的密钥输入数据,由密钥寄存器提供;
2输入异或运算器,是对2个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
寄存器X0、寄存器X1、寄存器X2、寄存器X3、寄存器K0、寄存器K1、寄存器K2、寄存器K3、寄存器K4、寄存器CK、寄存器rki(i=0~31)均是32位的数据寄存器;
2输入数据选择器,是根据64进制计数器提供的控制信号,决定2个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也为32比特的数据;
32输入数据选择器,是根据64进制计数器提供的控制信号,决定32个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也为32比特的数据;
4输入异或运算器,是对4个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
3输入异或运算器,是对3个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
S盒变换器,是将一个32比特的输入数据以字节为单位,用完全不相关的新的字节进行替换;
循环移位器0,是将一个32比特的输入数据,向左循环移位13位,输出一个新的32比特的数据;
循环移位器1,是将一个32比特的输入数据,向左循环移位23位,输出一个新的32比特的数据;
32输出数据选择器,是根据64进制计数器提供的控制信号,将输入的数据送入指定的32个输出中的某一个进行输出,输入为32比特的数据,每一个输出也是32比特的数据;
轮密钥输出控制器,依据加密/解密控制信号,决定轮密钥RKi(i=0~31)的输出值;
轮密钥RKi(i=0~31),是寄存生成的32个轮密钥,每个轮密钥都是32比特的数据;
16进制计数器,是对输入的50MHz时钟信号脉冲进行计数,每当计数值为8,输出一个高电平,每当计数值为15,输出一个低电平;
64进制计数器,受轮密钥生成控制信号控制,当收到有效的控制信号后,64进制计数器启动工作,并对16进制计数器的输出信号脉冲进行计数,然后将计数值进行输出,当64进制计数器计数值等于34后,64进制计数器停止计数,也停止输出;
轮数据生成模块,包括寄存器A0、寄存器A1、寄存器A2、寄存器A3、寄存器B0、寄存器B1、寄存器B2、寄存器B3、寄存器D0、寄存器D1、寄存器D2、寄存器D3、寄存器D4、寄存器RK、轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3、2输入数据选择器、4输入数据选择器、4输出数据选择器、2输入异或运算器、4输入异或运算器、5输入异或运算器、S盒变换器、循环移位器2、循环移位器3、循环移位器4、循环移位器5、12进制计数器和8进制计数器;其中,
寄存器A0、寄存器A1、寄存器A2、寄存器A3、寄存器B0、寄存器B1、寄存器B2、寄存器B3、寄存器D0、寄存器D1、寄存器D2、寄存器D3、寄存器D4、寄存器RK、轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3,均为32比特的数据寄存器;其中,寄存器A0、寄存器A1、寄存器A2、寄存器A3,用于寄存输入的数据;寄存器B0、寄存器B1、寄存器B2、寄存器B3,用于寄存输出的数据;轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3,用于寄存相应的输入轮密钥;
4输入数据选择器,是根据8进制计数器提供的控制信号,决定4个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也是32比特的数据;
4输出数据选择器,是根据8进制计数器提供的控制信号,将输入的数据送入指定的4个输出中的某一个进行输出,输入为32比特的数据,每一个输出也是32比特的数据;
5输入异或运算器,是对5个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
循环移位器2,是将一个32比特的输入数据,向左循环移位2位,输出一个新的32比特的数据;
循环移位器3,是将一个32比特的输入数据,向左循环移位10位,输出一个新的32比特的数据;
循环移位器4,是将一个32比特的输入数据,向左循环移位18位,输出一个新的32比特的数据;
循环移位器5,是将一个32比特的输入数据,向左循环移位24位,输出一个新的32比特的数据;
12进制计数器,是对输入的50MHz时钟信号脉冲进行计数,每当计数值为6,输出一个高电平,每当计数值为11,输出一个低电平;
8进制计数器,受同步时钟信号控制,任何时候收到有效的同步时钟信号,8进制计数器都立即执行清;当同步时钟信号无效时,8进制计数器对12进制计数器的输出信号脉冲进行计数,然后将计数值进行输出,直到8进制计数器计数值等于4后,8进制计数器停止计数,也停止输出。
此外,本发明提出一种采用流水线方式实现SM4密码算法的方法,利用上述系统,该方法包括如下步骤:
(1)存储准备信息
密钥寄存器存储128比特的数据作为加密/解密的密钥;加密/解密控制信号寄存器存储1比特的数据,若该数据为1,则表征为解密,若该数据为0,则表征为加密;输入信息存储器存储128比特的数据,并且每次数据被读走时立即往输入信息存储器存入新的128比特的数据;
(2)生成轮密钥
轮密钥用于SM4密码算法的32轮迭代过程中,是由轮密钥生成模块产生;
密钥寄存器的数据MK分成4个32比特的数据MK0、MK1、MK2、MK3,即MK=(MK0,MK1,MK2,MK3);这4个32比特的密钥数据分别与参量FK0、FK1、FK2、FK3送入2输入异或运算器进行异或运算,并将运算的结果存入寄存器X0、X1、X2、X3;
当轮密钥生成控制信号寄存器提供的轮密钥控制信号为0时,64进制计数器处于不工作状态;当轮密钥生成控制信号寄存器的轮密钥控制信号为1时,启动64进制计数器工作;
当64进制计数器输出值为1时,4个2输入数据选择器分别选择寄存器X0、X1、X2、X3的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CK0作为输出,输出给寄存器CK;32输出数据选择器处于不工作状态;随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中;至此等待64进制计数器的下一个输出信号的到来;
接着64进制计数器输出为2,4个2输入数据选择器分别选择寄存器K1、K2、K3、K4的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CK1作为输出,输出给寄存器CK;32输出数据选择器选择寄存器rk0作为输出寄存器,将寄存器K4的数据存入寄存器rk0;随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中;若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rk0的数据被输出给寄存器RK0,若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rk0的数据被输出给寄存器RK31;至此等待64进制计数器的下一个输出信号的到来;
接着64进制计数器输出为i(2<i<33),4个2输入数据选择器分别选择寄存器K1、K2、K3、K4的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CKi-1(2<i<33)作为输出,输出给寄存器CK;32输出数据选择器选择寄存器rki-2(2<i<33)作为输出寄存器,将寄存器K4的数据存入寄存器rki-2(2<i<33);随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中;若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rki-2(2<i<33)的数据被输出给寄存器RKi-2(2<i<33),若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rki-2(2<i<33)的数据被输出给寄存器RK33-i(2<i<33);至此等待64进制计数器的下一个输出信号的到来;
当64进制计数器输出为33时,4个2输入数据选择器停止工作,输出值不变;32输入数据选择器停止工作,输出值不变;32输出数据选择器选择寄存器rk31作为输出寄存器,将寄存器K4的数据存入寄存器rk31;若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rk31的数据被输出给寄存器RK31,若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rk31的数据被输出给寄存器RK0;至此32个轮密钥全部生成,64进制计数器停止工作和停止输出;
(3)生成轮数据
轮数据是SM4密码算法的32轮迭代过程中的中间数据,由轮数据生成模块产生;轮数据生成模块受同步时钟生成模块驱动,当启动控制信号寄存器提供的启动控制信号为1时,同步时钟生成模块启动工作,并输出1MHz时钟信号,从而初始化轮数据生成模块中的8进制计数器,进入可控的工作状态;
寄存器A0、A1、A2、A3用于存储输入的32比特数据;轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3用于存储由轮密钥生成模块产生的轮密钥;8个轮数据生成模块中,按由上至下的顺序,第1个轮数据生成模块获取轮密钥RK0、RK1、RK2、RK3;依此类推,第8个轮数据生成模块获取轮密钥RK28、RK29、RK30、RK31;
当8进制计数器输出值为1时,4个2输入数据选择器分别选择寄存器A0、A1、A2、A3的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器0作为输出,输出给寄存器RK;4输出数据选择器处于不工作状态;随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中;至此等待8进制计数器的下一个输出信号的到来;
当8进制计数器输出值为2时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器1作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B0作为输出寄存器,将寄存器D4的数据存入寄存器B0;随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中;至此等待8进制计数器的下一个输出信号的到来;
当8进制计数器输出值为3时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器2作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B1作为输出寄存器,将寄存器D4的数据存入寄存器B1;随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中;至此等待8进制计数器的下一个输出信号的到来;
当8进制计数器输出值为4时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器3作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B2作为输出寄存器,将寄存器D4的数据存入寄存器B2;随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中;至此等待8进制计数器的下一个输出信号的到来;
当8进制计数器输出值为5时,4个2输入数据选择器停止工作,输出值不变;4输入数据选择器停止工作,输出值不变;4输出数据选择器选择寄存器B3作为输出寄存器,将寄存器D4的数据存入寄存器B3;此后,8进制计数器保持输出值为5,等待下一个同步时钟信号的到来;
8个轮数据生成模块在同步时钟信号的驱动下,实现了数据的流水线作业;
(4)双字顺序调整
第8个轮数据生成模块输出的数据进入双字顺序调整模块;双字顺序调整模块实现了数据的字节顺序调整;
128比特的数据X=(X0,X1,X2,X3),经过双字顺序调整器的处理后,得到128比特的输出数据为Y=(X3,X2,X1,X0);
(5)信息输出
输出信息存储器接收双字顺序调整器输出的数据并存储,等待外部设备读取。
(三)有益效果
本发明提出的采用流水线方式实现SM4密码算法的系统及方法,提高了加密/解密的速度,可满足大数据量、高实时性的加密/解密应用需求;同时通过对轮密钥生成模块和轮数据生成模块的优化,减少了FPGA硬件门电路中的逻辑单元的消耗。
本发明的优点是,在FPGA硬件门电路中使用了流水线的方式实现了SM4密码算法,实现了SM4密码算法的高速运行,有效提高了数据进行加密/解密的处理速度;同时对轮密钥生成模块和轮数据生成模块进行优化,节省了FPGA的硬件资源。
附图说明
图1为本发明实施例的系统框图及流水线实现方法;
图2为本发明实施例中同步时钟生成模块框图;
图3为本发明实施例中双字顺序调整模块框图;
图4为本发明实施例中轮密钥生成模块框图;
图5为本发明实施例中S盒变换器的字节替换数据表;
图6为本发明实施例中轮数据生成模块框图。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本实施例提出一种采用流水线方式实现SM4密码算法的系统及方法。该系统框图及流水线实现方法如图1所示。
该系统包括输入信息存储器、输出信息存储器、加密/解密控制信号寄存器、轮密钥生成控制信号寄存器、密钥寄存器、启动控制信号寄存器、同步时钟生成模块、双字顺序调整模块、轮密钥生成模块和轮数据生成模块。
输入信息存储器和输出信息存储器都是128比特的数据存储器,用于存储输入的数据和输出的数据。
加密/解密控制信号寄存器用于寄存加密/解密的控制信号,该控制信号决定系统进行加密操作或解密操作。
轮密钥生成控制信号寄存器用于寄存轮密钥生成模块的启动信号,该启动信号决定轮密钥生成模块是否启动工作状态。
密钥寄存器是寄存128比特密钥的,用于系统的加密/解密。
启动控制信号寄存器用于寄存同步时钟生成模块的控制信号,该控制信号决定同步时钟生成模块启动工作或停止工作。
同步时钟生成模块,如图2所示,用于为轮数据生成模块提供基准的同步时钟,同步时钟生成模块的输入为50MHz单端输入时钟,利用50进制计数器对50MHz输入时钟进行50分频,得到1MHz的单端输出时钟。同步时钟生成模块受启动控制信号寄存器的启动控制信号的控制,依据不同的启动控制信号可进入工作状态或停止工作状态。同步时钟生成模块输出的时钟信号供8个轮数据生成模块使用。
双字顺序调整模块,如图3所示,包括128比特的数据输入、双字顺序调整器、128比特的数据输出。128比特的输入数据X被划分为4个32比特的数据X0、X1、X2、X3,即X=(X0,X1,X2,X3),双字顺序调整器就是调整X0、X1、X2、X3的相对位置,128比特的输入数据X经过双字顺序调整器后,输出的128比特的数据为Y=(X3,X2,X1,X0)。
轮密钥生成模块,如图4所示,包括参量FK0、参量FK1、参量FK2、参量FK3、参量CKi(i=0~31)、密钥MK0、密钥MK1、密钥MK2、密钥MK3、2输入异或运算器、寄存器X0、寄存器X1、寄存器X2、寄存器X3、寄存器K0、寄存器K1、寄存器K2、寄存器K3、寄存器K4、寄存器CK、寄存器rki(i=0~31)、2输入数据选择器、32输入数据选择器、4输入异或运算器、3输入异或运算器、S盒变换器、循环移位器0、循环移位器1、32输出数据选择器、轮密钥输出控制器、轮密钥RKi(i=0~31)、16进制计数器、64进制计数器。
其中,依据SM4密码算法标准,参量FK0=A3B1BAC6,参量FK1=56AA3350,参量FK2=677D9197,参量FK3=B27022DC,参量CK0=00070E15,参量CK1=1C232A31,参量CK2=383F464D,参量CK3=545B6269,参量CK4=70777E85,参量CK5=8C939AA1,参量CK6=A8AFB6BD,参量CK7=C4CBD2D9,参量CK8=E0E7EEF5,参量CK9=FC030A11,参量CK10=181F262D,参量CK11=343B4249,参量CK12=50575E65,参量CK13=6C737A81,参量CK14=888F969D,参量CK15=A4ABB2B9,参量CK16=C0C7CED5,参量CK17=DCE3EAF1,参量CK18=F8FF060D,参量CK19=141B2229,参量CK20=30373E45,参量CK21=4C535A61,参量CK22=686F767D,参量CK23=848B9299,参量CK24=A0A7AEB5,参量CK25=BCC3CAD1,参量CK26=D8DFE6ED,参量CK27=F4FB0209,参量CK28=10171E25,参量CK29=2C333A41,参量CK30=484F565D,参量CK31=646B7279;
密钥MK0、密钥MK1、密钥MK2、密钥MK3均为32比特的密钥输入数据,由密钥寄存器提供;
2输入异或运算器,是对2个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
寄存器X0、寄存器X1、寄存器X2、寄存器X3、寄存器K0、寄存器K1、寄存器K2、寄存器K3、寄存器K4、寄存器CK、寄存器rki(i=0~31)均是32位的数据寄存器;
2输入数据选择器,是根据64进制计数器提供的控制信号,决定2个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也为32比特的数据;
32输入数据选择器,就是根据64进制计数器提供的控制信号,决定32个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也为32比特的数据;
4输入异或运算器,是对4个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
3输入异或运算器,是对3个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
S盒变换器,是将一个32比特的输入数据以字节为单位,用完全不相关的新的字节进行替换,字节替换表如图5所示;
循环移位器0,是将一个32比特的输入数据,向左循环移位13位,输出一个新的32比特的数据;
循环移位器1,是将一个32比特的输入数据,向左循环移位23位,输出一个新的32比特的数据;
32输出数据选择器,是根据64进制计数器提供的控制信号,将输入的数据送入指定的32个输出中的某一个进行输出,输入为32比特的数据,每一个输出也是32比特的数据;
轮密钥输出控制器,依据加密/解密控制信号,决定轮密钥RKi(i=0~31)的输出值;
轮密钥RKi(i=0~31),是寄存生成的32个轮密钥,每个轮密钥都是32比特的数据;
16进制计数器,是对输入的50MHz时钟信号脉冲进行计数,每当计数值为8,输出一个高电平,每当计数值为15,输出一个低电平;
64进制计数器,受轮密钥生成控制信号控制,当收到有效的控制信号后,64进制计数器启动工作,并对16进制计数器的输出信号脉冲进行计数,然后将计数值进行输出,当64进制计数器计数值等于34后,64进制计数器停止计数,也停止输出。
轮数据生成模块,如图6所示,包括寄存器A0、寄存器A1、寄存器A2、寄存器A3、寄存器B0、寄存器B1、寄存器B2、寄存器B3、寄存器D0、寄存器D1、寄存器D2、寄存器D3、寄存器D4、寄存器RK、轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3、2输入数据选择器、4输入数据选择器、4输出数据选择器、2输入异或运算器、4输入异或运算器、5输入异或运算器、S盒变换器、循环移位器2、循环移位器3、循环移位器4、循环移位器5、12进制计数器和8进制计数器。
其中,寄存器A0、寄存器A1、寄存器A2、寄存器A3、寄存器B0、寄存器B1、寄存器B2、寄存器B3、寄存器D0、寄存器D1、寄存器D2、寄存器D3、寄存器D4、寄存器RK、轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3,均为32比特的数据寄存器。其中,寄存器A0、寄存器A1、寄存器A2、寄存器A3,用于寄存输入的数据;寄存器B0、寄存器B1、寄存器B2、寄存器B3,用于寄存输出的数据;轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3,用于寄存相应的输入轮密钥;
4输入数据选择器,是根据8进制计数器提供的控制信号,决定4个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也是32比特的数据;
4输出数据选择器,是根据8进制计数器提供的控制信号,将输入的数据送入指定的4个输出中的某一个进行输出,输入为32比特的数据,每一个输出也是32比特的数据;
5输入异或运算器,是对5个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
循环移位器2,是将一个32比特的输入数据,向左循环移位2位,输出一个新的32比特的数据;
循环移位器3,是将一个32比特的输入数据,向左循环移位10位,输出一个新的32比特的数据;
循环移位器4,是将一个32比特的输入数据,向左循环移位18位,输出一个新的32比特的数据;
循环移位器5,是将一个32比特的输入数据,向左循环移位24位,输出一个新的32比特的数据;
12进制计数器,是对输入的50MHz时钟信号脉冲进行计数,每当计数值为6,输出一个高电平,每当计数值为11,输出一个低电平;
8进制计数器,受同步时钟信号控制,任何时候收到有效的同步时钟信号,8进制计数器都立即执行清零。当同步时钟信号无效时,8进制计数器对12进制计数器的输出信号脉冲进行计数,然后将计数值进行输出,直到8进制计数器计数值等于4后,8进制计数器停止计数,也停止输出。
本实施例提出的采用流水线方式实现SM4密码算法的方法,通过上述系统而实现。该方法的主要工作过程如下:
(1)存储准备信息
密钥寄存器存储128比特的数据作为加密/解密的密钥;加密/解密控制信号寄存器存储1比特的数据,若该数据为1,则表征为解密,若该数据为0,则表征为加密;输入信息存储器存储128比特的数据,并且每次数据被读走时立即往输入信息存储器存入新的128比特的数据。
(2)生成轮密钥
轮密钥用于SM4密码算法的32轮迭代过程中,是由轮密钥生成模块产生,轮密钥生成模块具体实现如图4所示。
密钥寄存器的数据MK分成4个32比特的数据MK0、MK1、MK2、MK3,即MK=(MK0,MK1,MK2,MK3)。这4个32比特的密钥数据分别与参量FK0、FK1、FK2、FK3送入2输入异或运算器进行异或运算,并将运算的结果存入寄存器X0、X1、X2、X3。
当轮密钥生成控制信号寄存器提供的轮密钥控制信号为0时,64进制计数器处于不工作状态。当轮密钥生成控制信号寄存器的轮密钥控制信号为1时,启动64进制计数器工作。
当64进制计数器输出值为1时,4个2输入数据选择器分别选择寄存器X0、X1、X2、X3的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CK0作为输出,输出给寄存器CK;32输出数据选择器处于不工作状态。随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中。至此等待64进制计数器的下一个输出信号的到来。
接着64进制计数器输出为2,4个2输入数据选择器分别选择寄存器K1、K2、K3、K4的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CK1作为输出,输出给寄存器CK;32输出数据选择器选择寄存器rk0作为输出寄存器,将寄存器K4的数据存入寄存器rk0。随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中。若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rk0的数据被输出给寄存器RK0,若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rk0的数据被输出给寄存器RK31。至此等待64进制计数器的下一个输出信号的到来。
接着64进制计数器输出为i(2<i<33),4个2输入数据选择器分别选择寄存器K1、K2、K3、K4的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CKi-1(2<i<33)作为输出,输出给寄存器CK;32输出数据选择器选择寄存器rki-2(2<i<33)作为输出寄存器,将寄存器K4的数据存入寄存器rki-2(2<i<33)。随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中。若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rki-2(2<i<33)的数据被输出给寄存器RKi-2(2<i<33),若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rki-2(2<i<33)的数据被输出给寄存器RK33-i(2<i<33)。至此等待64进制计数器的下一个输出信号的到来。
当64进制计数器输出为33时,4个2输入数据选择器停止工作,输出值不变;32输入数据选择器停止工作,输出值不变;32输出数据选择器选择寄存器rk31作为输出寄存器,将寄存器K4的数据存入寄存器rk31。若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rk31的数据被输出给寄存器RK31,若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rk31的数据被输出给寄存器RK0。至此32个轮密钥全部生成,64进制计数器停止工作和停止输出。
(3)生成轮数据
轮数据是SM4密码算法的32轮迭代过程中的中间数据,是由轮数据生成模块产生。轮数据生成模块受同步时钟生成模块驱动,当图1中的启动控制信号寄存器提供的启动控制信号为1时,同步时钟生成模块启动工作,并输出1MHz时钟信号,从而初始化轮数据生成模块中的8进制计数器,进入可控的工作状态。轮数据生成模块具体实现如图6所示。
寄存器A0、A1、A2、A3是用于存储输入的32比特数据;轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3是用于存储由轮密钥生成模块产生的轮密钥;如附图1所示,8个轮数据生成模块中,按由上至下的顺序,第1个轮数据生成模块获取轮密钥RK0、RK1、RK2、RK3;依此类推,第8个轮数据生成模块获取轮密钥RK28、RK29、RK30、RK31。
当8进制计数器输出值为1时,4个2输入数据选择器分别选择寄存器A0、A1、A2、A3的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器0作为输出,输出给寄存器RK;4输出数据选择器处于不工作状态。随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中。至此等待8进制计数器的下一个输出信号的到来。
当8进制计数器输出值为2时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器1作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B0作为输出寄存器,将寄存器D4的数据存入寄存器B0。随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中。至此等待8进制计数器的下一个输出信号的到来。
当8进制计数器输出值为3时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器2作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B1作为输出寄存器,将寄存器D4的数据存入寄存器B1。随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中。至此等待8进制计数器的下一个输出信号的到来。
当8进制计数器输出值为4时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器3作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B2作为输出寄存器,将寄存器D4的数据存入寄存器B2。随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中。至此等待8进制计数器的下一个输出信号的到来。
当8进制计数器输出值为5时,4个2输入数据选择器停止工作,输出值不变;4输入数据选择器停止工作,输出值不变;4输出数据选择器选择寄存器B3作为输出寄存器,将寄存器D4的数据存入寄存器B3。此后,8进制计数器保持输出值为5,等待下一个同步时钟信号的到来。
如图1所示,8个轮数据生成模块在同步时钟信号的驱动下,实现了数据的流水线作业。
(4)双字顺序调整
如附图1所示,第8个轮数据生成模块输出的数据进入双字顺序调整模块。双字顺序调整模块实现了数据的字节顺序调整,其具体实现如图3所示。
128比特的数据X=(X0,X1,X2,X3),经过双字顺序调整器的处理后,得到128比特的输出数据为Y=(X3,X2,X1,X0)。
(5)信息输出
输出信息存储器接收双字顺序调整器输出的数据并存储,等待外部设备读取。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (2)
1.一种采用流水线方式实现SM4密码算法的系统,其特征在于,所述系统包括输入信息存储器、输出信息存储器、加密/解密控制信号寄存器、轮密钥生成控制信号寄存器、密钥寄存器、启动控制信号寄存器、同步时钟生成模块、双字顺序调整模块、轮密钥生成模块和轮数据生成模块;其中,
所述输入信息存储器和输出信息存储器,分别用于存储输入的数据和输出的数据;
所述加密/解密控制信号寄存器,用于寄存加密/解密的控制信号,该控制信号决定系统进行加密操作或解密操作;
所述轮密钥生成控制信号寄存器,用于寄存轮密钥生成模块的启动信号,该启动信号决定轮密钥生成模块是否启动工作状态;
所述密钥寄存器,用于系统的加密/解密;
所述启动控制信号寄存器,用于寄存同步时钟生成模块的控制信号,该控制信号决定同步时钟生成模块启动工作或停止工作;
所述同步时钟生成模块,用于为轮数据生成模块提供基准的同步时钟,同步时钟生成模块受启动控制信号寄存器的启动控制信号的控制,依据不同的启动控制信可进入工作状态或停止工作状态;
所述双字顺序调整模块,用于对输入数据进行双字序调整并对调整后的数据进行输出;
所述轮密钥生成模块,包括参量FK0、参量FK1、参量FK2、参量FK3、参量CKi(i=0~31)、密钥MK0、密钥MK1、密钥MK2、密钥MK3、2输入异或运算器、寄存器X0、寄存器X1、寄存器X2、寄存器X3、寄存器K0、寄存器K1、寄存器K2、寄存器K3、寄存器K4、寄存器CK、寄存器rki(i=0~31)、2输入数据选择器、32输入数据选择器、4输入异或运算器、3输入异或运算器、S盒变换器、循环移位器0、循环移位器1、32输出数据选择器、轮密钥输出控制器、轮密钥RKi(i=0~31)、16进制计数器和64进制计数器;其中,
依据SM4密码算法标准,参量FK0=A3B1BAC6,参量FK1=56AA3350,参量FK2=677D9197,参量FK3=B27022DC,参量CK0=00070E15,参量CK1=1C232A31,参量CK2=383F464D,参量CK3=545B6269,参量CK4=70777E85,参量CK5=8C939AA1,参量CK6=A8AFB6BD,参量CK7=C4CBD2D9,参量CK8=E0E7EEF5,参量CK9=FC030A11,参量CK10=181F262D,参量CK11=343B4249,参量CK12=50575E65,参量CK13=6C737A81,参量CK14=888F969D,参量CK15=A4ABB2B9,参量CK16=C0C7CED5,参量CK17=DCE3EAF1,参量CK18=F8FF060D,参量CK19=141B2229,参量CK20=30373E45,参量CK21=4C535A61,参量CK22=686F767D,参量CK23=848B9299,参量CK24=A0A7AEB5,参量CK25=BCC3CAD1,参量CK26=D8DFE6ED,参量CK27=F4FB0209,参量CK28=10171E25,参量CK29=2C333A41,参量CK30=484F565D,参量CK31=646B7279;
密钥MK0、密钥MK1、密钥MK2、密钥MK3均为32比特的密钥输入数据,由密钥寄存器提供;
2输入异或运算器,是对2个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
寄存器X0、寄存器X1、寄存器X2、寄存器X3、寄存器K0、寄存器K1、寄存器K2、寄存器K3、寄存器K4、寄存器CK、寄存器rki(i=0~31)均是32位的数据寄存器;
2输入数据选择器,是根据64进制计数器提供的控制信号,决定2个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也为32比特的数据;
32输入数据选择器,是根据64进制计数器提供的控制信号,决定32个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也为32比特的数据;
4输入异或运算器,是对4个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
3输入异或运算器,是对3个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
S盒变换器,是将一个32比特的输入数据以字节为单位,用完全不相关的新的字节进行替换;
循环移位器0,是将一个32比特的输入数据,向左循环移位13位,输出一个新的32比特的数据;
循环移位器1,是将一个32比特的输入数据,向左循环移位23位,输出一个新的32比特的数据;
32输出数据选择器,是根据64进制计数器提供的控制信号,将输入的数据送入指定的32个输出中的某一个进行输出,输入为32比特的数据,每一个输出也是32比特的数据;
轮密钥输出控制器,依据加密/解密控制信号,决定轮密钥RKi(i=0~31)的输出值;
轮密钥RKi(i=0~31),是寄存生成的32个轮密钥,每个轮密钥都是32比特的数据;
16进制计数器,是对输入的50MHz时钟信号脉冲进行计数,每当计数值为8,输出一个高电平,每当计数值为15,输出一个低电平;
64进制计数器,受轮密钥生成控制信号控制,当收到有效的控制信号后,64进制计数器启动工作,并对16进制计数器的输出信号脉冲进行计数,然后将计数值进行输出,当64进制计数器计数值等于34后,64进制计数器停止计数,也停止输出;
所述轮数据生成模块,包括寄存器A0、寄存器A1、寄存器A2、寄存器A3、寄存器B0、寄存器B1、寄存器B2、寄存器B3、寄存器D0、寄存器D1、寄存器D2、寄存器D3、寄存器D4、寄存器RK、轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3、2输入数据选择器、4输入数据选择器、4输出数据选择器、2输入异或运算器、4输入异或运算器、5输入异或运算器、S盒变换器、循环移位器2、循环移位器3、循环移位器4、循环移位器5、12进制计数器和8进制计数器;其中,
寄存器A0、寄存器A1、寄存器A2、寄存器A3、寄存器B0、寄存器B1、寄存器B2、寄存器B3、寄存器D0、寄存器D1、寄存器D2、寄存器D3、寄存器D4、寄存器RK、轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3,均为32比特的数据寄存器;其中,寄存器A0、寄存器A1、寄存器A2、寄存器A3,用于寄存输入的数据;寄存器B0、寄存器B1、寄存器B2、寄存器B3,用于寄存输出的数据;轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3,用于寄存相应的输入轮密钥;
4输入数据选择器,是根据8进制计数器提供的控制信号,决定4个输入之中选择一个进行输出,每一个输入均为32比特的数据,输出也是32比特的数据;
4输出数据选择器,是根据8进制计数器提供的控制信号,将输入的数据送入指定的4个输出中的某一个进行输出,输入为32比特的数据,每一个输出也是32比特的数据;
5输入异或运算器,是对5个32比特的输入数据进行逐位异或运算,输出一个新的32比特的数据;
循环移位器2,是将一个32比特的输入数据,向左循环移位2位,输出一个新的32比特的数据;
循环移位器3,是将一个32比特的输入数据,向左循环移位10位,输出一个新的32比特的数据;
循环移位器4,是将一个32比特的输入数据,向左循环移位18位,输出一个新的32比特的数据;
循环移位器5,是将一个32比特的输入数据,向左循环移位24位,输出一个新的32比特的数据;
12进制计数器,是对输入的50MHz时钟信号脉冲进行计数,每当计数值为6,输出一个高电平,每当计数值为11,输出一个低电平;
8进制计数器,受同步时钟信号控制,任何时候收到有效的同步时钟信号,8进制计数器都立即执行清;当同步时钟信号无效时,8进制计数器对12进制计数器的输出信号脉冲进行计数,然后将计数值进行输出,直到8进制计数器计数值等于4后,8进制计数器停止计数,也停止输出。
2.一种采用流水线方式实现SM4密码算法的方法,其特征在于,利用权利要求1所述的系统,所述方法包括如下步骤:
(1)存储准备信息
密钥寄存器存储128比特的数据作为加密/解密的密钥;加密/解密控制信号寄存器存储1比特的数据,若该数据为1,则表征为解密,若该数据为0,则表征为加密;输入信息存储器存储128比特的数据,并且每次数据被读走时立即往输入信息存储器存入新的128比特的数据;
(2)生成轮密钥
轮密钥用于SM4密码算法的32轮迭代过程中,是由轮密钥生成模块产生;
密钥寄存器的数据MK分成4个32比特的数据MK0、MK1、MK2、MK3,即MK=(MK0,MK1,MK2,MK3);这4个32比特的密钥数据分别与参量FK0、FK1、FK2、FK3送入2输入异或运算器进行异或运算,并将运算的结果存入寄存器X0、X1、X2、X3;
当轮密钥生成控制信号寄存器提供的轮密钥控制信号为0时,64进制计数器处于不工作状态;当轮密钥生成控制信号寄存器的轮密钥控制信号为1时,启动64进制计数器工作;
当64进制计数器输出值为1时,4个2输入数据选择器分别选择寄存器X0、X1、X2、X3的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CK0作为输出,输出给寄存器CK;32输出数据选择器处于不工作状态;随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中;至此等待64进制计数器的下一个输出信号的到来;
接着64进制计数器输出为2,4个2输入数据选择器分别选择寄存器K1、K2、K3、K4的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CK1作为输出,输出给寄存器CK;32输出数据选择器选择寄存器rk0作为输出寄存器,将寄存器K4的数据存入寄存器rk0;随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中;若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rk0的数据被输出给寄存器RK0,若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rk0的数据被输出给寄存器RK31;至此等待64进制计数器的下一个输出信号的到来;
接着64进制计数器输出为i(2<i<33),4个2输入数据选择器分别选择寄存器K1、K2、K3、K4的数据作为其输出值,输出给寄存器K0、K1、K2、K3;32输入数据选择器选择常量CKi-1(2<i<33)作为输出,输出给寄存器CK;32输出数据选择器选择寄存器rki-2(2<i<33)作为输出寄存器,将寄存器K4的数据存入寄存器rki-2(2<i<33);随后寄存器K1、K2、K3、CK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器0和循环移位器1进行循环移位操作,字节替换后得到的数据、循环移位器0的输出值和循环移位器1的输出值一并送入3输入异或运算器进行异或运算,运算结果再与寄存器K0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器K4中;若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rki-2(2<i<33)的数据被输出给寄存器RKi-2(2<i<33),若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rki-2(2<i<33)的数据被输出给寄存器RK33-i(2<i<33);至此等待64进制计数器的下一个输出信号的到来;
当64进制计数器输出为33时,4个2输入数据选择器停止工作,输出值不变;32输入数据选择器停止工作,输出值不变;32输出数据选择器选择寄存器rk31作为输出寄存器,将寄存器K4的数据存入寄存器rk31;若加密/解密控制信号寄存器提供的加密/解密控制信号为0,则寄存器rk31的数据被输出给寄存器RK31,若加密/解密控制信号寄存器提供的加密/解密控制信号为1,则寄存器rk31的数据被输出给寄存器RK0;至此32个轮密钥全部生成,64进制计数器停止工作和停止输出;
(3)生成轮数据
轮数据是SM4密码算法的32轮迭代过程中的中间数据,由轮数据生成模块产生;轮数据生成模块受同步时钟生成模块驱动,当启动控制信号寄存器提供的启动控制信号为1时,同步时钟生成模块启动工作,并输出1MHz时钟信号,从而初始化轮数据生成模块中的8进制计数器,进入可控的工作状态;
寄存器A0、A1、A2、A3用于存储输入的32比特数据;轮密钥输入寄存器0、轮密钥输入寄存器1、轮密钥输入寄存器2、轮密钥输入寄存器3用于存储由轮密钥生成模块产生的轮密钥;8个轮数据生成模块中,按由上至下的顺序,第1个轮数据生成模块获取轮密钥RK0、RK1、RK2、RK3;依此类推,第8个轮数据生成模块获取轮密钥RK28、RK29、RK30、RK31;
当8进制计数器输出值为1时,4个2输入数据选择器分别选择寄存器A0、A1、A2、A3的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器0作为输出,输出给寄存器RK;4输出数据选择器处于不工作状态;随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中;至此等待8进制计数器的下一个输出信号的到来;
当8进制计数器输出值为2时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器1作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B0作为输出寄存器,将寄存器D4的数据存入寄存器B0;随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中;至此等待8进制计数器的下一个输出信号的到来;
当8进制计数器输出值为3时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器2作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B1作为输出寄存器,将寄存器D4的数据存入寄存器B1;随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中;至此等待8进制计数器的下一个输出信号的到来;
当8进制计数器输出值为4时,4个2输入数据选择器分别选择寄存器D1、D2、D3、D4的数据作为其输出值,输出给寄存器D0、D1、D2、D3;4输入数据选择器选择轮密钥输入寄存器3作为输出,输出给寄存器RK;4输出数据选择器选择寄存器B2作为输出寄存器,将寄存器D4的数据存入寄存器B2;随后寄存器A1、A2、A3、RK的数据被送入4输入异或运算器进行异或运算,运算的结果送入S盒变换器进行字节替换,替换后得到的数据分别送入循环移位器2、循环移位器3、循环移位器4和循环移位器5进行循环移位操作,字节替换后得到的数据、循环移位器2、循环移位器3、循环移位器4和循环移位器5的输出值一并送入5输入异或运算器进行异或运算,运算结果再与寄存器A0的数据送入2输入异或运算器进行异或运算,运算结果存储在寄存器D4中;至此等待8进制计数器的下一个输出信号的到来;
当8进制计数器输出值为5时,4个2输入数据选择器停止工作,输出值不变;4输入数据选择器停止工作,输出值不变;4输出数据选择器选择寄存器B3作为输出寄存器,将寄存器D4的数据存入寄存器B3;此后,8进制计数器保持输出值为5,等待下一个同步时钟信号的到来;
8个轮数据生成模块在同步时钟信号的驱动下,实现了数据的流水线作业;
(4)双字顺序调整
第8个轮数据生成模块输出的数据进入双字顺序调整模块;双字顺序调整模块实现了数据的字节顺序调整;
128比特的数据X=(X0,X1,X2,X3),经过双字顺序调整器的处理后,得到128比特的输出数据为Y=(X3,X2,X1,X0);
(5)信息输出
输出信息存储器接收双字顺序调整器输出的数据并存储,等待外部设备读取。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811274070.0A CN109299614A (zh) | 2018-10-30 | 2018-10-30 | 一种采用流水线方式实现sm4密码算法的系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811274070.0A CN109299614A (zh) | 2018-10-30 | 2018-10-30 | 一种采用流水线方式实现sm4密码算法的系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109299614A true CN109299614A (zh) | 2019-02-01 |
Family
ID=65159033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811274070.0A Pending CN109299614A (zh) | 2018-10-30 | 2018-10-30 | 一种采用流水线方式实现sm4密码算法的系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109299614A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109995508A (zh) * | 2019-04-30 | 2019-07-09 | 上海安路信息科技有限公司 | 一种fpga码流的加解密装置及方法 |
CN110034918A (zh) * | 2019-03-15 | 2019-07-19 | 深圳市纽创信安科技开发有限公司 | 一种sm4加速方法和装置 |
CN111131158A (zh) * | 2019-11-21 | 2020-05-08 | 珠海剑心互动娱乐有限公司 | 单字节对称加密解密方法、装置及可读介质 |
CN112350819A (zh) * | 2020-10-23 | 2021-02-09 | 四川九洲电器集团有限责任公司 | 一种全流水线sms4加解密方法及系统 |
CN112765614A (zh) * | 2020-11-26 | 2021-05-07 | 神州龙芯智能科技有限公司 | 一种在fpga上实现sm4加密算法的模块及方法 |
CN113078996A (zh) * | 2021-02-25 | 2021-07-06 | 西安电子科技大学 | Sm4密码算法的fpga优化实现方法、系统及应用 |
CN113949504A (zh) * | 2021-10-15 | 2022-01-18 | 中国计量大学 | 一种适用于移动设备的高速sm4密码算法电路 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105306195A (zh) * | 2014-07-22 | 2016-02-03 | 英特尔公司 | Sm4加速处理器、方法、系统和指令 |
US9503256B2 (en) * | 2014-12-24 | 2016-11-22 | Intel Corporation | SMS4 acceleration hardware |
CN106506140A (zh) * | 2015-09-06 | 2017-03-15 | 深圳市中兴微电子技术有限公司 | 一种aes加解密方法和装置 |
CN106788975A (zh) * | 2016-12-28 | 2017-05-31 | 北京天融信网络安全技术有限公司 | 基于sm4密码算法的加解密装置 |
-
2018
- 2018-10-30 CN CN201811274070.0A patent/CN109299614A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105306195A (zh) * | 2014-07-22 | 2016-02-03 | 英特尔公司 | Sm4加速处理器、方法、系统和指令 |
US9503256B2 (en) * | 2014-12-24 | 2016-11-22 | Intel Corporation | SMS4 acceleration hardware |
CN106506140A (zh) * | 2015-09-06 | 2017-03-15 | 深圳市中兴微电子技术有限公司 | 一种aes加解密方法和装置 |
CN106788975A (zh) * | 2016-12-28 | 2017-05-31 | 北京天融信网络安全技术有限公司 | 基于sm4密码算法的加解密装置 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110034918A (zh) * | 2019-03-15 | 2019-07-19 | 深圳市纽创信安科技开发有限公司 | 一种sm4加速方法和装置 |
CN110034918B (zh) * | 2019-03-15 | 2023-10-20 | 深圳市纽创信安科技开发有限公司 | 一种sm4加速方法和装置 |
CN109995508A (zh) * | 2019-04-30 | 2019-07-09 | 上海安路信息科技有限公司 | 一种fpga码流的加解密装置及方法 |
CN109995508B (zh) * | 2019-04-30 | 2021-02-02 | 上海安路信息科技有限公司 | 一种fpga码流的加解密装置及方法 |
CN111131158A (zh) * | 2019-11-21 | 2020-05-08 | 珠海剑心互动娱乐有限公司 | 单字节对称加密解密方法、装置及可读介质 |
CN112350819A (zh) * | 2020-10-23 | 2021-02-09 | 四川九洲电器集团有限责任公司 | 一种全流水线sms4加解密方法及系统 |
CN112765614A (zh) * | 2020-11-26 | 2021-05-07 | 神州龙芯智能科技有限公司 | 一种在fpga上实现sm4加密算法的模块及方法 |
CN113078996A (zh) * | 2021-02-25 | 2021-07-06 | 西安电子科技大学 | Sm4密码算法的fpga优化实现方法、系统及应用 |
CN113949504A (zh) * | 2021-10-15 | 2022-01-18 | 中国计量大学 | 一种适用于移动设备的高速sm4密码算法电路 |
CN113949504B (zh) * | 2021-10-15 | 2023-09-19 | 中国计量大学 | 一种适用于移动设备的高速sm4密码算法电路 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109299614A (zh) | 一种采用流水线方式实现sm4密码算法的系统及方法 | |
US11405179B2 (en) | Multimode cryptographic processor | |
US20220138349A1 (en) | Cryptographic architecture for cryptographic permutation | |
US10659216B2 (en) | Data processing method and apparatus | |
CN101854353B (zh) | 一种基于fpga的多芯片并行加密方法 | |
CN102223228A (zh) | 基于fpga的aes加密芯片设计方法及嵌入式加密系统 | |
US7043017B2 (en) | Key stream cipher device | |
CN1973481B (zh) | 用于进行rc4加密的装置、网络系统和方法 | |
CN102664729A (zh) | 一种基于fpga的aes加解密网络通讯装置及其实现方法 | |
CN112329038B (zh) | 一种基于usb接口的数据加密控制系统及芯片 | |
EP3803672B1 (en) | Memory-efficient hardware cryptographic engine | |
CN105897406A (zh) | 一种明密文等长的aes加解密的装置 | |
CN106788975A (zh) | 基于sm4密码算法的加解密装置 | |
US11429751B2 (en) | Method and apparatus for encrypting and decrypting data on an integrated circuit | |
CN109190413B (zh) | 一种基于fpga和md5加密的串行通信系统 | |
CN103346878B (zh) | 一种基于fpga高速串行io的保密通信方法 | |
Tay et al. | Compact and low power aes block cipher using lightweight key expansion mechanism and optimal number of s-boxes | |
CN102411683B (zh) | 一种适用于嵌入式系统的基于高速缓存的aes加速器 | |
CN104486069A (zh) | 一种基于fpga实现的gost加解密设备及其方法 | |
CN101515853B (zh) | 信息终端及其信息安全装置 | |
CN105049203A (zh) | 一种支持多工作模式的可配置3des加解密算法电路 | |
CN104158650B (zh) | 基于数据冗余检错机制的aes加/解密电路 | |
CN105187198B (zh) | 一种用于IPSec协议下的AES算法硬件实现装置 | |
Yao et al. | A dynamic reconfigurable design of multiple cryptographic algorithms based on FPGA | |
CN103455766A (zh) | 一种基于状态机的国密sm1算法控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190201 |