[0032] 下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0033] 实施例:
[0034] 参照图1为本实施例的基于FPGA的SM4‑GCM网络加密传输系统实现方法步骤流程图;图2本发明一个实施例的基于FPGA的SM4‑GCM网络加密传输系统的模块关系示意图;图3为本发明一个实施例的基于FPGA的SM4‑GCM网络加密传输系统的顶层硬件结构;
[0035] 具体的,一种基于FPGA的SM4‑GCM网络加密传输系统实现方法,其特征在于:包括以下步骤:
[0036] S1,从数据准备模块接受所需数据,将参数和密钥分别送入随机数模块和密钥扩展模块生成相应的随机数和扩展密钥;
[0037] S2,将随机数和明文送入加密模块进行加密;
[0038] S3,将得到的密文、密钥与随机数送入消息认证模块生成HMAC值;
[0039] S4,在加/解密的同时,系统会通过SM3算法和Pascal模块更新下一次所需的密钥;
[0040] 所述S1中,随机数模块为加密模块和消息认证模块提供相应的随机数,密钥扩展模块为加密模块提供相应的密钥;其中,随机数模块包括填充模块和迭代压缩模块;密钥扩展模块包括线性变换模块和非线性变换模块以及密钥存储模块。
[0041] 所述S2中,加密模块包括若干合成置换模块,每个合成置换模块包括字节替换单元、移位单元、异或单元;加密过程中所需的密钥将从密钥扩展模块中的密钥存储单元调用。
[0042] 所述S3中,消息认证模块负责对加密后的消息进行认证,包括由KOA方法设计的128bit有限域乘法单元和基于改进并行模约算法设计的模约减单元。
[0043] 所述S4中,密钥更新模块包括SM3算法模块、系统参数组、掩码模块和Pascal模块;SM3算法模块包括消息填充模块、若干消息分组模块和迭代压缩模块组成。参数组分为两组,一组为系统初始设置值,一组为系统运行时产生,均由RAM实现。
[0044] 本实施例中,所述S1,S2,S3,S4步骤中,明文m长度为固定128bit,密钥k长度为固定128bit,随机数为128bit;
[0045] 具体的:在所述步骤S1中,由数据准备模块负责服务器与FPGA模块的数据传递。需传递的参数包括该次加密的数据总长度,附加信息的总长度,每次128bit的消息分组和最39
初双方约定的密钥。单次加密数据长度最大为2 ‑256bit。
[0046] 在所述S1中包括获取数据信息和计算随机数和密钥,包括以下步骤:
[0047] S1.1、获取数据块信息并根据输入的128bit数通过随机数模块产生128bit的随机数;
[0048] S1.2、根据输入的128bit密钥通过密钥扩展模块生成一组共32个32bit的密钥。
[0049] 随机数模块输入128bit数据后,填充至1600bit,之后迭代分为θ、ρ、π、χ和ι五步。θ单元将1600bit以三维数组的形式压缩至320bit并与原来的1600bit异或得到新的1600bit矩阵,其计算公式为C[x,z]=A[x,0,z]⊕A[x,1,z]⊕A[x,2,z]⊕A[x,3,z]⊕
[0050] A[x,4,z]、D[x,z]=C[(x‑1)mod5,z]⊕C[(x+1)mod5,(z–1)modw]、A′[x,y,z]=A[x,y,z]⊕D[x,z];ρ单元将1600bit以z轴为基准循环移位,其计算公式为A′[0,0,z]=A[0,0,z]、A′[x,y,z]=A[x,y,(z–(t+1)(t+2)/2)modw]、
[0051] (x,y)=(y,(2x+3y)mod5);π单元以x‑y平面为基准进行移位替换,其计算公式为A′[x,y,z]=A[(x+3y)mod5,x,z];χ单元将三个矩阵按不同行异或得到一个1600bit矩阵,其计算公式为A′[x,y,z]=A[x,y,z]⊕((A[(x+1)mod5,y,z]⊕1)·A[(x+2)mod5,y,z]);ι单元将矩阵的第一纵列(0,0,1)异或一个64bit系统参数,破坏其对称性,其计算公式为A′[0,0,z]=
[0052] A′[0,0,z]⊕RC[z]。上述操作执行24轮,其中0≤x,y≤4、0≤z≤63且为整数。
[0053] 密钥扩展模块输入128bit初始密钥后会分成4个32bit的数据块并经过32轮的合成置换。在输入合成置换单元之前会将最新的三个32bit消息块和一个32bit的系统参数异或成32bit的输入。每一轮都会得到一个32bit的消息块作为扩展密钥并加入输入队列。合成置换单元由非线性变换单元和线性变换单元构成。非线性变换由四个并行的S盒组成,其8
变化方法为,根据输入的1Byte计算其仿射变换,而后求解其有限域GF(2)上的乘法逆元,再对乘法逆元计算其相应的仿射变换。线性变换的变化方法为,将输入的4Byte数据循环移位5次并将五次移位的结果异或。非线性变换单元由四个并行查找表和八个仿射变换逻辑电路构成。查找表将8bit输入替换为其有限域上的乘法逆元,由双端口ROM实现,如图4所示。非线性变换部分的输出将作为线性变换的输入,线性变换由多个循环移位和异或构成,得到的密钥存入BRAM中,用于加密模块的调用。
[0054] 在所述步骤S2中,128bit随机数输入到加密模块分成4个32bit的数据块并经过32轮的合成置换。在输入合成置换单元之前会将最新的三个32bit消息块和一个之前的得到对应轮次的扩展密钥异或成32bit的输入。每一轮都会得到一个32bit的消息块加入下一轮次的输入队列。将最后四轮次的密文倒置并与128bit明文异或即可得到相对应的128bit密文,且随机数加一。
[0055] 在所述步骤S3中,消息认证模块首次输入128bit密文或附加消息,将直接与密钥H进行有限域模乘得到128bit数据,后续输入的128bit密文或附加消息会与上次得到的128bit数据异或后,再与密钥H进行有限域模乘得到128bit数据。模约采用的本原多项式为
2 7 128
f=1+α+α+α+α 。密钥H由随机数经过加密模块得到的128bit数据异或加密模块的密钥产生。模乘单元的硬件结构如图5所示。
[0056] 在所述步骤S4中,当触发密钥更新时,由加密方选择一个系统参数,选择的参数地址会添加至附加消息以通知通信对方的相应模块。128bit的参数会划分为16份并异或变为4个参数,较大的两个为n1,n2,较小的两个为k1,k2。根据参数求解两组Pascal的解,并对结果取模16得到两个参数地址。Pascal的计算公式为:
[0057]
[0058] 将所得参数送入SM3模块后,其计算过程为将输入的128bit数据根据填充规则变换成所需的512bit消息,并分成16个4Byte长度的消息块。而后通过对特定消息块的循环移位、异或运算、置换得到其余的52个消息,记作消息组W。同时,根据消息组W,得到第二个含64个字的消息分组W2。迭代压缩是将初始变量IV分为含8个字的消息组,通过64次对该消息组、W分组和W2分组的布尔替代、置换及移位等多种运算规则,得到经过压缩后的256bit数据。参数将分为两个128bit数据循环左移位并替换原来运行系统参数组中对应参数地址的参数值,移位的大小基于参数自身的地址。上述三个所选的参数移位异或后即得到更新后的密钥,更新后的密钥被送入密钥扩展模块以参与下一次的加密,如图6所示。
[0059] 运行系统参数组在系统最初启动或重置时,会拷贝初始参数组的数据。初始系统参数组的数据会保留以用于系统恢复。同时,在存储和调用参数时,会经掩码和解码模块操作,以确保参数的安全性。若因为系统故障或外部攻击使得通信双方在密钥更新时发生错误,导致双方密钥不一致,则该错误会在消息认证阶段由GMAC模块判断出来,双方会丢弃该密钥,并基于初始系统参数重新生成密钥。
[0060] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。