CN104579636A - 一种超高速实现sm4算法的系统及其运行方法 - Google Patents
一种超高速实现sm4算法的系统及其运行方法 Download PDFInfo
- Publication number
- CN104579636A CN104579636A CN201510083027.6A CN201510083027A CN104579636A CN 104579636 A CN104579636 A CN 104579636A CN 201510083027 A CN201510083027 A CN 201510083027A CN 104579636 A CN104579636 A CN 104579636A
- Authority
- CN
- China
- Prior art keywords
- module
- enciphering
- signal
- deciphering
- data
- 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.)
- Granted
Links
Landscapes
- Storage Device Security (AREA)
Abstract
本发明涉及一种超高速实现SM4算法的系统,包括控制模块、密扩/加/解密模块、加/解密模块、解/加密模块、数据分路器、密扩/加解密选择器、轮密/结果分路器、结果选择器,发明解决了现有硬件系统中必须要等待32个轮密钥计算完毕才可加密带来的速度低下的问题,在单任务运算时处理速度即可达到现有硬件系统的近两倍;发明基于模块复用的思想,实现了三组任务的同步加/解密运算,解决了传统设计中在频繁的加密任务时解密模块被闲置的问题,有效提高了系统的利用率和运算速度,在密钥未变的多任务运算时处理速度达到单任务运算的三倍,最快达到现有硬件系统的六倍。
Description
技术领域
本发明涉及一种超高速实现SM4算法的系统及其运行方法,属于信息加密技术领域。
背景技术
2012年3月,国家密码安全局正式确立SM4分组密码算法作为行业标准,目前,SM4标准在我国部分领域已经得到一定规模的商用推广。未来十年,无线局域网、金融、国防、电子商务、视频加密等领域将需要近1亿个SM4算法的加解密系统,因此,研制高性能的SM4算法加解密系统成为业内普遍关注的热点。
SM4算法是一个分组密码算法,数据长度为128比特,密钥长度也为128比特。密钥经过32次非线性迭代运算,生成32个32位轮密钥。将明文分组为4组32位数据后,明文数据X0、X1、X2、X3与轮密钥rk0进行非线性迭代运算(简称一次F变换),得到Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki),经过如此32轮F变换后,将最后四轮生成的数据反序输出,即得128比特的加密密文。为了实现密文的高安全性,每一加密运算都必须经过32轮非线性迭代运算,每轮运算又包括异或、非线性变换τ(由四个S盒查找表构成)、线性变换L(其中:L(B)=B⊕(B<<<2))⊕(B<<<10)⊕(B<<<18)⊕(B<<<24))、再异或等许多步骤,从而得到F(X0,X1,X2,X3,rki)=X0⊕L(τ(X1⊕X2⊕X3⊕rki))。解密算法与加密算法的结构相同,不同的只是轮密钥的使用顺序相反。密钥扩展算法与加密算法类似,只需将其中的L变换变为L’变换,L’(B)=B⊕(B<<<13))⊕(B<<<23),故本发明中简称其完整的一轮变换为一次F’变换;同时,其F’变换的输入变量要求为128位加密密钥MK分为四组后分别与系统参数FK0—FK3的异或,即MK0⊕FK0、MK1⊕FK1、MK2⊕FK2、MK3⊕FK3,以及每轮所需的固有参数CKi,从而得到F’(MK0⊕FK0,MK1⊕FK1,MK2⊕FK2,MK3⊕FK3,CKi)=(MK0⊕FK0)⊕L’(τ((MK1⊕FK1)⊕(MK2⊕FK2)⊕(MK3⊕FK3)⊕CKi))。
SM4算法提供了卓越的安全性,但是其运算复杂度极高,过程冗长,非常不适应于网络传输和视频加密等对速度要求较高的场合。由于软件实现会受到处理器速度和串行运算方式的限制,很难达到高速数据流的实时加解密,因此,开发快速运行的硬件加速器,从而实现高速数据流的实时加解密功能,是当今SM4加解密系统设计中所亟需解决的重要问题。
中国专利文献CN103812641A公开了一种实现SM4分组对称密码算法的系统,包括:输入密钥处理及结果存储器,用于对输入密钥进行处理,得到直接参与迭代运算的结果,并进行存储;密钥缓存器,用于根据控制模块输出的控制信号更新和存储密钥扩展运算的中间结果,并解密运算需要的轮密钥;数据缓存器,用于根据控制模块输出的控制信号更新和存储加解密迭代运算的中间结果;数据处理选择模块,用于根据控制模块输出的控制信号,选择参与运算的数据为密钥还是加解密的数据;运算逻辑模块,用于进行加解密运算和密钥扩展运算;控制模块,用于根据输入的工作模式控制信号,输出相应的加解密控制信号和密钥扩展控制信号。该专利存在以下缺陷:一次解密运算要经过96轮迭代时间,严重降低了数据处理速度,不适用于一些对速度要求较高的场合。
中国专利文献CN103746796A公开了一种实现智能卡SM4密码算法的协处理器,该协处理器包括:接口模块、有限状态机模块、寄存器文件模块和逻辑功能模块,其中,接口模块用于实现与外部的控制模块进行数据交互;有限状态机模块用于对寄存器文件模块和逻辑功能模块进行控制,并向接口模块返回运行状态信号;寄存器文件模块用于对相应寄存器进行读/写操作,及将数据送到逻辑功能模块进行处理并取回相应的结果;逻辑功能模块用于对寄存器文件模块发送来的数据轮流进行密钥扩展的轮运算和加/解密的轮运算,直至32轮结束,并向寄存器文件模块返回每次运算的结果。
上述两项专利都是致力于降低系统的面积和冗余度,将密钥扩展模块与加/解密模块合并,但是其由于密钥扩展和数据加/解密不能同步进行,一次加密运算必须经过32轮密钥扩展和32轮加密总共64轮迭代时间,严重降低了数据处理速度,不适用于一些对速度要求较高的场合。
在传统设计中,密钥扩展模块、加密模块和解密模块分立,通常都采用等待32个轮密钥计算完毕后再启动加密模块的方法,显然不能满足网络传输、视频加密等高速领域的要求。同时,由于同一用户的密钥在大多时候都比较固定,同一轮密钥可以连续加/解密多组数据,这时传统设计中仍需额外的密钥扩展,不仅会降低运算的处理速度,也带来不必要的动态功耗;而且,由于一组要处理的数据往往远超128比特,多数应用场合会有连续的加密或解密任务,从而导致加密模块连续运行但解密模块长期闲置,或者解密模块连续运行加密模块长期闲置,降低了系统的利用率,严重影响了数据的运算速度。
发明内容
针对现有技术的不足,本发明公开了一种超高速实现SM4算法的系统;
本发明还公开了上述系统的运行方法;
本发明所述系统充分利用有限的面积资源,使得对高速数据流采用SM4加解密的过程十分简单高效,所述系统作为微处理器外围电路或作为IP核嵌入到片上系统中完成数据的实时加解密功能,适合于采用SM4算法作为加密标准的安全应用领域,尤其适用于网络传输和视频加密等对速度要求较高的领域。
本发明的技术方案为:
一种超高速实现SM4算法的系统,包括:控制模块、密扩/加/解密模块、加/解密模块、解/加密模块、数据分路器、密扩/加解密选择器、轮密/结果分路器、结果选择器,所述控制模块包括微处理器接口、启动模块、数据通路模块、数据缓存区、比较器、异或运算模块和新/旧轮密选择器,所述数据缓存区包括旧密钥存储区、新密钥存储区、系统参数存储区、固有参数存储区、原始数据存储区、旧轮密存储区、新轮密存储区和结果数据存储区;
所述微处理器接口连接微处理器;所述启动模块的三组迭代次数输入分别连接所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的迭代次数输出,所述启动模块的三个启动指令输出分别连接所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的启动指令输入;所述数据通路模块的三组迭代次数输入分别连接所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的迭代次数输出,所述数据通路模块的三个通路设好信号输出分别连接所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的通路设好信号输入;所述数据通路模块通过其第3、4、5、6组地址输出连接所述数据分路器、所述密扩/加解密选择器、所述轮密/结果分路器、所述结果选择器的地址输入;所述数据分路器的数据输入连接所述原始数据存储区的输出和所述新/旧轮密选择器的输出;所述数据分路器的输出连接所述密扩/加解密选择器、所述加/解密模块、所述解/加密模块的数据输入;所述密扩/加解密选择器的数据输入连接所述异或运算模块、所述固有参数存储区的输出和所述数据分路器的输出;所述密扩/加解密选择器的输出连接所述密扩/加/解密模块的数据输入;所述密扩/加/解密模块的数据输出连接所述轮密/结果分路器的数据输入;所述轮密/结果分路器的输出连接所述新轮密存储区的输入、所述结果选择器的输入;所述结果选择器的数据输入连接所述轮密/结果分路器的输出、所述加/解密模块的输出、所述解/加密模块的输出;所述结果选择器的输出连接所述结果数据存储区;
所述密扩/加/解密模块根据接收的所述控制模块的指令,选择自身的工作模式为密钥扩展或者加密/解密,选择自身的工作模式首选为密钥扩展;所述加/解密模块根据所述控制模块输出的数据选择自身的工作模式为加密或者解密,选择自身的工作模式首选为加密;所述解/加密模块根据控制模块输出的数据选择自身的工作模式为解密或者加密,选择自身的工作模式首选为解密;所述微处理器接口用于接收微处理器传送的指令和数据,并将最终加解密结果返回;所述启动模块用于接收所述微处理器接口输出的系统指令及所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块输出的迭代次数信号,根据所述比较器传送的密钥是否变化信号,综合分析确定当前的工作模块及其工作模式,并输出各模块的工作模式、数据号、所需密钥编号和系统的密钥扩展编号发送给所述数据通路模块,输出启动指令给所选模块,启动相应模块运行;所述数据通路模块用于接收所述启动模块输出的各模块的工作模式、数据号、所需密钥编号和系统的密钥扩展编号,根据接收的所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的迭代次数信号的变化,综合分析,及时判定满足新一轮运算条件的模块,确定当前要设置的数据通路,输出地址信号给所述固有参数存储区、所述旧轮密存储区、所述新轮密存储区、所述新/旧轮密选择器、所述数据分路器、所述密扩/加解密选择器、所述轮密/结果分路器及所述结果选择器,将数据顺利送达所需模块,最后输出通路设好信号给需要通路的模块。
根据本发明优选的,所述密扩/加/解密模块包括双向移位寄存器组、带保持的D触发器组、状态机模块、F/F’变换模块、带使能可选入的D触发器组,所述双向移位寄存器组为四输入32位双向移位寄存器U0_3,所述四输入32位双向移位寄存器U0_3包括四个32位寄存器,即U0—U3,所述带保持的D触发器组为带保持功能的32位D触发器U4,所述带使能可选入的D触发器组为带输出使能可选输入的32位D触发器Yd;
所述密扩/加/解密模块的数据输入模块包括所述四输入32位双向移位寄存器U0_3及所述带保持功能的32位D触发器U4,所述密扩/加/解密模块的数据输出模块为带输出使能可选输入的32位D触发器Yd,所述密扩/加/解密模块的数据输入模块的数据输出连接所述F/F’变换模块的数据输入,所述带输出使能可选输入的32位D触发器Yd的两路数据输入分别连接所述F/F’变换模块的数据输出、所述四输入32位双向移位寄存器U0_3的右移输出Q3;所述四输入32位双向移位寄存器U0_3的左移输入端DL与F/F’变换模块的数据输出相连接;
所述F/F’变换模块用于根据接收的类型输入信号将数据完成一次F变换或F’变换后输出;所述状态机模块接收控制模块的启动指令和通路已设好指令,将迭代次数信号输出给控制模块,产生地址信号a2、a1和a0,地址信号a2、a1控制所述四输入32位双向移位寄存器U0_3的工作模式,地址信号a0控制所述带保持功能的32位D触发器U4的工作模式,产生地址信号a2a1控制所述带输出使能可选输入的32位D触发器Yd,当所述四输入32位双向移位寄存器U0_3右移时选择其右移输出Q3作为数据输入,否则,选择F/F’变换模块的数据输出作为数据输入,同时,还产生使能信号控制所述带输出使能可选输入的32位D触发器Yd是否输出数据;所述四输入32位双向移位寄存器U0_3的工作模式包括保持、右移、输入、左移;所述带保持功能的32位D触发器U4工作模式为输入或保持。
根据本发明优选的,所述微处理器接口的指令输出、密钥输出、数据输出分别连接所述启动模块的指令输入、新密钥存储区和比较器的输入、原始数据存储区的输入;所述比较器的输入连接所述微处理器接口的密钥输出和旧轮密存储区的输出;所述比较器的输出连接所述启动模块的比较信号输入;所述启动模块的使能信号输出en1、en0分别连接所述新轮密存储区赋值到旧轮密存储区的使能输入、新密钥存储区赋值到旧密钥存储区的使能输入;所述启动模块的三个模块数据号输出、三个工作模式输出、两个所需密钥编号输出、一个密钥扩展编号输出分别连接所述数据通路模块的三个模块数据号输入、三个工作模式输入、两个所需密钥编号输入、一个密钥扩展编号输入;所述数据通路模块的数据号输出连接所述微处理器接口的数据号输入;所述数据通路模块的第0、1、2组地址输出分别连接所述固有参数存储区、旧轮密存储区和新轮密存储区、新/旧轮密选择器的地址输入;所述异或运算模块的输入同时连接所述新密钥存储区的输出和系统参数存储区的输出;所述新/旧轮密选择器的数据输入同时连接所述旧轮密存储区的输出和新轮密存储区的输出;所述旧密钥存储区的数据输入连接所述新密钥存储区的输出;所述旧轮密存储区的数据输入连接所述新轮密存储区的输出;所述结果数据存储区的输出连接所述微处理器接口的结果数据输入。
所述的加/解密模块和解/加密模块的硬件结构与密扩/加/解密模块的硬件结构一致,只需保留其F/F’变换模块的F变换部分,并将类型输入端口去掉即可。
上述系统均采用硬件描述语言VHDL(VHSIC Hardware Description Language)或VerilogHDL设计成超大规模集成电路实现。
根据本发明优选的,所述启动模块的运行方法,其中,内部变量i表示工作模块,i=0,即模块0,表示密扩/加/解密模块;i=1,即模块1,表示加/解密模块;i=2,即模块2,表示解/加密模块;内部变量nowsjhao表示最新数据的编号;输入信号ins表示加/解密指令;输入信号cmp表示新密钥和旧密钥是否相同的比较结果;输出信号en1表示新轮密存储区赋值到旧轮密存储区的使能信号;输出信号en0表示新密钥存储区赋值到旧密钥存储区的使能信号;输出信号mkh表示最新密钥扩展的编号;输出信号sjhao[i]表示模块i所处理数据的编号,输出信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0];moshi[i]表示模块i的工作模式,moshi[i]=0表示密钥扩展模式,moshi[i]=1表示加密模式,moshi[i]=2表示解密模式,输出信号moshi[2:0]包括moshi[2]、moshi[1]和moshi[0];输出信号xmh[i]表示模块i所需密钥的编号,输出信号xmh[2:1]包括xmh[2]和xmh[1];输入信号ddai表示迭代次数信号,ddai[i]=j表示:当0≤j≤32时,表示模块i已完成j次迭代,当j=33时,表示模块i已经完全空闲;输出信号st[i]表示模块i的启动信号;步骤如下:
S1、系统初始化,将最新数据的编号和最新密钥扩展的编号清零,即:nowsjhao=0,mkh=0;
S2、若接收到微处理器接口传来的加/解密指令ins,则进入S3,否则,停留在S2;
S3、存储接收的加/解密指令ins,同时将最新数据的编号加1,即nowsjhao++;
S4、根据比较器传送来的新密钥和旧密钥是否相同的比较结果cmp,若新密钥和旧密钥相同,则进入S5;否则,进入S14;
S5、若接收的加/解密指令ins是加密指令,则进入S6,否则,进入S10;
S6、当加/解密模块输出的迭代次数信号ddai[1]=33,判定加/解密模块的运行状态为空闲,进入S7;当加/解密模块输出的迭代次数信号ddai[1]≠33且解/加密模块输出的迭代次数信号ddai[2]=33,判定解/加密模块的运行状态为空闲,进入S8;当加/解密模块输出的迭代次数信号ddai[1]≠33且解/加密模块输出的迭代次数信号ddai[2]≠33且密扩/加/解密模块输出的迭代次数信号ddai[0]=33,判定密扩/加/解密模块的运行状态为空闲,进入S9;否则,停留在S6;
S7、选定当前数据工作模块为加/解密模块、工作模式为加密,即sjhao[1]=nowsjhao,moshi[1]=1,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块,加/解密模块启动运行,返回S2;
S8、选定当前数据工作模块为解/加密模块、工作模式为加密,即sjhao[2]=nowsjhao,moshi[2]=1,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块,解/加密模块启动运行,返回S2;
S9、选定当前数据工作模块为密扩/加/解密模块、工作模式为加密,即sjhao[0]=nowsjhao,moshi[0]=1,通过指令接口输出启动信号st[0]给密扩/加/解密模块,密扩/加/解密模块启动运行,并运行在F变化下,返回S2;
S10、当解/加密模块输出的迭代次数信号ddai[2]=33,判定解/加密模块的运行状态为空闲,进入S11;当解/加密模块输出的迭代次数信号ddai[2]≠33且加/解密模块输出的迭代次数信号ddai[1]=33,判定加/解密模块的运行状态为空闲,进入S12;当解/加密模块输出的迭代次数信号ddai[2]≠33且加/解密模块输出的迭代次数信号ddai[1]≠33且密扩/加/解密模块输出的迭代次数信号ddai[0]=33,判定密扩/加/解密模块的运行状态为空闲,进入S13;否则,停留在S10;
S11、选定当前数据工作模块为解/加密模块、工作模式为解密,即sjhao[2]=nowsjhao、moshi[2]=2,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块,解/加密模块启动运行,返回S2;
S12、选定当前数据工作模块为加/解密模块、工作模式为解密,即sjhao[1]=nowsjhao、moshi[1]=2,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块,加/解密模块启动运行,返回S2;
S13、选定当前数据工作模块为密扩/加/解密模块、工作模式为解密,即sjhao[0]=nowsjhao、moshi[0]=2,通过指令接口输出启动信号st[0]给密扩/加/解密模块,密扩/加/解密模块启动运行,并运行在F变化下,返回S2;
S14、当密扩/加/解密模块输出的迭代次数信号ddai为33,即ddai[0]=33,判定密扩/加/解密模块的运行状态为空闲,进入S15;否则,停留在S14;
S15、选定当前的工作模块为密扩/加/解密模块、工作模式为密钥扩展,即sjhao[0]=nowsjhao、moshi[0]=0,通过指令接口输出启动信号st[0]给密扩/加/解密模块,密扩/加/解密模块启动运行,并运行在F’变化下;将当前密钥扩展编号加1,即mkh++;同时,输出使能信号en0选通新密钥存储区到旧密钥存储区的赋值,输出使能信号en1选通新轮密存储区到旧轮密存储区的赋值;
S16、若接收的微处理器的指令是加密指令,则进入S17,否则,进入S20;
S17、当加/解密模块输出的迭代次数信号ddai[1]=33,判定加/解密模块的运行状态为空闲,进入S18;当加/解密模块输出的迭代次数信号ddai[1]≠33且解/加密模块输出的迭代次数信号ddai[2]=33,判定解/加密模块的运行状态为空闲,进入S19;否则,停留在S17;
S18、选定当前数据工作模块为加/解密模块、工作模式为加密,即sjhao[1]=nowsjhao、moshi[1]=1,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块,加/解密模块启动运行,返回S2;
S19、选定当前数据工作模块为解/加密模块、工作模式为加密,即sjhao[2]=nowsjhao、moshi[2]=1,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块,解/加密模块启动运行,返回S2;
S20、当解/加密模块输出的迭代次数信号ddai[2]=33,判定解/加密模块的运行状态为空闲,进入S21;当解/加密模块输出的迭代次数信号ddai[2]≠33且加/解密模块输出的迭代次数信号ddai[1]=33,判定加/解密模块的运行状态为空闲,进入S22;否则,停留在S20;
S21、选定当前数据工作模块为解/加密模块、工作模式为解密,即sjhao[2]=nowsjhao、moshi[2]=2,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块,解/加密模块启动运行,返回S2;
S22、选定当前数据工作模块为加/解密模块、工作模式为解密,即sjhao[1]=nowsjhao、moshi[1]=2,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块,加/解密模块启动运行,返回S2。
根据本发明优选的,所述数据通路模块的运行方法,其中,内部变量i表示工作模块,i=0,即模块0,表示密扩/加/解密模块;i=1,即模块1,表示加/解密模块;i=2,即模块2,表示解/加密模块;内部变量deng[i]表示模块i由于所需密钥尚未生成处在等待数据通路的状态,deng[i]=1表示模块i在等待数据通路,deng[i]=0表示模块i未等待数据通路;输出信号sjh是已完成数据的编号;输入信号mkh表示最新密钥扩展的编号输入信号;输入信号sjhao[i]表示模块i所处理数据的编号,输入信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0];输入信号moshi[i]表示模块i的工作模式,moshi[i]=0表示密钥扩展模式,moshi[i]=1表示加密模式,moshi[i]=2表示解密模式,输入信号moshi[2:0]包括moshi[2]、moshi[1]和moshi[0];输入信号xmh[i]表示模块i所需密钥的编号,输入信号xmh[2:1]包括xmh[2]和xmh[1];输出信号add[0]—add[6]是输出给相应模块的地址信号;输出信号tong[i]表示模块i的开启数据通路信号;输入信号ddai[i]表示模块i的迭代次数信号,ddai[i]=j表示:当0≤j≤32时,表示模块i已完成j次迭代,当j=33时,表示模块i已经完全空闲;通路任务Tongru和通路任务Tongchu是数据通路模块内部的子程序,通路任务Tongru负责开启数据输入通路,通路任务Tongchu负责开启数据输出通路;步骤如下:
S23、若模块i的迭代次数信号有变化时,即ddai[i]变化,当ddai[i]≠33,进入S24;当ddai[i]=33,停留在S23;
S24、若迭代次数信号有变化的模块为密扩/加/解密模块,即i=0,则进入S25;否则,进入S49;
S25、若密扩/加/解密模块在进行密钥扩展,即moshi[0]=0,则进入S26;否则,进入S44;
S26、若当前无等待数据通路的模块,即deng[1]=deng[2]=0,进入S27;若当前有1个等待数据通路的模块,即deng[1]=0且deng[2]=1或者deng[1]=1且deng[2]=0,进入S28;若当前有2个等待数据通路的模块,即deng[1]=deng[2]=1,进入S34;
S27、若ddai[0]≠32,表示密扩/加/解密模块需要输入数据,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行密钥扩展设置数据输入通路,其中,tong[2:0]包括tong[2]、tong[1]和tong[0],add[4:0]包括add[4]、add[3]、add[2]、add[1]和add[0];若ddai[0]≠0,表示密扩/加/解密模块需要输出数据,开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路,返回S23;
S28、若1个等待数据通路的模块的工作模式为加密,进入S29;若1个等待数据通路的模块的工作模式为解密,进入S32;
S29、定义1个等待数据通路的模块为模块j;
S30、若密扩/加/解密模块的密钥扩展快于模块j的轮密钥需求,进入S31;否则,返回S23;
S31、若ddai[0]≠32,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路,并消除模块j的等待通路状态,返回S23;
S32、若密扩/加/解密模块的密钥扩展刚好完成,进入S33;否则,返回S23;
S33、定义1个等待数据通路的模块为模块j,开启输出通路,即调用通路任务TongchuTongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,2,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行解密运算设置数据输入通路,并消除模块j的等待通路状态,返回S23;
S34、若2个等待数据通路的模块同为加密模式且迭代次数相同,进入S35;若2个等待数据通路的模块同为加密模式且迭代次数不同,进入S37;若2个等待数据通路的模块中,1个等待数据通路的模块在解密另1个等待数据通路的模块在加密,且在加密的等待数据通路的模块的迭代次数不为31,则进入S37;否则,进入S40;
S35、若密扩/加/解密模块的密钥扩展快于加/解密模块和解/加密模块的轮密钥需求,进入S36;否则,返回S23;
S36、若ddai[0]≠32,开启输入通路,即调用通路任Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(1,0,1,ddai[0],tong[2:0],add[4:0])为加/解密模块采用新轮密进行加密运算设置数据输入通路,并消除加/解密模块的等待通路状态;在三个CP脉冲后,调用通路任务Tongru(2,0,1,ddai[0],tong[2:0],add[4:0])为解/加密模块采用新轮密进行加密运算设置数据输入通路,并消除解/加密模块的等待通路状态,返回S23;
S37、若2个等待数据通路的模块一个等待数据通路的模块在解密另一个等待数据通路的模块在加密,加密模块为模块j;若2个等待数据通路的模块均为加密模式,2个等待数据通路的模块中选迭代次数较小的为模块j;
S38、若密扩/加/解密模块的密钥扩展快于模块j的轮密钥需求,则进入S39;否则,返回S23;
S39、若ddai[0]≠32,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路,在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路j,并消除模块j的等待通路状态,返回S23;
S40、若密扩/加/解密模块的密钥扩展刚好完成,进入S41;否则,返回S23;
S41、若2个等待数据通路的模块都在解密,则进入S42;若2个等待数据通路的模块中一个等待数据通路的模块在解密另一个等待数据通路的模块在加密且加密模块的迭代次数为31,进入S43;
S42、调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(1,0,2,ddai[0],tong[2:0],add[4:0])为加/解密模块采用新轮密进行解密运算设置数据输入通路,并消除加/解密模块的等待通路状态;在三个CP脉冲后,调用通路任务Tongru(2,0,2,ddai[0],tong[2:0],add[4:0])为解/加密模块采用新轮密进行解密运算设置数据输入通路,并消除解/加密模块的等待通路状态,返回S23;
S43、2个等待数据通路的模块中,定义加密的等待数据通路的模块为模块j,定义解密的等待数据通路的模块为模块k,调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路,并消除模块j的等待数据通路状态;在三个CP脉冲后,调用通路任务Tongru(k,0,2,ddai[0],tong[2:0],add[4:0])为模块k采用新轮密进行解密运算设置数据输入通路,并消除模块k的等待数据通路状态,返回S23;
S44、若密扩/加/解密模块的加/解密运算刚好完成,则进入S45;否则,进入S46;
S45、调用通路任务Tongchu(0,1,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出最终处理好的密/明文设置输出通路,返回S23;
S46、若密扩/加/解密模块的工作模式为加密,则进入S47;若密扩/加/解密模块的工作模式为解密,进入S48;
S47、调用通路任务Tongru(0,0,1,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行加密设置数据输入通路,返回S23;
S48、调用通路任务Tongru(0,0,2,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行解密设置数据输入通路,返回S23;
S49、定义迭代次数信号有变化的模块为模块t;
S50、若模块t的加/解密运算刚好完成,则进入S51;否则,进入S52;
S51、调用通路任务Tongchu(t,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为模块t输出最终处理好的密/明文设置输出通路,返回S23;
S52、若模块t的工作模式为加密,则进入S53;否则,进入S58;
S53、若所需密钥编号xmh[t]不等于最新密钥扩展编号mkh,进入S54;否则,进入S55;
S54、调用通路任务Tongru(t,1,1,ddai[0],tong[2:0],add[4:0])为模块t采用旧轮密进行加密设置数据输入通路,返回S23;
S55、若密扩/加/解密模块的密钥扩展快于模块t的轮密钥需求,则进入S56;否则,进入S57;
S56、调用通路任务Tongru(t,0,1,ddai[0],tong[2:0],add[4:0])为模块t采用新轮密进行加密设置数据输入通路,返回S23;
S57、将模块t的等待通路信号deng[t]置1,返回S23;
S58、若所需密钥编号xmh[t]不等于最新密钥扩展编号mkh,则进入S59;否则,进入S60;
S59、调用通路任务Tongru(t,1,2,ddai[0],tong[2:0],add[4:0])为模块t采用旧轮密进行解密设置数据输入通路,返回S23;
S60、若密扩/加/解密模块的密钥扩展已经完成,则进入S61;否则,进入S62;
S61、调用通路任务Tongru(t,0,2,ddai[0],tong[2:0],add[4:0])为模块t采用新轮密进行解密设置数据输入通路,返回S23;
S62、将模块t的等待通路信号deng[t]置1,返回S23。
根据本发明优选的,所述密扩/加/解密模块的运行方法,具体步骤如下:
S63、密扩/加/解密模块初始化,设置密扩/加/解密模块的输入寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效;
S64、若接收到控制模块的启动信号st[0],则进入S65,否则,停留在S64;
S65、根据启动信号st[0]串行序列的类型,判定要求启动的变换类型,若要求启动F’类型的变换,则确定内部的类型信号为0,即type=0,选择F’变换的通路;若是要求启动F类型的变换,则确定内部类型信号为1,即type=1,选择F变换的通路;将输出给控制模块的迭代次数信号置0,ddai[0]=0,请求通路;
S66、若接收到控制模块的通路已设好信号tong[0],则进入S67;否则,停留在S66;
S67、设置密扩/加/解密模块的输入寄存器组U0、U1、U2、U3、U4为并行输入状态,在一个时钟脉冲下存储接收数据,之后设置输入寄存器组U0、U1、U2、U3、U4为保持状态,其中,所述数据是由控制模块选定的密钥扩展所需的MK0⊕FK0、MK1⊕FK1、MK2⊕FK2、MK3⊕FK3和第0轮所需的固有参数,或者加/解密所需的待处理明/密文数据X0、X1、X2、X3和第0轮所需轮密钥;
S68、根据选择的通路进行一次F’变换或F变换,即:type=0时,进行F’变换,得到输出F’(U0、U1、U2、U3、U4),type=1时,进行F变换,得到输出F(U0、U1、U2、U3、U4);
S69、将输出给控制模块的迭代次数信号加1,即ddai[0]++,请求通路;
S70、若接收到控制模块的通路已设好信号tong[0],进入S71;否则,停留在S70;
S71、若是F’变换且迭代次数小于32,即type=0且ddai[0]<32,进入S72;若是F变换且迭代次数小于32,即type=1且ddai[0]<32,进入S73;若是F’变换且迭代次数等于32,即type=0且ddai[0]=32,进入S74;若是F变换且迭代次数等于32,即type=1且ddai[0]=32,进入S75;
S72、将输出使能信号置为有效,设置密扩/加/解密模块寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,以在一个时钟信号控制下自Y端输出生成的第ddai[0]-1轮轮密钥给控制模块选定的新轮密存储区,同时实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=第ddai[0]轮所需固有参数,之后设置寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效,返回S68;
S73、设置密扩/加/解密模块寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,以在一个时钟信号控制下实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=第ddai[0]轮所需轮密钥,之后设置寄存器组U0、U1、U2、U3、U4为保持状态,返回S68;
S74、将输出使能信号置为有效,以在一个时钟信号控制下自Y端输出生成的最后一轮轮密钥给控制模块选定的新轮密存储区,之后将迭代次数信号加1,即ddai[0]=33,以示模块空闲,返回S63;
S75、设置密扩/加/解密模块的寄存器组U0、U1、U1、U2、U3、Y为串行右移状态,将输出使能信号置为有效,以在四个时钟脉冲下自Y端依次输出Y、U3、U2、U1的数据给控制模块选定的结果数据存储区,之后将迭代次数信号加1,即ddai[0]=33,以示模块空闲,返回S63。
根据本发明优选的,所述加/解密模块或解/加密模块的运行方法,具体步骤包括:
S76、加/解密模块或解/加密模块初始化,设置加/解密模块或解/加密模块的输入寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效;
S77、若接收到控制模块的启动信号,则进入S78,否则,停留在S77;
S78、将输出给控制模块的迭代次数信号置0,请求通路;
S79、若接收到控制模块的通路已设好信号,则进入S80;否则,停留在S79;
S80、设置加/解密模块或解/加密模块的输入寄存器组U0、U1、U2、U3、U4为并行输入状态,在一个时钟脉冲下存储接收数据,之后设置加/解密模块或解/加密模块的输入寄存器组U0、U1、U2、U3、U4为保持状态,所述数据是由控制模块选定的待处理明/密文数据X0、X1、X2、X3和第0轮所需轮密钥;
S81、根据存储的数据进行一次F变换,得到输出F(U0、U1、U2、U3、U4);
S82、将输出给控制模块的迭代次数信号加1,请求通路;
S83、若接收到控制模块的通路已设好信号,则进入S84;否则,停留在S83;
S84、若不是最后一轮,即迭代次数小于32,进入S85;否则,进入S86;
S85、设置加/解密模块或解/加密模块的寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,在一个时钟信号控制下实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=本次迭代所需轮密钥,设置寄存器组U0、U1、U2、U3、U4为保持状态,返回S81;
S86、设置加/解密模块或解/加密模块的寄存器组U0、U1、U2、U3、Y为串行右移状态,将输出使能信号置为有效,在四个时钟脉冲下自Y端依次输出Y、U3、U2、U1的数据给控制模块选定的结果数据存储区,之后将迭代次数信号加1,即赋值33,以示模块空闲,返回S76。
根据本发明优选的,所述通路任务Tongru(ti,xin,tmoshi,ddai[0],tong[2:0],add[4:0])的运行方法,其中,输入信号ti表示要开启通路的模块,ti=0,即模块0要开启通路,表示密扩/加/解密模块要开启通路,ti=1,即模块1要开启通路,表示加/解密模块要开启通路,ti=2,即模块2要开启通路,表示解/加密模块要开启通路;输入信号xin=0表示采用新轮密钥,xin=1表示采用旧轮密钥;输入信号tmoshi表示要开启通路的模块的工作模式,tmoshi=0表示要开启通路的模块的工作模式为密钥扩展模式,tmoshi=1表示要开启通路的模块的工作模式为加密模式,tmoshi=2表示要开启通路的模块的工作模式为解密模式;输入信号ddai[0]是密扩/加/解密模块的迭代次数;输出信号tong[2:0]包括tong[2]、tong[1]和tong[0],tong[ti]表示模块ti的开启数据通路信号;输出信号add[4:0]包括add[4]、add[3]、add[2]、add[1]和add[0],表示输出给相应模块的地址信号,具体步骤包括:
(1)若ti=0,即密扩/加/解密模块要开启通路,进入步骤(2);否则,即加/解密模块或解/加密模块要开启通路,则进入步骤(7);
(2)若tmoshi=0,即进行密钥扩展时,进入步骤(3);若tmoshi=1,即进行加密时,进入步骤(4);否则,密扩/加/解密模块进行解密,进入步骤(5);
(3)输出地址信号add[0]=ddai[0]控制固有参数存储区的输出地址,输出地址信号add[4]=0控制密扩/加解密选择器选择“密扩”通路,输出通路已设好信号tong[0]给密扩/加/解密模块,函数运行结束;
(4)输出地址信号add[1]=ddai[0]控制新轮密存储区的输出地址,进入步骤(6);
(5)输出地址信号add[1]=31-ddai[0]控制新轮密存储区的输出地址;
(6)输出地址信号add[2]=0控制新/旧轮密选择器选择“新轮密”通路,输出地址信号add[3]=0控制数据分路器选择密扩/加/解密模块通路,输出地址信号add[4]=1控制密扩/加解密选择器选择“加解密”通路,输出通路已设好信号tong[0]给密扩/加/解密模块通路,函数运行结束;
(7)若xin=0即采用新轮密,则进入步骤(8);否则,进入步骤(9);
(8)输出地址信号add[2]=0控制新/旧轮密选择器选择“新轮密”通路,进入步骤(10);
(9)输出地址信号add[2]=1控制新/旧轮密选择器选择“旧轮密”通路;
(10)若tmoshi=1,即进行加密时,进入步骤(11);若tmoshi=2,即进行解密时,进入步骤(12);
(11)输出地址信号add[1]=ddai[ti]控制新轮密存储区和旧轮密存储区的输出地址,进入步骤(13);
(12)输出地址信号add[1]=31-ddai[ti]控制新轮密存储区和旧轮密存储区的输出地址;
(13)输出地址信号add[3]=ti控制数据分路器选择模块ti通路,输出通路已设好信号tong[ti]给模块ti,运行结束。
根据本发明优选的,所述通路任务Tongchu(ti,tmoshi,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)的运行方法,其中,输入信号ti表示要开启通路的模块,ti=0,即模块0要开启通路,表示密扩/加/解密模块要开启通路,ti=1,即模块1要开启通路,表示加/解密模块要开启通路,ti=2,即模块2要开启通路,表示解/加密模块要开启通路;输入信号tmoshi表示要开启通路的模块的工作模式,tmoshi=0表示要开启通路的模块的工作模式为密钥扩展模式,tmoshi=1表示要开启通路的模块的工作模式为加密模式,tmoshi=2表示要开启通路的模块的工作模式为解密模式;输入信号ddai[0]是密扩/加/解密模块的迭代次数;输出信号tong[2:0]包括tong[2]、tong[1]和tong[0],tong[ti]表示模块ti的开启数据通路信号;输出信号add[1]、add[5]、add[6]是输出给相应模块的地址信号;输入信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0],sjhao[ti]表示开启通路模块ti所处理数据的编号;输出信号sjh是已完成数据的编号,具体步骤包括:
a、若ti=0,即密扩/加/解密模块要开启通路,则进入b;否则,进入步骤e;
b、若tmoshi=0,即进行密钥扩展时,进入步骤c;若tmoshi=1或tmoshi=2,即进行加密或解密时,进入步骤d;
c、输出地址信号add[5]=0控制轮密/结果分路器选择“轮密”通路,输出地址信号add[1]=ddai[0]-1控制新轮密存储区接收新轮密的地址,输出通路已设好信号tong[0]给密扩/加/解密模块,函数运行结束;
d、输出地址信号add[5]=1控制轮密/结果分路器选择“结果”通路,输出地址信号add[6]=0控制结果选择器选择密扩/加/解密模块通路,输出通路已设好信号tong[0]给密扩/加/解密模块,等待结果数据存储区在四个CP脉冲下将数据依次存储至Y0、Y1、Y2、Y3后,通过数据号端口sjh输出密扩/加/解密模块所处理的数据号sjhao[0]的值给微处理器接口,函数运行结束;
e、输出地址信号add[6]=ti控制结果选择器选择模块ti通路,输出通路已设好信号tong[ti]给模块ti;
f、等待结果数据存储区在四个CP脉冲下将数据依次存储至Y0、Y1、Y2、Y3后,通过数据号端口sjh输出模块ti所处理的数据号sjhao[ti]的值给微处理器接口,运行结束。
本发明设计的通路任务Tongru和通路任务Tongchu中所指的“任务”为VerilogHDL硬件描述语言中的“任务”,在VHDL硬件描述语言中用“过程”表示。“任务”与“函数”同属于子程序,都可以被程序所调用,但是函数只能返回一个值,任务可以输出零个或多个值,任务重在描述行为过程。
本发明出现的输出信号moshi[i]与输入信号moshi[i]为代表同一种信号,只是状态不同;本发明出现的输出信号sjhao[i]与输入信号sjhao[i]为代表同一种信号,只是状态不同;本发明出现的输出信号mkh与输入信号mkh为代表同一种信号,只是状态不同;本发明出现的输出信号xmh[i]与输入信号xmh[i]为代表同一种信号,只是状态不同。
本发明的有益效果为:
1、本发明利用硬件实现了完整的SM4加解密运算,解决了软件进行SM4算法的速度瓶颈问题。
2、本发明采用流水线的设计思想,利用每轮密钥扩展都输出轮密钥的方式,利用多个数据选择器、数据分路器并配以控制模块的统一调配,实现了各通路和各模块的协同流水,从而实现了密钥扩展完成首轮后即可启动加密模块的同步运行,解决了现有硬件系统中必须要等待32个轮密钥计算完毕才可加密带来的速度低下的问题,在单任务运算时处理速度即可达到现有硬件系统的近两倍。
3、本发明采用数据缓存区对旧密钥和旧轮密钥进行存储,增设新旧密钥对比环节,解决了当密钥未变时采用传统硬件系统仍须重新密钥扩展带来的额外功耗和效率低下的问题,在处理密钥未变的单任务时运算速度能够完全达到现有硬件系统的两倍。
4、本发明利用密钥扩展和加、解密算法的共性,设计的密钥扩展模块还能够进行加密或解密运算;同时控制模块可以控制选送的输入数据,使得加密模块也可进行解密运算,解密模块也可进行加密运算;本发明基于模块复用的思想,实现了三组任务的同步加/解密运算,解决了传统设计中在频繁的加密任务时解密模块被闲置的问题,有效提高了系统的利用率和运算速度,在密钥未变的多任务运算时处理速度能够达到单任务运算的三倍,最快可以达到现有硬件系统的六倍。
5、本发明对加/解密所需轮密钥和密钥扩展过程分别编号,并设计相应的比对和数据选择机制,使得当密钥变化时新扩展的轮密钥可以和旧轮密钥同步取出给各自的模块,确保了密钥不同的数据可以同步加解密,在密钥频繁变化的多任务运算时处理速度能够达到传统硬件系统的2—6倍。
6、本发明将数据通路的进程在控制模块中独立出来,从而将响应通路请求的过程变“查询”为“中断”,能够第一时间判定满足新一轮运算条件的模块并及时给予通路,解决了现有软硬件系统中当有新读入的任务时内部通路必须等待的弊端,进一步提升了系统的处理速度。
7、本发明采用双向移位寄存器设计各运算模块的输入端,通过输入寄存器串行右移至输出寄存器的方式输出最后四轮迭代结果,从而依次输出Y(X35)、X34、X33、X32,实现了集反序变换于输出过程之中,不仅有效节省了反序变换模块的面积,而且也较并行输出方式显著减少了顶层模块的硬件走线;各运算模块通过双向移位寄存器的并行输入方式实现了首轮数据的载入,通过输出寄存器输出至串行左移的双向移位寄存器的方式实现了下一轮数据的载入,通过双向移位寄存器的保持方式实现了运算过程中与外部数据的隔离。通过一个简单的双向移位寄存器即实现了数据的首轮输入、次轮输入、隔离和输出等四大功能,不仅使运算过程更加简单高效,而且大大节省了芯片的面积。
8、采用本发明所提供的系统,只需改变控制模块内部的微处理器接口模块即可嵌入到不同的总线架构和微处理器中,具有高度的通用性、灵活性和可扩展性。
附图说明
图1为本发明所述系统的结构示意图;
图2为本发明所述密扩/加/解密模块的结构示意图;
图3为本发明所述启动模块的运行方法的流程框图;
图4为本发明所述数据通路模块的运行方法的流程框图;
图5为本发明所述数据通路模块的输入通路任务Tongru的运行方法的流程框图;
图6为本发明所述数据通路模块的输出通路任务Tongchu的运行方法的流程框图;
图7为本发明所述密扩/加/解密模块的运行方法的流程框图;
图8为本发明所述加/解密模块或解/加密模块的运行方法的流程框图;
其中,1、控制模块;2、启动模块;3、数据通路模块;4、比较器;5、数据缓存区;6、旧密钥存储区;7、新密钥存储区;8、系统参数存储区;9、固有参数存储区;10、原始数据存储区;11、旧轮密存储区;12、微处理器接口;13、新轮密存储区;14、结果数据存储区;15、异或运算模块;16、新/旧轮密选择器;17、数据分路器;18、密扩/加解密选择器;19、密扩/加/解密模块;20、加/解密模块;21、解/加密模块;22、轮密/结果分路器;23、结果选择器;24—28、密扩/加/解密模块的第1—5组数据输入端口;29、四输入32位双向移位寄存器U0_3;30、带保持功能的32位D触发器U4;31、状态机模块;32、密扩/加/解密模块的启动指令输入端口;33、密扩/加/解密模块的通路已设好指令输入端口;34、密扩/加/解密模块的迭代次数输出端口;35、密扩/加/解密模块的时钟信号输入端口;36、非门和与门电路;37—41、F/F’变换模块的第1—5组数据输入端口;42、F/F’变换模块的数据输出端口;43、F/F’变换模块;44、带输出使能可选输入的32位D触发器Yd;45、密扩/加/解密模块的数据输出端口。
具体实施方式
下面结合说明书附图和实施例对本发明作进一步限定,但不限于此。
实施例1
一种超高速实现SM4算法的系统,包括:控制模块1、密扩/加/解密模块19、加/解密模块20、解/加密模块21、数据分路器17、密扩/加解密选择器18、轮密/结果分路器22、结果选择器23,所述控制模块1包括微处理器接口12、启动模块2、数据通路模块3、数据缓存区5、比较器4、异或运算模块15和新/旧轮密选择器16,所述数据缓存区5包括旧密钥存储区6、新密钥存储区7、系统参数存储区8、固有参数存储区9、原始数据存储区10、旧轮密存储区11、新轮密存储区13和结果数据存储区14;
所述微处理器接口12连接微处理器;所述启动模块2的三组迭代次数输入分别连接所述密扩/加/解密模块19、所述加/解密模块20、所述解/加密模块21的迭代次数输出,所述启动模块2的三个启动指令输出分别连接所述密扩/加/解密模块19、所述加/解密模块20、所述解/加密模块21的启动指令输入;所述数据通路模块3的三组迭代次数输入分别连接所述密扩/加/解密模块19、所述加/解密模块20、所述解/加密模块21的迭代次数输出,所述数据通路模块3的三个通路设好信号输出分别连接所述密扩/加/解密模块19、所述加/解密模块20、所述解/加密模块21的通路设好信号输入;所述数据通路模块3通过其第3、4、5、6组地址输出连接所述数据分路器17、所述密扩/加解密选择器18、所述轮密/结果分路器22、所述结果选择器23的地址输入;所述数据分路器17的数据输入连接所述原始数据存储区10的输出和所述新/旧轮密选择器16的输出;所述数据分路器17的输出连接所述密扩/加解密选择器18、所述加/解密模块20、所述解/加密模块21的数据输入;所述密扩/加解密选择器18的数据输入连接所述异或运算模块15、所述固有参数存储区9的输出和所述数据分路器17的输出;所述密扩/加解密选择器18的输出连接所述密扩/加/解密模块19的数据输入;所述密扩/加/解密模块19的数据输出连接所述轮密/结果分路器22的数据输入;所述轮密/结果分路器22的输出连接所述新轮密存储区13的输入、所述结果选择器23的输入;所述结果选择器23的数据输入连接所述轮密/结果分路器22的输出、所述加/解密模块20的输出、所述解/加密模块21的输出;所述结果选择器23的输出连接所述结果数据存储区14;
所述密扩/加/解密模块19根据接收的所述控制模块1的指令,选择自身的工作模式为密钥扩展或者加密/解密,选择自身的工作模式首选为密钥扩展;所述加/解密模块20根据所述控制模块1输出的数据选择自身的工作模式为加密或者解密,选择自身的工作模式首选为加密;所述解/加密模块21根据控制模块1输出的数据选择自身的工作模式为解密或者加密,选择自身的工作模式首选为解密;所述微处理器接口12用于接收微处理器传送的指令和数据,并将最终加解密结果返回;所述启动模块2用于接收所述微处理器接口12输出的系统指令及所述密扩/加/解密模块19、所述加/解密模块20、所述解/加密模块21输出的迭代次数信号,根据所述比较器4传送的密钥是否变化信号,综合分析确定当前的工作模块及其工作模式,并输出各模块的工作模式、数据号、所需密钥编号和系统的密钥扩展编号发送给所述数据通路模块3,输出启动指令给所选模块,启动相应模块运行;所述数据通路模块3用于接收所述启动模块2输出的各模块的工作模式、数据号、所需密钥编号和系统的密钥扩展编号,根据接收的所述密扩/加/解密模块19、所述加/解密模块20、所述解/加密模块21的迭代次数信号的变化,综合分析,及时判定满足新一轮运算条件的模块,确定当前要设置的数据通路,输出地址信号给所述固有参数存储区9、所述旧轮密存储区11、所述新轮密存储区13、所述新/旧轮密选择器16、所述数据分路器17、所述密扩/加解密选择器18、所述轮密/结果分路器22及所述结果选择器23,将数据顺利送达所需模块,最后输出通路设好信号给需要通路的模块。
实施例2
根据实施例1所述系统,其区别在于,所述密扩/加/解密模块19包括双向移位寄存器组、带保持的D触发器组、状态机模块31、F/F’变换模块43、带使能可选入的D触发器组,所述双向移位寄存器组为四输入32位双向移位寄存器U0_332,所述四输入32位双向移位寄存器U0_332包括四个32位寄存器,即U0—U3,所述带保持的D触发器组为带保持功能的32位D触发器U430,所述带使能可选入的D触发器组为带输出使能可选输入的32位D触发器Yd44;
所述密扩/加/解密模块19的数据输入模块包括所述四输入32位双向移位寄存器U0_332及所述带保持功能的32位D触发器U430,所述密扩/加/解密模块19的数据输出模块为带输出使能可选输入的32位D触发器Yd44,所述密扩/加/解密模块19的数据输入模块的数据输出连接所述F/F’变换模块43的数据输入,所述带输出使能可选输入的32位D触发器Yd44的两路数据输入分别连接所述F/F’变换模块43的数据输出、所述四输入32位双向移位寄存器U0_332的右移输出Q3;所述四输入32位双向移位寄存器U0_332的左移输入端DL与F/F’变换模块43的数据输出相连接;
所述F/F’变换模块43用于根据接收的类型输入信号将数据完成一次F变换或F’变换后输出;所述状态机模块31接收控制模块1的启动指令和通路已设好指令,将迭代次数信号输出给控制模块1,产生地址信号a2、a1和a0,地址信号a2、a1控制所述四输入32位双向移位寄存器U0_329的工作模式,地址信号a0控制所述带保持功能的32位D触发器U430的工作模式,产生地址信号a2a1控制所述带输出使能可选输入的32位D触发器Yd44,当所述四输入32位双向移位寄存器U0_329右移时选择其右移输出Q3作为数据输入,否则,选择F/F’变换模块43的数据输出作为数据输入,同时,还产生使能信号控制所述带输出使能可选输入的32位D触发器Yd44是否输出数据;所述四输入32位双向移位寄存器U0_329的工作模式包括保持、右移、输入、左移;所述带保持功能的32位D触发器U430工作模式为输入或保持。
实施例3
根据实施例1或实施例2所述系统,其区别在于,所述微处理器接口12的指令输出、密钥输出、数据输出分别连接所述启动模块2的指令输入、新密钥存储区7和比较器4的输入、原始数据存储区10的输入;所述比较器4的输入连接所述微处理器接口12的密钥输出和旧轮密存储区11的输出;所述比较器4的输出连接所述启动模块2的比较信号输入;所述启动模块2的使能信号输出en1、en0分别连接所述新轮密存储区13赋值到旧轮密存储区11的使能输入、新密钥存储区7赋值到旧密钥存储区6的使能输入;所述启动模块2的三个模块数据号输出、三个工作模式输出、两个所需密钥编号输出、一个密钥扩展编号输出分别连接所述数据通路模块3的三个模块数据号输入、三个工作模式输入、两个所需密钥编号输入、一个密钥扩展编号输入;所述数据通路模块3的数据号输出连接所述微处理器接口12的数据号输入;所述数据通路模块3的第0、1、2组地址输出分别连接所述固有参数存储区9、旧轮密存储区11和新轮密存储区13、新/旧轮密选择器16的地址输入;所述异或运算模块15的输入同时连接所述新密钥存储区7的输出和系统参数存储区8的输出;所述新/旧轮密选择器16的数据输入同时连接所述旧轮密存储区11的输出和新轮密存储区13的输出;所述旧密钥存储区6的数据输入连接所述新密钥存储区7的输出;所述旧轮密存储区11的数据输入连接所述新轮密存储区13的输出;所述结果数据存储区14的输出连接所述微处理器接口12的结果数据输入。
所述的加/解密模块20和解/加密模块21的硬件结构与密扩/加/解密模块19的硬件结构一致,只需保留其F/F’变换模块43的F变换部分,并将类型输入端口去掉即可。
上述系统均采用硬件描述语言VHDL(VHSIC Hardware Description Language)或VerilogHDL设计成超大规模集成电路实现。
实施例4
根据实施例1-3任一所述系统的所述启动模块2的运行方法,其中,内部变量i表示工作模块,i=0,即模块0,表示密扩/加/解密模块19;i=1,即模块1,表示加/解密模块20;i=2,即模块2,表示解/加密模块21;内部变量nowsjhao表示最新数据的编号;输入信号ins表示加/解密指令;输入信号cmp表示新密钥和旧密钥是否相同的比较结果;输出信号en1表示新轮密存储区13赋值到旧轮密存储区11的使能信号;输出信号en0表示新密钥存储区7赋值到旧密钥存储区6的使能信号;输出信号mkh表示最新密钥扩展的编号;输出信号sjhao[i]表示模块i所处理数据的编号,输出信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0];moshi[i]表示模块i的工作模式,moshi[i]=0表示密钥扩展模式,moshi[i]=1表示加密模式,moshi[i]=2表示解密模式,输出信号moshi[2:0]包括moshi[2]、moshi[1]和moshi[0];输出信号xmh[i]表示模块i所需密钥的编号,输出信号xmh[2:1]包括xmh[2]和xmh[1];输入信号ddai表示迭代次数信号,ddai[i]=j表示:当0≤j≤32时,表示模块i已完成j次迭代,当j=33时,表示模块i已经完全空闲;输出信号st[i]表示模块i的启动信号;步骤如下:
S1、系统初始化,将最新数据的编号和最新密钥扩展的编号清零,即:nowsjhao=0,mkh=0;
S2、若接收到微处理器接口12传来的加/解密指令ins,则进入S3,否则,停留在S2;
S3、存储接收的加/解密指令ins,同时将最新数据的编号加1,即nowsjhao++;
S4、根据比较器4传送来的新密钥和旧密钥是否相同的比较结果cmp,若新密钥和旧密钥相同,则进入S5;否则,进入S14;
S5、若接收的加/解密指令ins是加密指令,则进入S6,否则,进入S10;
S6、当加/解密模块20输出的迭代次数信号ddai[1]=33,判定加/解密模块20的运行状态为空闲,进入S7;当加/解密模块20输出的迭代次数信号ddai[1]≠33且解/加密模块21输出的迭代次数信号ddai[2]=33,判定解/加密模块21的运行状态为空闲,进入S8;当加/解密模块20输出的迭代次数信号ddai[1]≠33且解/加密模块21输出的迭代次数信号ddai[2]≠33且密扩/加/解密模块19输出的迭代次数信号ddai[0]=33,判定密扩/加/解密模块19的运行状态为空闲,进入S9;否则,停留在S6;
S7、选定当前数据工作模块为加/解密模块20、工作模式为加密,即sjhao[1]=nowsjhao,moshi[1]=1,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块20,加/解密模块20启动运行,返回S2;
S8、选定当前数据工作模块为解/加密模块21、工作模式为加密,即sjhao[2]=nowsjhao,moshi[2]=1,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块21,解/加密模块21启动运行,返回S2;
S9、选定当前数据工作模块为密扩/加/解密模块19、工作模式为加密,即sjhao[0]=nowsjhao,moshi[0]=1,通过指令接口输出启动信号st[0]给密扩/加/解密模块19,密扩/加/解密模块19启动运行,并运行在F变化下,返回S2;
S10、当解/加密模块21输出的迭代次数信号ddai[2]=33,判定解/加密模块21的运行状态为空闲,进入S11;当解/加密模块21输出的迭代次数信号ddai[2]≠33且加/解密模块20输出的迭代次数信号ddai[1]=33,判定加/解密模块20的运行状态为空闲,进入S12;当解/加密模块21输出的迭代次数信号ddai[2]≠33且加/解密模块20输出的迭代次数信号ddai[1]≠33且密扩/加/解密模块19输出的迭代次数信号ddai[0]=33,判定密扩/加/解密模块19的运行状态为空闲,进入S13;否则,停留在S10;
S11、选定当前数据工作模块为解/加密模块21、工作模式为解密,即sjhao[2]=nowsjhao、moshi[2]=2,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块21,解/加密模块21启动运行,返回S2;
S12、选定当前数据工作模块为加/解密模块20、工作模式为解密,即sjhao[1]=nowsjhao、moshi[1]=2,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块20,加/解密模块20启动运行,返回S2;
S13、选定当前数据工作模块为密扩/加/解密模块19、工作模式为解密,即sjhao[0]=nowsjhao、moshi[0]=2,通过指令接口输出启动信号st[0]给密扩/加/解密模块19,密扩/加/解密模块19启动运行,并运行在F变化下,返回S2;
S14、当密扩/加/解密模块19输出的迭代次数信号ddai为33,即ddai[0]=33,判定密扩/加/解密模块19的运行状态为空闲,进入S15;否则,停留在S14;
S15、选定当前的工作模块为密扩/加/解密模块19、工作模式为密钥扩展,即sjhao[0]=nowsjhao、moshi[0]=0,通过指令接口输出启动信号st[0]给密扩/加/解密模块19,密扩/加/解密模块19启动运行,并运行在F’变化下;将当前密钥扩展编号加1,即mkh++;同时,输出使能信号en0选通新密钥存储区7到旧密钥存储区6的赋值,输出使能信号en1选通新轮密存储区13到旧轮密存储区11的赋值;
S16、若接收的微处理器的指令是加密指令,则进入S17,否则,进入S20;
S17、当加/解密模块20输出的迭代次数信号ddai[1]=33,判定加/解密模块20的运行状态为空闲,进入S18;当加/解密模块20输出的迭代次数信号ddai[1]≠33且解/加密模块21输出的迭代次数信号ddai[2]=33,判定解/加密模块21的运行状态为空闲,进入S19;否则,停留在S17;
S18、选定当前数据工作模块为加/解密模块20、工作模式为加密,即sjhao[1]=nowsjhao、moshi[1]=1,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块20,加/解密模块20启动运行,返回S2;
S19、选定当前数据工作模块为解/加密模块21、工作模式为加密,即sjhao[2]=nowsjhao、moshi[2]=1,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块21,解/加密模块21启动运行,返回S2;
S20、当解/加密模块21输出的迭代次数信号ddai[2]=33,判定解/加密模块21的运行状态为空闲,进入S21;当解/加密模块21输出的迭代次数信号ddai[2]≠33且加/解密模块20输出的迭代次数信号ddai[1]=33,判定加/解密模块20的运行状态为空闲,进入S22;否则,停留在S20;
S21、选定当前数据工作模块为解/加密模块21、工作模式为解密,即sjhao[2]=nowsjhao、moshi[2]=2,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块21,解/加密模块21启动运行,返回S2;
S22、选定当前数据工作模块为加/解密模块20、工作模式为解密,即sjhao[1]=nowsjhao、moshi[1]=2,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块20,加/解密模块20启动运行,返回S2。
实施例5
根据实施例1-3任一所述系统的所述数据通路模块3的运行方法,其中,内部变量i表示工作模块,i=0,即模块0,表示密扩/加/解密模块19;i=1,即模块1,表示加/解密模块20;i=2,即模块2,表示解/加密模块21;内部变量deng[i]表示模块i由于所需密钥尚未生成处在等待数据通路的状态,deng[i]=1表示模块i在等待数据通路,deng[i]=0表示模块i未等待数据通路;输出信号sjh是已完成数据的编号;输入信号mkh表示最新密钥扩展的编号输入信号;输入信号sjhao[i]表示模块i所处理数据的编号,输入信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0];输入信号moshi[i]表示模块i的工作模式,moshi[i]=0表示密钥扩展模式,moshi[i]=1表示加密模式,moshi[i]=2表示解密模式,输入信号moshi[2:0]包括moshi[2]、moshi[1]和moshi[0];输入信号xmh[i]表示模块i所需密钥的编号,输入信号xmh[2:1]包括xmh[2]和xmh[1];输出信号add[0]—add[6]是输出给相应模块的地址信号;输出信号tong[i]表示模块i的开启数据通路信号;输入信号ddai[i]表示模块i的迭代次数信号,ddai[i]=j表示:当0≤j≤32时,表示模块i已完成j次迭代,当j=33时,表示模块i已经完全空闲;通路任务Tongru和通路任务Tongchu是数据通路模块内部的子程序,通路任务Tongru负责开启数据输入通路,通路任务Tongchu负责开启数据输出通路;步骤如下:
S23、若模块i的迭代次数信号有变化时,即ddai[i]变化,当ddai[i]≠33,进入S24;当ddai[i]=33,停留在S23;
S24、若迭代次数信号有变化的模块为密扩/加/解密模块19,即i=0,则进入S25;否则,进入S49;
S25、若密扩/加/解密模块19在进行密钥扩展,即moshi[0]=0,则进入S26;否则,进入S44;
S26、若当前无等待数据通路的模块,即deng[1]=deng[2]=0,进入S27;若当前有1个等待数据通路的模块,即deng[1]=0且deng[2]=1或者deng[1]=1且deng[2]=0,进入S28;若当前有2个等待数据通路的模块,即deng[1]=deng[2]=1,进入S34;
S27、若ddai[0]≠32,表示密扩/加/解密模块19需要输入数据,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块19进行密钥扩展设置数据输入通路,其中,tong[2:0]包括tong[2]、tong[1]和tong[0],add[4:0]包括add[4]、add[3]、add[2]、add[1]和add[0];若ddai[0]≠0,表示密扩/加/解密模块19需要输出数据,开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块19输出新轮密设置数据输出通路,返回S23;
S28、若1个等待数据通路的模块的工作模式为加密,进入S29;若1个等待数据通路的模块的工作模式为解密,进入S32;
S29、定义1个等待数据通路的模块为模块j;
S30、若密扩/加/解密模块19的密钥扩展快于模块j的轮密钥需求,进入S31;否则,返回S23;
S31、若ddai[0]≠32,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块19进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块19输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路,并消除模块j的等待通路状态,返回S23;
S32、若密扩/加/解密模块19的密钥扩展刚好完成,进入S33;否则,返回S23;
S33、定义1个等待数据通路的模块为模块j,开启输出通路,即调用通路任务TongchuTongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块19输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,2,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行解密运算设置数据输入通路,并消除模块j的等待通路状态,返回S23;
S34、若2个等待数据通路的模块同为加密模式且迭代次数相同,进入S35;若2个等待数据通路的模块同为加密模式且迭代次数不同,进入S37;若2个等待数据通路的模块中,1个等待数据通路的模块在解密另1个等待数据通路的模块在加密,且在加密的等待数据通路的模块的迭代次数不为31,则进入S37;否则,进入S40;
S35、若密扩/加/解密模块19的密钥扩展快于加/解密模块20和解/加密模块21的轮密钥需求,进入S36;否则,返回S23;
S36、若ddai[0]≠32,开启输入通路,即调用通路任Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块19进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块19输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(1,0,1,ddai[0],tong[2:0],add[4:0])为加/解密模块20采用新轮密进行加密运算设置数据输入通路,并消除加/解密模块20的等待通路状态;在三个CP脉冲后,调用通路任务Tongru(2,0,1,ddai[0],tong[2:0],add[4:0])为解/加密模块21采用新轮密进行加密运算设置数据输入通路,并消除解/加密模块21的等待通路状态,返回S23;
S37、若2个等待数据通路的模块一个等待数据通路的模块在解密另一个等待数据通路的模块在加密,加密模块为模块j;若2个等待数据通路的模块均为加密模式,2个等待数据通路的模块中选迭代次数较小的为模块j;
S38、若密扩/加/解密模块19的密钥扩展快于模块j的轮密钥需求,则进入S39;否则,返回S23;
S39、若ddai[0]≠32,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块19进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块19输出新轮密设置数据输出通路,在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路j,并消除模块j的等待通路状态,返回S23;
S40、若密扩/加/解密模块19的密钥扩展刚好完成,进入S41;否则,返回S23;
S41、若2个等待数据通路的模块都在解密,则进入S42;若2个等待数据通路的模块中一个等待数据通路的模块在解密另一个等待数据通路的模块在加密且加密模块的迭代次数为31,进入S43;
S42、调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块19输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(1,0,2,ddai[0],tong[2:0],add[4:0])为加/解密模块20采用新轮密进行解密运算设置数据输入通路,并消除加/解密模块20的等待通路状态;在三个CP脉冲后,调用通路任务Tongru(2,0,2,ddai[0],tong[2:0],add[4:0])为解/加密模块21采用新轮密进行解密运算设置数据输入通路,并消除解/加密模块21的等待通路状态,返回S23;
S43、2个等待数据通路的模块中,定义加密的等待数据通路的模块为模块j,定义解密的等待数据通路的模块为模块k,调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块19输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路,并消除模块j的等待数据通路状态;在三个CP脉冲后,调用通路任务Tongru(k,0,2,ddai[0],tong[2:0],add[4:0])为模块k采用新轮密进行解密运算设置数据输入通路,并消除模块k的等待数据通路状态,返回S23;
S44、若密扩/加/解密模块19的加/解密运算刚好完成,则进入S45;否则,进入S46;
S45、调用通路任务Tongchu(0,1,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块19输出最终处理好的密/明文设置输出通路,返回S23;
S46、若密扩/加/解密模块19的工作模式为加密,则进入S47;若密扩/加/解密模块19的工作模式为解密,进入S48;
S47、调用通路任务Tongru(0,0,1,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块19进行加密设置数据输入通路,返回S23;
S48、调用通路任务Tongru(0,0,2,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块19进行解密设置数据输入通路,返回S23;
S49、定义迭代次数信号有变化的模块为模块t;
S50、若模块t的加/解密运算刚好完成,则进入S51;否则,进入S52;
S51、调用通路任务Tongchu(t,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为模块t输出最终处理好的密/明文设置输出通路,返回S23;
S52、若模块t的工作模式为加密,则进入S53;否则,进入S58;
S53、若所需密钥编号xmh[t]不等于最新密钥扩展编号mkh,进入S54;否则,进入S55;
S54、调用通路任务Tongru(t,1,1,ddai[0],tong[2:0],add[4:0])为模块t采用旧轮密进行加密设置数据输入通路,返回S23;
S55、若密扩/加/解密模块19的密钥扩展快于模块t的轮密钥需求,则进入S56;否则,进入S57;
S56、调用通路任务Tongru(t,0,1,ddai[0],tong[2:0],add[4:0])为模块t采用新轮密进行加密设置数据输入通路,返回S23;
S57、将模块t的等待通路信号deng[t]置1,返回S23;
S58、若所需密钥编号xmh[t]不等于最新密钥扩展编号mkh,则进入S59;否则,进入S60;
S59、调用通路任务Tongru(t,1,2,ddai[0],tong[2:0],add[4:0])为模块t采用旧轮密进行解密设置数据输入通路,返回S23;
S60、若密扩/加/解密模块19的密钥扩展已经完成,则进入S61;否则,进入S62;
S61、调用通路任务Tongru(t,0,2,ddai[0],tong[2:0],add[4:0])为模块t采用新轮密进行解密设置数据输入通路,返回S23;
S62、将模块t的等待通路信号deng[t]置1,返回S23。
实施例6
根据实施例1-3任一所述系统的所述密扩/加/解密模块19的运行方法,具体步骤如下:
S63、密扩/加/解密模块19初始化,设置密扩/加/解密模块19的输入寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效;
S64、若接收到控制模块1的启动信号st[0],则进入S65,否则,停留在S64;
S65、根据启动信号st[0]串行序列的类型,判定要求启动的变换类型,若要求启动F’类型的变换,则确定内部的类型信号为0,即type=0,选择F’变换的通路;若是要求启动F类型的变换,则确定内部类型信号为1,即type=1,选择F变换的通路;将输出给控制模块1的迭代次数信号置0,ddai[0]=0,请求通路;
S66、若接收到控制模块1的通路已设好信号tong[0],则进入S67;否则,停留在S66;
S67、设置密扩/加/解密模块19的输入寄存器组U0、U1、U2、U3、U4为并行输入状态,在一个时钟脉冲下存储接收数据,之后设置输入寄存器组U0、U1、U2、U3、U4为保持状态,其中,所述数据是由控制模块1选定的密钥扩展所需的MK0⊕FK0、MK1⊕FK1、MK2⊕FK2、MK3⊕FK3和第0轮所需的固有参数,或者加/解密所需的待处理明/密文数据X0、X1、X2、X3和第0轮所需轮密钥;
S68、根据选择的通路进行一次F’变换或F变换,即:type=0时,进行F’变换,得到输出F’(U0、U1、U2、U3、U4),type=1时,进行F变换,得到输出F(U0、U1、U2、U3、U4);
S69、将输出给控制模块的迭代次数信号加1,即ddai[0]++,请求通路;
S70、若接收到控制模块1的通路已设好信号tong[0],进入S71;否则,停留在S70;
S71、若是F’变换且迭代次数小于32,即type=0且ddai[0]<32,进入S72;若是F变换且迭代次数小于32,即type=1且ddai[0]<32,进入S73;若是F’变换且迭代次数等于32,即type=0且ddai[0]=32,进入S74;若是F变换且迭代次数等于32,即type=1且ddai[0]=32,进入S75;
S72、将输出使能信号置为有效,设置密扩/加/解密模块19寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,以在一个时钟信号控制下自Y端输出生成的第ddai[0]-1轮轮密钥给控制模块选定的新轮密存储区,同时实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=第ddai[0]轮所需固有参数,之后设置寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效,返回S68;
S73、设置密扩/加/解密模块19寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,以在一个时钟信号控制下实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=第ddai[0]轮所需轮密钥,之后设置寄存器组U0、U1、U2、U3、U4为保持状态,返回S68;
S74、将输出使能信号置为有效,以在一个时钟信号控制下自Y端输出生成的最后一轮轮密钥给控制模块1选定的新轮密存储区13,之后将迭代次数信号加1,即ddai[0]=33,以示模块空闲,返回S63;
S75、设置密扩/加/解密模块19的寄存器组U0、U1、U1、U2、U3、Y为串行右移状态,将输出使能信号置为有效,以在四个时钟脉冲下自Y端依次输出Y、U3、U2、U1的数据给控制模块1选定的结果数据存储区,之后将迭代次数信号加1,即ddai[0]=33,以示模块空闲,返回S63。
实施例7
根据实施例1-3任一所述系统的所述所述加/解密模块20或解/加密模块21的运行方法,具体步骤包括:
S76、加/解密模块20或解/加密模块21初始化,设置加/解密模块20或解/加密模块21的输入寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效;
S77、若接收到控制模块1的启动信号,则进入S78,否则,停留在S77;
S78、将输出给控制模块1的迭代次数信号置0,请求通路;
S79、若接收到控制模块1的通路已设好信号,则进入S80;否则,停留在S79;
S80、设置加/解密模块20或解/加密模块21的输入寄存器组U0、U1、U2、U3、U4为并行输入状态,在一个时钟脉冲下存储接收数据,之后设置加/解密模块20或解/加密模块21的输入寄存器组U0、U1、U2、U3、U4为保持状态,所述数据是由控制模块1选定的待处理明/密文数据X0、X1、X2、X3和第0轮所需轮密钥;
S81、根据存储的数据进行一次F变换,得到输出F(U0、U1、U2、U3、U4);
S82、将输出给控制模块1的迭代次数信号加1,请求通路;
S83、若接收到控制模块1的通路已设好信号,则进入S84;否则,停留在S83;
S84、若不是最后一轮,即迭代次数小于32,进入S85;否则,进入S86;
S85、设置加/解密模块20或解/加密模块21的寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,在一个时钟信号控制下实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=本次迭代所需轮密钥,设置寄存器组U0、U1、U2、U3、U4为保持状态,返回S81;
S86、设置加/解密模块20或解/加密模块21的寄存器组U0、U1、U2、U3、Y为串行右移状态,将输出使能信号置为有效,在四个时钟脉冲下自Y端依次输出Y、U3、U2、U1的数据给控制模块1选定的结果数据存储区14,之后将迭代次数信号加1,即赋值33,以示模块空闲,返回S76。
实施例8
根据实施例1-3任一所述系统的所述通路任务Tongru(ti,xin,tmoshi,ddai[0],tong[2:0],add[4:0])的运行方法,其中,输入信号ti表示要开启通路的模块,ti=0,即模块0要开启通路,表示密扩/加/解密模块19要开启通路,ti=1,即模块1要开启通路,表示加/解密模块20要开启通路,ti=2,即模块2要开启通路,表示解/加密模块21要开启通路;输入信号xin=0表示采用新轮密钥,xin=1表示采用旧轮密钥;输入信号tmoshi表示要开启通路的模块的工作模式,tmoshi=0表示要开启通路的模块的工作模式为密钥扩展模式,tmoshi=1表示要开启通路的模块的工作模式为加密模式,tmoshi=2表示要开启通路的模块的工作模式为解密模式;输入信号ddai[0]是密扩/加/解密模块19的迭代次数;输出信号tong[2:0]包括tong[2]、tong[1]和tong[0],tong[ti]表示模块ti的开启数据通路信号;输出信号add[4:0]包括add[4]、add[3]、add[2]、add[1]和add[0],表示输出给相应模块的地址信号,具体步骤包括:
(1)若ti=0,即密扩/加/解密模块19要开启通路,进入步骤(2);否则,即加/解密模块20或解/加密模块21要开启通路,则进入步骤(7);
(2)若tmoshi=0,即进行密钥扩展时,进入步骤(3);若tmoshi=1,即进行加密时,进入步骤(4);否则,密扩/加/解密模块19进行解密,进入步骤(5);
(3)输出地址信号add[0]=ddai[0]控制固有参数存储区9的输出地址,输出地址信号add[4]=0控制密扩/加解密选择器18选择“密扩”通路,输出通路已设好信号tong[0]给密扩/加/解密模块19,函数运行结束;
(4)输出地址信号add[1]=ddai[0]控制新轮密存储区13的输出地址,进入步骤(6);
(5)输出地址信号add[1]=31-ddai[0]控制新轮密存储区13的输出地址;
(6)输出地址信号add[2]=0控制新/旧轮密选择器16选择“新轮密”通路,输出地址信号add[3]=0控制数据分路器17选择密扩/加/解密模块19通路,输出地址信号add[4]=1控制密扩/加解密选择器18选择“加解密”通路,输出通路已设好信号tong[0]给密扩/加/解密模块19通路,函数运行结束;
(7)若xin=0即采用新轮密,则进入步骤(8);否则,进入步骤(9);
(8)输出地址信号add[2]=0控制新/旧轮密选择器16选择“新轮密”通路,进入步骤(10);
(9)输出地址信号add[2]=1控制新/旧轮密选择器16选择“旧轮密”通路;
(10)若tmoshi=1,即进行加密时,进入步骤(11);若tmoshi=2,即进行解密时,进入步骤(12);
(11)输出地址信号add[1]=ddai[ti]控制新轮密存储区13和旧轮密存储区11的输出地址,进入步骤(13);
(12)输出地址信号add[1]=31-ddai[ti]控制新轮密存储区13和旧轮密存储区11的输出地址;
(13)输出地址信号add[3]=ti控制数据分路器17选择模块ti通路,输出通路已设好信号tong[ti]给模块ti,运行结束。
实施例9
根据实施例1-3任一所述系统的所述通路任务Tongchu(ti,tmoshi,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)的运行方法,其中,输入信号ti表示要开启通路的模块,ti=0,即模块0要开启通路,表示密扩/加/解密模块19要开启通路,ti=1,即模块1要开启通路,表示加/解密模块20要开启通路,ti=2,即模块2要开启通路,表示解/加密模块21要开启通路;输入信号tmoshi表示要开启通路的模块的工作模式,tmoshi=0表示要开启通路的模块的工作模式为密钥扩展模式,tmoshi=1表示要开启通路的模块的工作模式为加密模式,tmoshi=2表示要开启通路的模块的工作模式为解密模式;输入信号ddai[0]是密扩/加/解密模块19的迭代次数;输出信号tong[2:0]包括tong[2]、tong[1]和tong[0],tong[ti]表示模块ti的开启数据通路信号;输出信号add[1]、add[5]、add[6]是输出给相应模块的地址信号;输入信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0],sjhao[ti]表示开启通路模块ti所处理数据的编号;输出信号sjh是已完成数据的编号,具体步骤包括:
a、若ti=0,即密扩/加/解密模块19要开启通路,则进入b;否则,进入步骤e;
b、若tmoshi=0,即进行密钥扩展时,进入步骤c;若tmoshi=1或tmoshi=2,即进行加密或解密时,进入步骤d;
c、输出地址信号add[5]=0控制轮密/结果分路器22选择“轮密”通路,输出地址信号add[1]=ddai[0]-1控制新轮密存储区13接收新轮密的地址,输出通路已设好信号tong[0]给密扩/加/解密模块19,函数运行结束;
d、输出地址信号add[5]=1控制轮密/结果分路器22选择“结果”通路,输出地址信号add[6]=0控制结果选择器23选择密扩/加/解密模块19通路,输出通路已设好信号tong[0]给密扩/加/解密模块19,等待结果数据存储区在四个CP脉冲下将数据依次存储至Y0、Y1、Y2、Y3后,通过数据号端口sjh输出密扩/加/解密模块19所处理的数据号sjhao[0]的值给微处理器接口12,函数运行结束;
e、输出地址信号add[6]=ti控制结果选择器23选择模块ti通路,输出通路已设好信号tong[ti]给模块ti;
f、等待结果数据存储区在四个CP脉冲下将数据依次存储至Y0、Y1、Y2、Y3后,通过数据号端口sjh输出模块ti所处理的数据号sjhao[ti]的值给微处理器接口12,运行结束。
本发明设计的通路任务Tongru和通路任务Tongchu中所指的“任务”为VerilogHDL硬件描述语言中的“任务”,在VHDL硬件描述语言中用“过程”表示。“任务”与“函数”同属于子程序,都可以被程序所调用,但是函数只能返回一个值,任务可以输出零个或多个值,任务重在描述行为过程。
本发明出现的输出信号moshi[i]与输入信号moshi[i]为代表同一种信号,只是状态不同;本发明出现的输出信号sjhao[i]与输入信号sjhao[i]为代表同一种信号,只是状态不同;本发明出现的输出信号mkh与输入信号mkh为代表同一种信号,只是状态不同;本发明出现的输出信号xmh[i]与输入信号xmh[i]为代表同一种信号,只是状态不同。
Claims (9)
1.一种超高速实现SM4算法的系统,其特征在于,包括:控制模块、密扩/加/解密模块、加/解密模块、解/加密模块、数据分路器、密扩/加解密选择器、轮密/结果分路器、结果选择器,所述控制模块包括微处理器接口、启动模块、数据通路模块、数据缓存区、比较器、异或运算模块和新/旧轮密选择器,所述数据缓存区包括旧密钥存储区、新密钥存储区、系统参数存储区、固有参数存储区、原始数据存储区、旧轮密存储区、新轮密存储区和结果数据存储区;
所述微处理器接口连接微处理器;所述启动模块的三组迭代次数输入分别连接所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的迭代次数输出,所述启动模块的三个启动指令输出分别连接所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的启动指令输入;所述数据通路模块的三组迭代次数输入分别连接所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的迭代次数输出,所述数据通路模块的三个通路设好信号输出分别连接所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的通路设好信号输入;所述数据通路模块通过其第3、4、5、6组地址输出连接所述数据分路器、所述密扩/加解密选择器、所述轮密/结果分路器、所述结果选择器的地址输入;所述数据分路器的数据输入连接所述原始数据存储区的输出和所述新/旧轮密选择器的输出;所述数据分路器的输出连接所述密扩/加解密选择器、所述加/解密模块、所述解/加密模块的数据输入;所述密扩/加解密选择器的数据输入连接所述异或运算模块、所述固有参数存储区的输出和所述数据分路器的输出;所述密扩/加解密选择器的输出连接所述密扩/加/解密模块的数据输入;所述密扩/加/解密模块的数据输出连接所述轮密/结果分路器的数据输入;所述轮密/结果分路器的输出连接所述新轮密存储区的输入、所述结果选择器的输入;所述结果选择器的数据输入连接所述轮密/结果分路器的输出、所述加/解密模块的输出、所述解/加密模块的输出;所述结果选择器的输出连接所述结果数据存储区;
所述密扩/加/解密模块根据接收的所述控制模块的指令,选择自身的工作模式为密钥扩展或者加密/解密,选择自身的工作模式首选为密钥扩展;所述加/解密模块根据所述控制模块输出的数据选择自身的工作模式为加密或者解密,选择自身的工作模式首选为加密;所述解/加密模块根据控制模块输出的数据选择自身的工作模式为解密或者加密,选择自身的工作模式首选为解密;所述微处理器接口用于接收微处理器传送的指令和数据,并将最终加解密结果返回;所述启动模块用于接收所述微处理器接口输出的系统指令及所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块输出的迭代次数信号,根据所述比较器传送的密钥是否变化信号,综合分析确定当前的工作模块及其工作模式,并输出各模块的工作模式、数据号、所需密钥编号和系统的密钥扩展编号发送给所述数据通路模块,输出启动指令给所选模块,启动相应模块运行;所述数据通路模块用于接收所述启动模块输出的各模块的工作模式、数据号、所需密钥编号和系统的密钥扩展编号,根据接收的所述密扩/加/解密模块、所述加/解密模块、所述解/加密模块的迭代次数信号的变化,综合分析,及时判定满足新一轮运算条件的模块,确定当前要设置的数据通路,输出地址信号给所述固有参数存储区、所述旧轮密存储区、所述新轮密存储区、所述新/旧轮密选择器、所述数据分路器、所述密扩/加解密选择器、所述轮密/结果分路器及所述结果选择器,将数据顺利送达所需模块,最后输出通路设好信号给需要通路的模块。
2.根据权利要求1所述系统,其特征在于,所述密扩/加/解密模块包括双向移位寄存器组、带保持的D触发器组、状态机模块、F/F’变换模块、带使能可选入的D触发器组,所述双向移位寄存器组为四输入32位双向移位寄存器U0_3,所述四输入32位双向移位寄存器U0_3包括四个32位寄存器,即U0—U3,所述带保持的D触发器组为带保持功能的32位D触发器U4,所述带使能可选入的D触发器组为带输出使能可选输入的32位D触发器Yd;
所述密扩/加/解密模块的数据输入模块包括所述四输入32位双向移位寄存器U0_3及所述带保持功能的32位D触发器U4,所述密扩/加/解密模块的数据输出模块为带输出使能可选输入的32位D触发器Yd,所述密扩/加/解密模块的数据输入模块的数据输出连接所述F/F’变换模块的数据输入,所述带输出使能可选输入的32位D触发器Yd的两路数据输入分别连接所述F/F’变换模块的数据输出、所述四输入32位双向移位寄存器U0_3的右移输出Q3;所述四输入32位双向移位寄存器U0_3的左移输入端DL与F/F’变换模块的数据输出相连接;
所述F/F’变换模块用于根据接收的类型输入信号将数据完成一次F变换或F’变换后输出;所述状态机模块接收控制模块的启动指令和通路已设好指令,将迭代次数信号输出给控制模块,产生地址信号a2、a1和a0,地址信号a2、a1控制所述四输入32位双向移位寄存器U0_3的工作模式,地址信号a0控制所述带保持功能的32位D触发器U4的工作模式,产生地址信号a2a1控制所述带输出使能可选输入的32位D触发器Yd,当所述四输入32位双向移位寄存器U0_3右移时选择其右移输出Q3作为数据输入,否则,选择F/F’变换模块的数据输出作为数据输入,同时,还产生使能信号控制所述带输出使能可选输入的32位D触发器Yd是否输出数据;所述四输入32位双向移位寄存器U0_3的工作模式包括保持、右移、输入、左移;所述带保持功能的32位D触发器U4工作模式为输入或保持。
3.根据权利要求1所述系统,其特征在于,所述微处理器接口的指令输出、密钥输出、数据输出分别连接所述启动模块的指令输入、新密钥存储区和比较器的输入、原始数据存储区的输入;所述比较器的输入连接所述微处理器接口的密钥输出和旧轮密存储区的输出;所述比较器的输出连接所述启动模块的比较信号输入;所述启动模块的使能信号输出en1、en0分别连接所述新轮密存储区赋值到旧轮密存储区的使能输入、新密钥存储区赋值到旧密钥存储区的使能输入;所述启动模块的三个模块数据号输出、三个工作模式输出、两个所需密钥编号输出、一个密钥扩展编号输出分别连接所述数据通路模块的三个模块数据号输入、三个工作模式输入、两个所需密钥编号输入、一个密钥扩展编号输入;所述数据通路模块的数据号输出连接所述微处理器接口的数据号输入;所述数据通路模块的第0、1、2组地址输出分别连接所述固有参数存储区、旧轮密存储区和新轮密存储区、新/旧轮密选择器的地址输入;所述异或运算模块的输入同时连接所述新密钥存储区的输出和系统参数存储区的输出;所述新/旧轮密选择器的数据输入同时连接所述旧轮密存储区的输出和新轮密存储区的输出;所述旧密钥存储区的数据输入连接所述新密钥存储区的输出;所述旧轮密存储区的数据输入连接所述新轮密存储区的输出;所述结果数据存储区的输出连接所述微处理器接口的结果数据输入。
4.根据权利要求1-3任一所述系统的所述启动模块的运行方法,其特征在于,其中,内部变量i表示工作模块,i=0,即模块0,表示密扩/加/解密模块;i=1,即模块1,表示加/解密模块;i=2,即模块2,表示解/加密模块;内部变量nowsjhao表示最新数据的编号;输入信号ins表示加/解密指令;输入信号cmp表示新密钥和旧密钥是否相同的比较结果;输出信号en1表示新轮密存储区赋值到旧轮密存储区的使能信号;输出信号en0表示新密钥存储区赋值到旧密钥存储区的使能信号;输出信号mkh表示最新密钥扩展的编号;输出信号sjhao[i]表示模块i所处理数据的编号,输出信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0];moshi[i]表示模块i的工作模式,moshi[i]=0表示密钥扩展模式,moshi[i]=1表示加密模式,moshi[i]=2表示解密模式,输出信号moshi[2:0]包括moshi[2]、moshi[1]和moshi[0];输出信号xmh[i]表示模块i所需密钥的编号,输出信号xmh[2:1]包括xmh[2]和xmh[1];输入信号ddai表示迭代次数信号,ddai[i]=j表示:当0≤j≤32时,表示模块i已完成j次迭代,当j=33时,表示模块i已经完全空闲;输出信号st[i]表示模块i的启动信号;步骤如下:
S1、系统初始化,将最新数据的编号和最新密钥扩展的编号清零,即:nowsjhao=0,mkh=0;
S2、若接收到微处理器接口传来的加/解密指令ins,则进入S3,否则,停留在S2;
S3、存储接收的加/解密指令ins,同时将最新数据的编号加1,即nowsjhao++;
S4、根据比较器传送来的新密钥和旧密钥是否相同的比较结果cmp,若新密钥和旧密钥相同,则进入S5;否则,进入S14;
S5、若接收的加/解密指令ins是加密指令,则进入S6,否则,进入S10;
S6、当加/解密模块输出的迭代次数信号ddai[1]=33,判定加/解密模块的运行状态为空闲,进入S7;当加/解密模块输出的迭代次数信号ddai[1]≠33且解/加密模块输出的迭代次数信号ddai[2]=33,判定解/加密模块的运行状态为空闲,进入S8;当加/解密模块输出的迭代次数信号ddai[1]≠33且解/加密模块输出的迭代次数信号ddai[2]≠33且密扩/加/解密模块输出的迭代次数信号ddai[0]=33,判定密扩/加/解密模块的运行状态为空闲,进入S9;否则,停留在S6;
S7、选定当前数据工作模块为加/解密模块、工作模式为加密,即sjhao[1]=nowsjhao,moshi[1]=1,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块,加/解密模块启动运行,返回S2;
S8、选定当前数据工作模块为解/加密模块、工作模式为加密,即sjhao[2]=nowsjhao,moshi[2]=1,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块,解/加密模块启动运行,返回S2;
S9、选定当前数据工作模块为密扩/加/解密模块、工作模式为加密,即sjhao[0]=nowsjhao,moshi[0]=1,通过指令接口输出启动信号st[0]给密扩/加/解密模块,密扩/加/解密模块启动运行,并运行在F变化下,返回S2;
S10、当解/加密模块输出的迭代次数信号ddai[2]=33,判定解/加密模块的运行状态为空闲,进入S11;当解/加密模块输出的迭代次数信号ddai[2]≠33且加/解密模块输出的迭代次数信号ddai[1]=33,判定加/解密模块的运行状态为空闲,进入S12;当解/加密模块输出的迭代次数信号ddai[2]≠33且加/解密模块输出的迭代次数信号ddai[1]≠33且密扩/加/解密模块输出的迭代次数信号ddai[0]=33,判定密扩/加/解密模块的运行状态为空闲,进入S13;否则,停留在S10;
S11、选定当前数据工作模块为解/加密模块、工作模式为解密,即sjhao[2]=nowsjhao、moshi[2]=2,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块,解/加密模块启动运行,返回S2;
S12、选定当前数据工作模块为加/解密模块、工作模式为解密,即sjhao[1]=nowsjhao、moshi[1]=2,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块,加/解密模块4 -->
启动运行,返回S2;
S13、选定当前数据工作模块为密扩/加/解密模块、工作模式为解密,即sjhao[0]=nowsjhao、moshi[0]=2,通过指令接口输出启动信号st[0]给密扩/加/解密模块,密扩/加/解密模块启动运行,并运行在F变化下,返回S2;
S14、当密扩/加/解密模块输出的迭代次数信号ddai为33,即ddai[0]=33,判定密扩/加/解密模块的运行状态为空闲,进入S15;否则,停留在S14;
S15、选定当前的工作模块为密扩/加/解密模块、工作模式为密钥扩展,即sjhao[0]=nowsjhao、moshi[0]=0,通过指令接口输出启动信号st[0]给密扩/加/解密模块,密扩/加/解密模块启动运行,并运行在F’变化下;将当前密钥扩展编号加1,即mkh++;同时,输出使能信号en0选通新密钥存储区到旧密钥存储区的赋值,输出使能信号en1选通新轮密存储区到旧轮密存储区的赋值;
S16、若接收的微处理器的指令是加密指令,则进入S17,否则,进入S20;
S17、当加/解密模块输出的迭代次数信号ddai[1]=33,判定加/解密模块的运行状态为空闲,进入S18;当加/解密模块输出的迭代次数信号ddai[1]≠33且解/加密模块输出的迭代次数信号ddai[2]=33,判定解/加密模块的运行状态为空闲,进入S19;否则,停留在S17;
S18、选定当前数据工作模块为加/解密模块、工作模式为加密,即sjhao[1]=nowsjhao、moshi[1]=1,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块,加/解密模块启动运行,返回S2;
S19、选定当前数据工作模块为解/加密模块、工作模式为加密,即sjhao[2]=nowsjhao、moshi[2]=1,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块,解/加密模块启动运行,返回S2;
S20、当解/加密模块输出的迭代次数信号ddai[2]=33,判定解/加密模块的运行状态为空闲,进入S21;当解/加密模块输出的迭代次数信号ddai[2]≠33且加/解密模块输出的迭代次数信号ddai[1]=33,判定加/解密模块的运行状态为空闲,进入S22;否则,停留在S20;
S21、选定当前数据工作模块为解/加密模块、工作模式为解密,即sjhao[2]=nowsjhao、moshi[2]=2,xmh[2]=mkh,通过指令接口输出启动信号st[2]给解/加密模块,解/加密模块启动运行,返回S2;
S22、选定当前数据工作模块为加/解密模块、工作模式为解密,即sjhao[1]=nowsjhao、moshi[1]=2,xmh[1]=mkh,通过指令接口输出启动信号st[1]给加/解密模块,加/解密模块启动运行,返回S2。5 -->
5.根据权利要求1-3任一所述系统的所述数据通路模块的运行方法,其特征在于,其中,内部变量i表示工作模块,i=0,即模块0,表示密扩/加/解密模块;i=1,即模块1,表示加/解密模块;i=2,即模块2,表示解/加密模块;内部变量deng[i]表示模块i由于所需密钥尚未生成处在等待数据通路的状态,deng[i]=1表示模块i在等待数据通路,deng[i]=0表示模块i未等待数据通路;输出信号sjh是已完成数据的编号;输入信号mkh表示最新密钥扩展的编号输入信号;输入信号sjhao[i]表示模块i所处理数据的编号,输入信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0];输入信号moshi[i]表示模块i的工作模式,moshi[i]=0表示密钥扩展模式,moshi[i]=1表示加密模式,moshi[i]=2表示解密模式,输入信号moshi[2:0]包括moshi[2]、moshi[1]和moshi[0];输入信号xmh[i]表示模块i所需密钥的编号,输入信号xmh[2:1]包括xmh[2]和xmh[1];输出信号add[0]—add[6]是输出给相应模块的地址信号;输出信号tong[i]表示模块i的开启数据通路信号;输入信号ddai[i]表示模块i的迭代次数信号,ddai[i]=j表示:当0≤j≤32时,表示模块i已完成j次迭代,当j=33时,表示模块i已经完全空闲;通路任务Tongru和通路任务Tongchu是数据通路模块内部的子程序,通路任务Tongru负责开启数据输入通路,通路任务Tongchu负责开启数据输出通路;步骤如下:
S23、若模块i的迭代次数信号有变化时,即ddai[i]变化,当ddai[i]≠33,进入S24;当ddai[i]=33,停留在S23;
S24、若迭代次数信号有变化的模块为密扩/加/解密模块,即i=0,则进入S25;否则,进入S49;
S25、若密扩/加/解密模块在进行密钥扩展,即moshi[0]=0,则进入S26;否则,进入S44;
S26、若当前无等待数据通路的模块,即deng[1]=deng[2]=0,进入S27;若当前有1个等待数据通路的模块,即deng[1]=0且deng[2]=1或者deng[1]=1且deng[2]=0,进入S28;若当前有2个等待数据通路的模块,即deng[1]=deng[2]=1,进入S34;
S27、若ddai[0]≠32,表示密扩/加/解密模块需要输入数据,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行密钥扩展设置数据输入通路,其中,tong[2:0]包括tong[2]、tong[1]和tong[0],add[4:0]包括add[4]、add[3]、add[2]、add[1]和add[0];若ddai[0]≠0,表示密扩/加/解密模块需要输出数据,开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路,返回S23;
S28、若1个等待数据通路的模块的工作模式为加密,进入S29;若1个等待数据通路的模块的工作模式为解密,进入S32;
S29、定义1个等待数据通路的模块为模块j;
S30、若密扩/加/解密模块的密钥扩展快于模块j的轮密钥需求,进入S31;否则,返回S23;
S31、若ddai[0]≠32,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路,并消除模块j的等待通路状态,返回S23;
S32、若密扩/加/解密模块的密钥扩展刚好完成,进入S33;否则,返回S23;
S33、定义1个等待数据通路的模块为模块j,开启输出通路,即调用通路任务TongchuTongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,2,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行解密运算设置数据输入通路,并消除模块j的等待通路状态,返回S23;
S34、若2个等待数据通路的模块同为加密模式且迭代次数相同,进入S35;若2个等待数据通路的模块同为加密模式且迭代次数不同,进入S37;若2个等待数据通路的模块中,1个等待数据通路的模块在解密另1个等待数据通路的模块在加密,且在加密的等待数据通路的模块的迭代次数不为31,则进入S37;否则,进入S40;
S35、若密扩/加/解密模块的密钥扩展快于加/解密模块和解/加密模块的轮密钥需求,进入S36;否则,返回S23;
S36、若ddai[0]≠32,开启输入通路,即调用通路任Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(1,0,1,ddai[0],tong[2:0],add[4:0])为加/解密模块采用新轮密进行加密运算设置数据输入通路,并消除加/解密模块的等待通路状态;在三个CP脉冲后,调用通路任务Tongru(2,0,1,ddai[0],tong[2:0],add[4:0])为解/加密模块采用新轮密进7 -->
行加密运算设置数据输入通路,并消除解/加密模块的等待通路状态,返回S23;
S37、若2个等待数据通路的模块一个等待数据通路的模块在解密另一个等待数据通路的模块在加密,加密模块为模块j;若2个等待数据通路的模块均为加密模式,2个等待数据通路的模块中选迭代次数较小的为模块j;
S38、若密扩/加/解密模块的密钥扩展快于模块j的轮密钥需求,则进入S39;否则,返回S23;
S39、若ddai[0]≠32,开启输入通路,即调用通路任务Tongru(0,0,0,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行密钥扩展设置数据输入通路;开启输出通路,即调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路,在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路j,并消除模块j的等待通路状态,返回S23;
S40、若密扩/加/解密模块的密钥扩展刚好完成,进入S41;否则,返回S23;
S41、若2个等待数据通路的模块都在解密,则进入S42;若2个等待数据通路的模块中一个等待数据通路的模块在解密另一个等待数据通路的模块在加密且加密模块的迭代次数为31,进入S43;
S42、调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(1,0,2,ddai[0],tong[2:0],add[4:0])为加/解密模块采用新轮密进行解密运算设置数据输入通路,并消除加/解密模块的等待通路状态;在三个CP脉冲后,调用通路任务Tongru(2,0,2,ddai[0],tong[2:0],add[4:0])为解/加密模块采用新轮密进行解密运算设置数据输入通路,并消除解/加密模块的等待通路状态,返回S23;
S43、2个等待数据通路的模块中,定义加密的等待数据通路的模块为模块j,定义解密的等待数据通路的模块为模块k,调用通路任务Tongchu(0,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出新轮密设置数据输出通路;在三个CP脉冲后,调用通路任务Tongru(j,0,1,ddai[0],tong[2:0],add[4:0])为模块j采用新轮密进行加密运算设置数据输入通路,并消除模块j的等待数据通路状态;在三个CP脉冲后,调用通路任务Tongru(k,0,2,ddai[0],tong[2:0],add[4:0])为模块k采用新轮密进行解密运算设置数据输入通路,并消除模块k的等待数据通路状态,返回S23;
S44、若密扩/加/解密模块的加/解密运算刚好完成,则进入S45;否则,进入S46;8 -->
S45、调用通路任务Tongchu(0,1,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为密扩/加/解密模块输出最终处理好的密/明文设置输出通路,返回S23;
S46、若密扩/加/解密模块的工作模式为加密,则进入S47;若密扩/加/解密模块的工作模式为解密,进入S48;
S47、调用通路任务Tongru(0,0,1,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行加密设置数据输入通路,返回S23;
S48、调用通路任务Tongru(0,0,2,ddai[0],tong[2:0],add[4:0])为密扩/加/解密模块进行解密设置数据输入通路,返回S23;
S49、定义迭代次数信号有变化的模块为模块t;
S50、若模块t的加/解密运算刚好完成,则进入S51;否则,进入S52;
S51、调用通路任务Tongchu(t,0,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)为模块t输出最终处理好的密/明文设置输出通路,返回S23;
S52、若模块t的工作模式为加密,则进入S53;否则,进入S58;
S53、若所需密钥编号xmh[t]不等于最新密钥扩展编号mkh,进入S54;否则,进入S55;
S54、调用通路任务Tongru(t,1,1,ddai[0],tong[2:0],add[4:0])为模块t采用旧轮密进行加密设置数据输入通路,返回S23;
S55、若密扩/加/解密模块的密钥扩展快于模块t的轮密钥需求,则进入S56;否则,进入S57;
S56、调用通路任务Tongru(t,0,1,ddai[0],tong[2:0],add[4:0])为模块t采用新轮密进行加密设置数据输入通路,返回S23;
S57、将模块t的等待通路信号deng[t]置1,返回S23;
S58、若所需密钥编号xmh[t]不等于最新密钥扩展编号mkh,则进入S59;否则,进入S60;
S59、调用通路任务Tongru(t,1,2,ddai[0],tong[2:0],add[4:0])为模块t采用旧轮密进行解密设置数据输入通路,返回S23;
S60、若密扩/加/解密模块的密钥扩展已经完成,则进入S61;否则,进入S62;
S61、调用通路任务Tongru(t,0,2,ddai[0],tong[2:0],add[4:0])为模块t采用新轮密进行解密设置数据输入通路,返回S23;
S62、将模块t的等待通路信号deng[t]置1,返回S23。
6.根据权利要求1-3任一所述系统的所述密扩/加/解密模块的运行方法,其特征在于,具体步骤如下:
S63、密扩/加/解密模块初始化,设置密扩/加/解密模块的输入寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效;
S64、若接收到控制模块的启动信号st[0],则进入S65,否则,停留在S64;
S65、根据启动信号st[0]串行序列的类型,判定要求启动的变换类型,若要求启动F’类型的变换,则确定内部的类型信号为0,即type=0,选择F’变换的通路;若是要求启动F类型的变换,则确定内部类型信号为1,即type=1,选择F变换的通路;将输出给控制模块的迭代次数信号置0,ddai[0]=0,请求通路;
S66、若接收到控制模块的通路已设好信号tong[0],则进入S67;否则,停留在S66;
S67、设置密扩/加/解密模块的输入寄存器组U0、U1、U2、U3、U4为并行输入状态,在一个时钟脉冲下存储接收数据,之后设置输入寄存器组U0、U1、U2、U3、U4为保持状态,其中,所述数据是由控制模块选定的密钥扩展所需的MK0⊕FK0、MK1⊕FK1、MK2⊕FK2、MK3⊕FK3和第0轮所需的固有参数,或者加/解密所需的待处理明/密文数据X0、X1、X2、X3和第0轮所需轮密钥;
S68、根据选择的通路进行一次F’变换或F变换,即:type=0时,进行F’变换,得到输出F’(U0、U1、U2、U3、U4),type=1时,进行F变换,得到输出F(U0、U1、U2、U3、U4);
S69、将输出给控制模块的迭代次数信号加1,即ddai[0]++,请求通路;
S70、若接收到控制模块的通路已设好信号tong[0],进入S71;否则,停留在S70;
S71、若是F’变换且迭代次数小于32,即type=0且ddai[0]<32,进入S72;若是F变换且迭代次数小于32,即type=1且ddai[0]<32,进入S73;若是F’变换且迭代次数等于32,即type=0且ddai[0]=32,进入S74;若是F变换且迭代次数等于32,即type=1且ddai[0]=32,进入S75;
S72、将输出使能信号置为有效,设置密扩/加/解密模块寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,以在一个时钟信号控制下自Y端输出生成的第ddai[0]-1轮轮密钥给控制模块选定的新轮密存储区,同时实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=第ddai[0]轮所需固有参数,之后设置寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效,返回S68;
S73、设置密扩/加/解密模块寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,以在一个时钟信号控制下实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=第ddai[0]轮所需轮密钥,之后设置寄存器组U0、U1、U2、U3、U4为保持状态,返回S68;10 -->
S74、将输出使能信号置为有效,以在一个时钟信号控制下自Y端输出生成的最后一轮轮密钥给控制模块选定的新轮密存储区,之后将迭代次数信号加1,即ddai[0]=33,以示模块空闲,返回S63;
S75、设置密扩/加/解密模块的寄存器组U0、U1、U1、U2、U3、Y为串行右移状态,将输出使能信号置为有效,以在四个时钟脉冲下自Y端依次输出Y、U3、U2、U1的数据给控制模块选定的结果数据存储区,之后将迭代次数信号加1,即ddai[0]=33,以示模块空闲,返回S63。
7.根据权利要求1-3任一所述系统的加/解密模块或解/加密模块的运行方法,其特征在于,具体步骤包括:
S76、加/解密模块或解/加密模块初始化,设置加/解密模块或解/加密模块的输入寄存器组U0、U1、U2、U3、U4为保持状态,将输出使能信号置为无效;
S77、若接收到控制模块的启动信号,则进入S78,否则,停留在S77;
S78、将输出给控制模块的迭代次数信号置0,请求通路;
S79、若接收到控制模块的通路已设好信号,则进入S80;否则,停留在S79;
S80、设置加/解密模块或解/加密模块的输入寄存器组U0、U1、U2、U3、U4为并行输入状态,在一个时钟脉冲下存储接收数据,之后设置加/解密模块或解/加密模块的输入寄存器组U0、U1、U2、U3、U4为保持状态,所述数据是由控制模块选定的待处理明/密文数据X0、X1、X2、X3和第0轮所需轮密钥;
S81、根据存储的数据进行一次F变换,得到输出F(U0、U1、U2、U3、U4);
S82、将输出给控制模块的迭代次数信号加1,请求通路;
S83、若接收到控制模块的通路已设好信号,则进入S84;否则,停留在S83;
S84、若不是最后一轮,即迭代次数小于32,进入S85;否则,进入S86;
S85、设置加/解密模块或解/加密模块的寄存器组U0、U1、U2、U3、Y为串行左移状态,设置U4为输入状态,在一个时钟信号控制下实现赋值U0=U1,U1=U2,U2=U3,U3=Y,U4=本次迭代所需轮密钥,设置寄存器组U0、U1、U2、U3、U4为保持状态,返回S81;
S86、设置加/解密模块或解/加密模块的寄存器组U0、U1、U2、U3、Y为串行右移状态,将输出使能信号置为有效,在四个时钟脉冲下自Y端依次输出Y、U3、U2、U1的数据给控制模块选定的结果数据存储区,之后将迭代次数信号加1,即赋值33,以示模块空闲,返回S76。
8.根据权利要求1-3任一所述系统的所述通路任务Tongru(ti,xin,tmoshi,ddai[0],tong[2:0],add[4:0])的运行方法,其特征在于,其中,输入信号ti表示要开启通路的模块,ti=0,即模块0要开启通路,表示密扩/加/解密模块要开启通路,ti=1,即模块1要开启通路,表示加/解密模块要开启通路,ti=2,即模块2要开启通路,表示解/加密模块要开启通路;输入信号xin=0表示采用新轮密钥,xin=1表示采用旧轮密钥;输入信号tmoshi表示要开启通路的模块的工作模式,tmoshi=0表示要开启通路的模块的工作模式为密钥扩展模式,tmoshi=1表示要开启通路的模块的工作模式为加密模式,tmoshi=2表示要开启通路的模块的工作模式为解密模式;输入信号ddai[0]是密扩/加/解密模块的迭代次数;输出信号tong[2:0]包括tong[2]、tong[1]和tong[0],tong[ti]表示模块ti的开启数据通路信号;输出信号add[4:0]包括add[4]、add[3]、add[2]、add[1]和add[0],表示输出给相应模块的地址信号,具体步骤包括:
(1)若ti=0,即密扩/加/解密模块要开启通路,进入步骤(2);否则,即加/解密模块或解/加密模块要开启通路,则进入步骤(7);
(2)若tmoshi=0,即进行密钥扩展时,进入步骤(3);若tmoshi=1,即进行加密时,进入步骤(4);否则,密扩/加/解密模块进行解密,进入步骤(5);
(3)输出地址信号add[0]=ddai[0]控制固有参数存储区的输出地址,输出地址信号add[4]=0控制密扩/加解密选择器选择“密扩”通路,输出通路已设好信号tong[0]给密扩/加/解密模块,函数运行结束;
(4)输出地址信号add[1]=ddai[0]控制新轮密存储区的输出地址,进入步骤(6);
(5)输出地址信号add[1]=31-ddai[0]控制新轮密存储区的输出地址;
(6)输出地址信号add[2]=0控制新/旧轮密选择器选择“新轮密”通路,输出地址信号add[3]=0控制数据分路器选择密扩/加/解密模块通路,输出地址信号add[4]=1控制密扩/加解密选择器选择“加解密”通路,输出通路已设好信号tong[0]给密扩/加/解密模块通路,函数运行结束;
(7)若xin=0即采用新轮密,则进入步骤(8);否则,进入步骤(9);
(8)输出地址信号add[2]=0控制新/旧轮密选择器选择“新轮密”通路,进入步骤(10);
(9)输出地址信号add[2]=1控制新/旧轮密选择器选择“旧轮密”通路;
(10)若tmoshi=1,即进行加密时,进入步骤(11);若tmoshi=2,即进行解密时,进入步骤(12);
(11)输出地址信号add[1]=ddai[ti]控制新轮密存储区和旧轮密存储区的输出地址,进入步骤(13);
(12)输出地址信号add[1]=31-ddai[ti]控制新轮密存储区和旧轮密存储区的输出地址;12 -->
(13)输出地址信号add[3]=ti控制数据分路器选择模块ti通路,输出通路已设好信号tong[ti]给模块ti,运行结束。
9.根据权利要求1-3任一所述系统的所述通路任务Tongchu(ti,tmoshi,ddai[0],tong[2:0],add[1],add[5],add[6],sjhao[2:0],sjh)的运行方法,其特征在于,其中,输入信号ti表示要开启通路的模块,ti=0,即模块0要开启通路,表示密扩/加/解密模块要开启通路,ti=1,即模块1要开启通路,表示加/解密模块要开启通路,ti=2,即模块2要开启通路,表示解/加密模块要开启通路;输入信号tmoshi表示要开启通路的模块的工作模式,tmoshi=0表示要开启通路的模块的工作模式为密钥扩展模式,tmoshi=1表示要开启通路的模块的工作模式为加密模式,tmoshi=2表示要开启通路的模块的工作模式为解密模式;输入信号ddai[0]是密扩/加/解密模块的迭代次数;输出信号tong[2:0]包括tong[2]、tong[1]和tong[0],tong[ti]表示模块ti的开启数据通路信号;输出信号add[1]、add[5]、add[6]是输出给相应模块的地址信号;输入信号sjhao[2:0]包括sjhao[2]、sjhao[1]和sjhao[0],sjhao[ti]表示开启通路模块ti所处理数据的编号;输出信号sjh是已完成数据的编号,具体步骤包括:
a、若ti=0,即密扩/加/解密模块要开启通路,则进入b;否则,进入步骤e;
b、若tmoshi=0,即进行密钥扩展时,进入步骤c;若tmoshi=1或tmoshi=2,即进行加密或解密时,进入步骤d;
c、输出地址信号add[5]=0控制轮密/结果分路器选择“轮密”通路,输出地址信号add[1]=ddai[0]-1控制新轮密存储区接收新轮密的地址,输出通路已设好信号tong[0]给密扩/加/解密模块,函数运行结束;
d、输出地址信号add[5]=1控制轮密/结果分路器选择“结果”通路,输出地址信号add[6]=0控制结果选择器选择密扩/加/解密模块通路,输出通路已设好信号tong[0]给密扩/加/解密模块,等待结果数据存储区在四个CP脉冲下将数据依次存储至Y0、Y1、Y2、Y3后,通过数据号端口sjh输出密扩/加/解密模块所处理的数据号sjhao[0]的值给微处理器接口模块,函数运行结束;
e、输出地址信号add[6]=ti控制结果选择器选择模块ti通路,输出通路已设好信号tong[ti]给模块ti;
f、等待结果数据存储区在四个CP脉冲下将数据依次存储至Y0、Y1、Y2、Y3后,通过数据号端口sjh输出模块ti所处理的数据号sjhao[ti]的值给微处理器接口模块,运行结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510083027.6A CN104579636B (zh) | 2015-02-16 | 2015-02-16 | 一种超高速实现sm4算法的系统及其运行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510083027.6A CN104579636B (zh) | 2015-02-16 | 2015-02-16 | 一种超高速实现sm4算法的系统及其运行方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104579636A true CN104579636A (zh) | 2015-04-29 |
CN104579636B CN104579636B (zh) | 2018-01-05 |
Family
ID=53094924
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510083027.6A Active CN104579636B (zh) | 2015-02-16 | 2015-02-16 | 一种超高速实现sm4算法的系统及其运行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104579636B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105049194A (zh) * | 2015-06-01 | 2015-11-11 | 北京时代民芯科技有限公司 | 一种流水线结构的sm4算法实现系统 |
CN105490802A (zh) * | 2015-11-27 | 2016-04-13 | 桂林电子科技大学 | 基于gpu的改进sm4并行加解密通信方法 |
CN105515758A (zh) * | 2015-11-27 | 2016-04-20 | 桂林电子科技大学 | 基于Modbus协议的数据并行加密通信方法和系统 |
CN109218008A (zh) * | 2017-07-05 | 2019-01-15 | 北京同方微电子有限公司 | 一种针对sm4密钥扩展算法的模板攻击方法 |
CN109617671A (zh) * | 2018-12-21 | 2019-04-12 | 成都海光集成电路设计有限公司 | 加解密、扩展方法及装置、加解密系统、终端 |
CN109743156A (zh) * | 2018-12-28 | 2019-05-10 | 北京思源互联科技有限公司 | 一种分组加解密方法和装置 |
CN111614456A (zh) * | 2020-05-06 | 2020-09-01 | 武汉大学 | 一种针对sm4算法的多方协同加/解密方法及介质 |
CN112583573A (zh) * | 2020-11-19 | 2021-03-30 | 北京智芯微电子科技有限公司 | Sm4防故障攻击方法及sm4防故障攻击装置 |
CN113485752A (zh) * | 2014-09-26 | 2021-10-08 | 英特尔公司 | 用于提供simd sm4加密块密码功能性的指令和逻辑 |
CN114826617A (zh) * | 2022-04-29 | 2022-07-29 | 西北工业大学 | 工业物联网终端系统设计、数据验证方法及硬件加速装置 |
CN116488794A (zh) * | 2023-06-16 | 2023-07-25 | 杭州海康威视数字技术股份有限公司 | 基于fpga的高速sm4密码模组实现方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103679061A (zh) * | 2013-11-22 | 2014-03-26 | 北京民芯科技有限公司 | 国密sm4算法的可扩展高吞吐率的实现方法及装置 |
CN103746796A (zh) * | 2014-01-20 | 2014-04-23 | 深圳华视微电子有限公司 | 一种实现智能卡sm4密码算法的协处理器 |
CN103812641A (zh) * | 2012-11-07 | 2014-05-21 | 中国科学院微电子研究所 | 一种实现sm4分组对称密码算法的系统 |
-
2015
- 2015-02-16 CN CN201510083027.6A patent/CN104579636B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103812641A (zh) * | 2012-11-07 | 2014-05-21 | 中国科学院微电子研究所 | 一种实现sm4分组对称密码算法的系统 |
CN103679061A (zh) * | 2013-11-22 | 2014-03-26 | 北京民芯科技有限公司 | 国密sm4算法的可扩展高吞吐率的实现方法及装置 |
CN103746796A (zh) * | 2014-01-20 | 2014-04-23 | 深圳华视微电子有限公司 | 一种实现智能卡sm4密码算法的协处理器 |
Non-Patent Citations (2)
Title |
---|
牛砚波等: "一种低功耗抗差分功耗分析攻击的SM4算法实现", 《微电子学与计算机》 * |
王晨光等: "分组密码算法SM4的低复杂度实现", 《计算机工程》 * |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113485752A (zh) * | 2014-09-26 | 2021-10-08 | 英特尔公司 | 用于提供simd sm4加密块密码功能性的指令和逻辑 |
CN105049194B (zh) * | 2015-06-01 | 2018-05-08 | 北京时代民芯科技有限公司 | 一种流水线结构的sm4算法实现系统 |
CN105049194A (zh) * | 2015-06-01 | 2015-11-11 | 北京时代民芯科技有限公司 | 一种流水线结构的sm4算法实现系统 |
CN105490802A (zh) * | 2015-11-27 | 2016-04-13 | 桂林电子科技大学 | 基于gpu的改进sm4并行加解密通信方法 |
CN105515758A (zh) * | 2015-11-27 | 2016-04-20 | 桂林电子科技大学 | 基于Modbus协议的数据并行加密通信方法和系统 |
CN105490802B (zh) * | 2015-11-27 | 2018-07-27 | 桂林电子科技大学 | 基于gpu的改进sm4并行加解密通信方法 |
CN105515758B (zh) * | 2015-11-27 | 2018-08-17 | 桂林电子科技大学 | 基于Modbus协议的数据并行加密通信方法和系统 |
CN109218008A (zh) * | 2017-07-05 | 2019-01-15 | 北京同方微电子有限公司 | 一种针对sm4密钥扩展算法的模板攻击方法 |
CN109218008B (zh) * | 2017-07-05 | 2023-12-19 | 紫光同芯微电子有限公司 | 一种针对sm4密钥扩展算法的模板攻击方法 |
CN109617671A (zh) * | 2018-12-21 | 2019-04-12 | 成都海光集成电路设计有限公司 | 加解密、扩展方法及装置、加解密系统、终端 |
CN109743156A (zh) * | 2018-12-28 | 2019-05-10 | 北京思源互联科技有限公司 | 一种分组加解密方法和装置 |
CN109743156B (zh) * | 2018-12-28 | 2022-03-22 | 北京思源理想控股集团有限公司 | 一种分组加解密方法和装置 |
CN111614456B (zh) * | 2020-05-06 | 2022-04-01 | 武汉大学 | 一种针对sm4算法的多方协同加密方法 |
CN111614456A (zh) * | 2020-05-06 | 2020-09-01 | 武汉大学 | 一种针对sm4算法的多方协同加/解密方法及介质 |
CN112583573A (zh) * | 2020-11-19 | 2021-03-30 | 北京智芯微电子科技有限公司 | Sm4防故障攻击方法及sm4防故障攻击装置 |
CN112583573B (zh) * | 2020-11-19 | 2022-01-14 | 北京智芯微电子科技有限公司 | Sm4防故障攻击方法及sm4防故障攻击装置 |
CN114826617A (zh) * | 2022-04-29 | 2022-07-29 | 西北工业大学 | 工业物联网终端系统设计、数据验证方法及硬件加速装置 |
CN116488794A (zh) * | 2023-06-16 | 2023-07-25 | 杭州海康威视数字技术股份有限公司 | 基于fpga的高速sm4密码模组实现方法及装置 |
CN116488794B (zh) * | 2023-06-16 | 2023-09-19 | 杭州海康威视数字技术股份有限公司 | 基于fpga的高速sm4密码模组实现方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104579636B (zh) | 2018-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104579636A (zh) | 一种超高速实现sm4算法的系统及其运行方法 | |
CN100369074C (zh) | 一种实现sms4密码算法中加解密处理的方法 | |
CN100368954C (zh) | 微处理器 | |
TW201239765A (en) | State grouping for element utilization | |
CN107038015A (zh) | 一种高速真随机数发生器 | |
CN102968290B (zh) | 一种异构轻量级的真随机数产生器 | |
CN104391813B (zh) | 一种嵌入式数据安全系统用soc芯片 | |
CN109447225A (zh) | 一种高速安全加密Micro SD卡 | |
KR102358940B1 (ko) | 하이 레벨 합성에서의 시스템 아키텍처 추출법 | |
CN106228088A (zh) | 一种基于国产bmc芯片的sm4算法ip核的设计方法 | |
CN102508803A (zh) | 一种矩阵转置存储控制器 | |
CN103731822B (zh) | 一种祖冲之算法的实现系统及其方法 | |
CN109190413B (zh) | 一种基于fpga和md5加密的串行通信系统 | |
CN105577363A (zh) | 针对sm4密码算法的可扩展流水线电路及其实现方法 | |
CN104219045B (zh) | Rc4 流密码生成器 | |
CN104539417A (zh) | 一种基于流密码的加密设备 | |
CN103336920B (zh) | 用于无线传感网络soc芯片的安全系统 | |
CN100389554C (zh) | 高效率实现sms4算法的加解密处理方法 | |
CN102307090B (zh) | 基于ⅱ型最优正规基的椭圆曲线密码协处理器 | |
CN101246743A (zh) | 闪存接口 | |
CN103220150A (zh) | 一种基于fpga的税收校验卡 | |
CN105049203A (zh) | 一种支持多工作模式的可配置3des加解密算法电路 | |
CN102110066B (zh) | 一种税控加密卡的控制方法 | |
CN107066900A (zh) | 面向分组密码算法的可重构s盒、可重构计算阵列及门控方法 | |
Zhao et al. | An efficient ASIC implementation of QARMA lightweight algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C53 | Correction of patent of invention or patent application | ||
CB03 | Change of inventor or designer information |
Inventor after: Lv Qian Inventor after: Cao Yanyan Inventor after: Cui Ligong Inventor before: Lv Qian Inventor before: Cao Yanyan |
|
COR | Change of bibliographic data |
Free format text: CORRECT: INVENTOR; FROM: LV QIAN CAO YANYAN TO: LV QIAN CAO YANYAN CUI LIGONG |
|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |