具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
序列密码算法是以字符或者比特作为基本处理单元,通过产生密钥流来对数据进行加解密处理的密码算法。例如以利用序列密码算法对明文数据进行加密为例,序列密码算法可以产生密钥流(密钥流可以由多个密钥字组成),从而利用密钥流中的多个密钥字依次对明文数据中的比特进行加密,可以得到加密的密文数据。
序列密码算法可以例如祖冲之(ZUC)密码算法等。以祖冲之密码算法为例,祖冲之密码算法在生成密钥流时涉及非线性函数,非线性函数包含Sbox(置换盒)运算,并且Sbox运算通过4个并置的Sbox实现,4个并置的Sbox由两个Sbox0和两个Sbox1形成。为便于标识祖冲之密码算法的Sbox,本申请实施例在祖冲之密码算法的Sbox的名称之前添加前缀ZUC,也就是说,祖冲之密码算法的Sbox设为ZUCSbox;例如,祖冲之密码算法的Sbox0设为ZUCSbox0,祖冲之密码算法的Sbox1设为ZUCSbox1。
实现Sbox运算的一种方式是:通过查找Sbox查找表的查表方式,得到Sbox的输出。也就是说,从Sbox的输入中确定查找行和查找列,从而在对应Sbox查找表中确定查找行和查找列相应的值,则可得到Sbox的输出。
例如,对于祖冲之密码算法的ZUCSbox0,在ZUCSbox0的输入中确定查找行和查找列后,可以在ZUCSbox0对应的ZUCSbox0查找表中进行查找,确定查找行和查找列在ZUCSbox0查找表中对应的值,得到ZUCSbox0的输出;图1A示例性的示出了ZUCSbox0查找表的示例图,可进行参照。同理,对于祖冲之密码算法的ZUCSbox1,在ZUCSbox1的输入中确定查找行和查找列后,可以在ZUCSbox1对应的ZUCSbox1查找表中进行查找,确定查找行和查找列在ZUCSbox1查找表中对应的值,得到ZUCSbox1的输出;图1B示例性的示出了ZUCSbox1查找表的示例图,可进行参照。
虽然利用查找Sbox查找表的查表方式,能够实现祖冲之密码算法等序列密码算法的Sbox运算,但是查找Sbox查找表导致Sbox运算较为耗时,这使得Sbox运算的效率较低,进而影响了密钥流的生成效率,降低了数据安全处理的效率。
基于此,本申请实施例在利用祖冲之密码算法等序列密码算法,对数据进行安全处理时,通过改进的数据安全处理方案,来提升序列密码算法的Sbox运算效率,进而提升序列密码算法的密钥流的生成效率,提升数据安全处理效率。
本申请的发明人在研究过程中发现:序列密码算法(例如祖冲之密码算法)的Sbox1运算,与分组密码算法(例如SM4密码算法)的轮函数运算存在关联,并且分组密码算法的轮函数运算包含Sbox运算,同时分组密码算法用于轮函数运算的轮函数指令存在加速设计,因此可以构建序列密码算法的Sbox1运算与分组密码算法的轮函数指令之间的关联关系,从而调用分组密码算法的轮函数指令,加速序列密码算法的Sbox1运算,提升序列密码算法的Sbox1运算的效率。进而,在利用序列密码算法对数据进行安全处理时,能够提升序列密码算法的Sbox运算整体的效率,使得序列密码算法的密钥字的生成效率得以提升,达到提升数据安全处理效率的目的。
需要说明的是,序列密码算法的Sbox运算包含Sbox0运算和Sbox1运算,(例如,祖冲之密码算法的ZUCSbox运算包含ZUCSbox0运算和ZUCSbox1运算),本申请实施例是通过序列密码算法的Sbox1运算,与分组密码算法的轮函数指令之间的关联,来调用分组密码算法的轮函数指令,加速序列密码算法的Sbox1运算,从而使得序列密码算法整体的Sbox运算(Sbox0运算和Sbox1运算)的效率得以提升。
基于上述思路,图2示例性的示出了本申请实施例提供的数据安全处理方法的可选流程图,该方法可以是由对数据进行加解密处理的计算机设备(终端设备或者服务器设备)执行,例如计算机设备可以运行祖冲之密码算法等序列密码算法,并且在利用祖冲之密码算法等序列密码算法对数据进行加解密处理时,执行本申请实施例提供的数据安全处理方法。也就是说,本申请实施例提供的数据安全处理方法可以应用于序列密码算法,并且序列密码算法用于对数据进行安全处理。参照图2,该方法流程可以包括如下步骤。
在步骤S210中,确定序列密码算法的第一Sbox的输入。
序列密码算法的Sbox1(例如祖冲之密码算法的ZUCSbox1)可以称为第一Sbox;同理,序列密码算法的Sbox0(例如祖冲之密码算法的ZUCSbox0)可以称为第零Sbox。
在利用序列密码算法对数据进行安全处理时(例如利用祖冲之密码算法对数据进行加解密处理时),需要调用序列密码算法生成密钥流,序列密码算法生成密钥流的过程涉及多次迭代的生成密钥字,每一次迭代的生成密钥字需要使用到非线性函数的输出;执行非线性函数需要使用到序列密码算法的Sbox运算(Sbox运算包含Sbox1运算和Sbox0运算);因此,本申请实施例可以在序列密码算法每一次迭代的生成密钥字时,确定序列密码算法的Sbox1(即第一Sbox)的输入。
为便于理解,以序列密码算法为祖冲之密码算法为例,图3示例性的示出了祖冲之密码算法的算法示例图,如图3所示,祖冲之密码算法可以为三层算法结构,分别为上层的LFSR(Linear Feedback Shift Register,线性反馈移位寄存器)、中间层的比特重组(BR)、以及下层的非线性函数F。
需要说明的是,SR(Shift Register,移位寄存器)由多个寄存器单元变量排列组成(寄存器单元变量可以是寄存器的形式),并且在每个时钟脉冲,SR向右移动一位(一位对应一个寄存器单元变量的值),从而SR的左侧存在空余的一位;此时,将SR中部分寄存器单元变量的值作为反馈函数的输入,并且将反馈函数的输出填充到SR的左侧,则可使得SR得到补充,从而SR可以不断的提供输出。基于此,拥有反馈函数的SR可以称为FSR(FeedbackShift Register,反馈移位寄存器),而反馈函数为线性的FSR则为LFSR。
基于上述说明,结合图3所示,LFSR可以包括多个寄存器单元变量,例如,16个31比特寄存器单元变量S0至S15,每个寄存器单元变量在集合{1,2,3,...,231-1}中取值,从而LFSR可以定义在有限域GF(231-1)上。进一步的,结合图3所示,LFSR的反馈函数可以表示为:
(215S15+t+217S13+t+221S10+t+220S4+t+(28+1)S0+t)mod(231-1);
其中,mod表示整数取余运算;S15+t表示寄存器单元变量S15在时刻t的取值,S13+t表示寄存器单元变量S13在时刻t的取值,S10+t表示寄存器单元变量S10在时刻t的取值,S4+t表示寄存器单元变量S4在时刻t的取值,S0+t表示寄存器单元变量S0在时刻t的取值。也就是说,寄存器单元变量S15、S13、S10、S4、S0作为反馈函数的输入,在LFSR右移的情况下,反馈函数的运算结果可以在时刻t的下一个时刻补充到LFSR的左侧。通过反馈函数的运算结果补充LFSR的过程可以视为是LFSR的状态更新。
比特重组(BR)用于从LFSR的寄存器单元变量中抽取4个32比特字X0、X1、X2和X3,其中,一个32比特字可以是从LFSR的两个寄存器单元变量中各抽取16比特字形成。例如,结合图3所示,比特字X0可以是从寄存器单元变量S15和S14中各抽取16比特字形成,比特字X1可以是从寄存器单元变量S11和S9中各抽取16比特字形成,比特字X2可以是从寄存器单元变量S7和S5中各抽取16比特字形成,比特字X3可以是从寄存器单元变量S2和S0中各抽取16比特字形成。4个32比特字X0、X1、X2和X3中,前三个比特字X0、X1、X2用于下层的非线性函数F,第四个比特字X3参与密钥字生成。比特重组(BR)的比特字X0可以称为第零比特字,比特字X1可以称为第一比特字,比特字X2可以称为第二比特字,比特字X3可以称为第三比特字。
非线性函数F可以包括两个记忆单元变量(记忆单元变量可以是存储单元的形式),分为第一记忆单元变量R1和第二记忆单元变量R2,第一记忆单元变量R1和第二记忆单元变量R2可以均是32比特。非线性函数F的输入来自于比特重组(BR)的前三个32比特字X0、X1和X2,输出为一个32比特字W;也就是说,非线性函数可以视为是将96比特压缩为32比特的非线性压缩函数。非线性函数输出的32比特字W,与比特重组(BR)的比特字X3相结合(例如异或),从而得到密钥字z。
上述说明了一次迭代生成密钥字的过程;在下一次迭代时,基于LFSR的状态更新,比特重组可以为非线性函数提供新的输入(新的比特字X0、X1和X2),从而使得非线性函数提供新的输出W,进而非线性函数提供的新的输出W与比特重组提供的新的比特字X3相结合,则可得到下一次迭代生成的密钥字。基于此,祖冲之密码算法等序列密码算法可以通过多次迭代,生成多个密钥字,形成祖冲之密码算法的密钥流。
需要说明的是,图3中表示按比特位进行逐位异或运算,/>表示模232加法运算。
结合图3所示的祖冲之密码算法的算法示例,祖冲之密码算法的运行过程可以分为两个阶段:初始化阶段和工作阶段。
在初始化阶段,128比特的初始密钥SK和128比特的初始向量IV扩展为16个31比特的数(例如整数),该16个31比特长的数,依次作为LFSR的16个寄存器单元变量S0至S15的初始值,并装载到LFSR的16个寄存器单元变量中;同时,设置非线性函数中的两个记忆单元变量R1和R2均为0。
需要说明的是,初始密钥SK可以为SK=SK0‖SK1‖...SK15,初始向量IV可以为IV=IV0‖IV1‖...IV15。对于LFSR中的第i个寄存器单元变量Si,Si的初始值为SKi‖di‖IVi,其中,SKi为初始密钥SK中的第i个信息,IVi为初始向量IV中的第i个信息,di为15比特的常数,‖表示字符串连接符,此情况下的i取值为0≤i≤15。SKi和IVi可以均为8比特,也就是说,8比特的SKi、15比特常数的di以及8比特的IVi依次通过字符串连接符‖相连接,可以得到Si的31比特初始值。
初始化阶段之后,执行工作阶段,从而通过工作阶段生成密钥流。在工作阶段,先依次执行一次比特重组(BR)、非线性函数和LFSR状态更新,完成祖冲之密码算法的第一次处理;对于第一次处理,祖冲之密码算法不输出密钥字,例如,在第一次处理中,非线性函数的输出W进行丢弃。
在完成祖冲之密码算法的第一次处理后,可以进入密钥字生成过程;祖冲之密码算法可以通过多次迭代生成多个密钥字,并且一次迭代生成一个密钥字(例如一次迭代,生成一个32比特的密钥字Z)。其中,祖冲之密码算法的一次迭代可以包括依次执行的比特重组(BR)、密钥字生成和LFSR状态更新。密钥字生成包括执行非线性函数,以及将非线性函数与比特重组的比特字X3进行异或处理;例如,密钥字生成可以表达为,其中,F(X0,X1,X2)表示基于比特重组的前三个比特字X0、X1和X2执行非线性函数,F(X0,X1,X2)的结果为非线性函数的输出W。
祖冲之密码算法生成密钥字的迭代次数可以根据需要加密的明文数据的比特长度而定,例如,明文数据的比特长度除以32比特,则可以得到祖冲之密码算法生成密钥字的迭代次数。也就是说,祖冲之密码算法迭代一次,则输出一个32比特的密钥字,从而基于明文数据的比特长度除以32比特,则可确定祖冲之密码算法生成密钥字的迭代次数,得到加密明文数据所需数量的密钥字。
进一步结合图3所示,祖冲之密码算法的非线性函数在执行时,涉及到Sbox运算,Sbox运算通过4个并置的Sbox实现,4个并置的Sbox整体在图3中标记为S。例如,在祖冲之密码算法中,S=(ZUCSbox0,ZUCSbox1,ZUCSbox2,ZUCSbox3),其中,ZUCSbox0=ZUCSbox2,ZUCSbox1=ZUCSbox3,因此S也可以表达为S=(ZUCSbox0,ZUCSbox1,ZUCSbox0,ZUCSbox1)。
在非线性函数中,Sbox运算和32比特线性变换可以相结合,用于为记忆单元变量进行赋值。结合图3所示,第一记忆单元变量R1与比特重组(BR)提供的比特字X1进行模232加法运算,模232加法运算结果进行32比特循环左移16位运算(即<<<16,其中,<<<表示32比特循环左移位运算);同时,第二记忆单元变量R2与比特重组(BR)提供的比特字X2进行异或运算,异或运算结果进行32比特循环左移16位运算;模232加法运算结果进行32比特循环左移16位运算的结果,以及异或运算结果进行32比特循环左移16位运算的结果,再通过Sbox运算和32比特的第一线性变换L1进行处理(如图3所示S·L1),得到的结果重新赋值给第一记忆单元变量R1;进而,第一记忆单元变量R1的赋值与比特重组(BR)提供的比特字X0进行异或运算,然后异或运算结果与第二记忆单元变量R2的赋值进行模232加法运算,得到非线性函数的输出W,W可以表示为
结合图3所示,与第一记忆单元变量R1的赋值同理,第一记忆单元变量R1与比特重组(BR)提供的比特字X1进行模232加法运算,模232加法运算结果进行32比特循环左移16位运算;同时,第二记忆单元变量R2与比特重组(BR)提供的比特字X2进行异或运算,异或运算结果进行32比特循环左移16位运算;模232加法运算结果进行32比特循环左移16位运算的结果,以及异或运算结果进行32比特循环左移16位运算的结果,再通过Sbox运算S和32比特的第二线性变换L2进行处理(如图3所示S·L2),得到的结果重新赋值给第二记忆单元变量R2。
需要说明的是,图3中第一线性变换L1和第二线性变换L2均属于32比特线性变换,只是循环左移位的位数存在差异。
例如,第一线性变换L1可以表示为:
第二线性变换L2可以表示为:
可以看出,在非线性函数的执行过程中,记忆单元变量的赋值是通过Sbox运算实现,以第一记忆单元变量R1的赋值为例,R1=(ZUCSbox0(u>>24),ZUCSbox1(u>>16),ZUCSbox0(u>>8),ZUCSbox1(u&0xFF));其中,u为祖冲之密码算法的Sbox的输入,ZUCSbox1(u>>16)为4个并置的Sbox中的其中一个Sbox1的输出,ZUCSbox1(u&0xFF)为另一个Sbox1的输出。可选的,祖冲之密码算法的Sbox的输入u可以表示为u=L1((W1<<16)‖(W2>>16)),>>表示32比特右移位运算,<<表示32比特左移位运算,&表示按位与运算符。
基于上述祖冲之密码算法的算法介绍,本申请实施例可以在祖冲之密码算法等序列密码算法每次迭代的生成密钥字时,确定Sbox1(即第一Sbox)的输入u。
在步骤S211中,确定与第一Sbox的输入相关联的分组密码算法的Sbox的输入。
区别于以查找表方式进行序列密码算法的Sbox1运算,本申请实施例在确定序列密码算法的Sbox1的输入u之后,通过序列密码算法的Sbox1运算与分组密码算法的轮函数指令之间的关联,确定与序列密码算法的Sbox1的输入u相关联的分组密码算法的Sbox的输入,从而便于后续调用分组密码算法的轮函数指令(轮函数指令包含分组密码算法的Sbox运算),加速序列密码算法的Sbox1运算。
需要说明的是,分组密码算法是将输入数据划分成固定长度的组,以进行加解密的一类密码算法;分组密码算法可以例如SM4算法等。以SM4算法为例,SM4算法的分组大小为128bit(比特),并且SM4算法涉及加密算法、解密算法和密钥扩展算法。其中,加密算法涉及多轮加密运算,解密算法涉及多轮解密运算,密钥扩展算法用于生成每轮加密运算和每轮解密运算使用的轮密钥。在SM4算法中,加密算法与密钥扩展算法均可采用32轮非线性迭代结构,且加密算法和解密算法采用相同的轮密钥结构和算法结构(均为32轮运算),只是加密算法和解密算法使用的轮密钥的顺序相互颠倒。也就是说,加密算法与解密算法的结构相同,但是加密算法与解密算法的轮密钥的使用顺序相反(即解密算法的轮密钥是加密算法的轮密钥的逆序)。
为便于理解,以SM4算法的加密算法为例,图4示例性的示出了SM4算法的算法示例图。如图4所示,SM4算法的输入为明文X,在经过32轮迭代的加密运算以及1次反序变换后,输出密文Y;基于SM4算法的分组大小为128比特,明文X和密文Y可以均是128比特。
结合图4所示,在32轮迭代的加密运算中,一轮的加密运算可以使用轮函数实现,在第i+1轮的加密运算中,轮函数的输入可以为(Xi,Xi+1,Xi+2,Xi+3),输出可以为(Xi+1,Xi+2,Xi+3,Xi+4),并且第i+1轮的加密运算使用的轮密钥为rki;其中,i属于0至31的整数,i+1属于1至32的整数;每轮的加密运算使用的轮密钥可以通过密钥扩展算法生成。
在第1轮加密运算中,轮函数的输入为明文(X0,X1,X2,X3),并且轮函数使用轮密钥rk0进行加密运算后,输出(X1,X2,X3,X4);在第2轮加密运算中,轮函数的输入为(X1,X2,X3,X4),并且轮函数使用轮密钥rk1进行加密运算后,输出(X2,X3,X4,X5);以此类推,直至在第32轮的加密运算中,轮函数的输入为(X31,X32,X33,X34),并且轮函数使用轮密钥rk31进行加密运算后,输出(X32,X33,X34,X35)。需要说明的是,在图4示例中,X0,X1,X2和X3表示SM4算法的输入明文;而在图3示例中,X0、X1、X2和X3表示祖冲之密码算法的比特重组(BR)提供的4个32比特字。
第32轮加密运算的输出(X32,X33,X34,X35)经过反序变换R,可得到输出的密文Y,Y可以表示为(Y0,Y1,Y2,Y3)。在一个实现示例中,反序变换可以表示为:(Y0,Y1,Y2,Y3)=R(X32,X33,X34,X35)=(X35,X34,X33,X32)。
可以看出,一轮的加密运算可以用于计算下一个的新状态字,例如,在第i+1轮的加密运算中,轮函数可在输入(Xi,Xi+1,Xi+2,Xi+3)的情况下,计算下一个的新状态字Xi+4,从而输出(Xi+1,Xi+2,Xi+3,Xi+4)。可选的,下一个的新状态字Xi+4的计算过程可以例如:
Xi+4=SM4RD(Xi,Xi+1,Xi+2,Xi+3,rki);其中,SM4RD表示实现轮函数的轮函数指令。
也就是说,在第i+1轮的加密运算中,轮函数的输入可以为(Xi,Xi+1,Xi+2,Xi+3),结合轮密钥rki,可以计算出新的下一个状态Xi+4。
进一步的,SM4RD(Xi,Xi+1,Xi+2,Xi+3,rki)可以表示为:
即
其中,T是一种复合运算,复合运算T可由非线性变换τ和线性变换L复合而成,例如,T可以表示为:T(.)=L(τ(.))。
结合图4所示,对于线性变换L而言,在一个实现示例中,线性变换L可以表示为:
SM4算法的线性变换L的表达含义,与祖冲之密码算法的32比特线性变换L1的表达含义相同。
对于非线性变换τ而言,非线性变换τ可以包括多个并列的Sbox(置换盒)运算。结合图4所示,非线性变换τ可以包括4个并列的Sbox运算;为便于SM4算法的Sbox,本申请实施例在SM4算法的Sbox之前添加前缀SM4,也就是说,SM4算法的Sbox设为SM4Sbox。在一个实现示例中,假设非线性变换τ的输入为E,且E=(e0,e1,e2,e3),则τ(E)可以表示为:
τ(E)=(SM4Sbox(e0),SM4Sbox(e1),SM4Sbox(e2),SM4Sbox(e3))。
从而,在SM4算法等分组密码算法中,通过轮函数指令实现轮函数,以计算下一个状态字的过程可以表示为:
SM4RD(xi,xi+1,xi+2,xi+3,rki)=L(SM4Sbox(e>>24),SM4Sbox(e>>16),SM4Sbox(e>>8),SM4Sbox(e&0xFF))。
基于上述SM4算法的介绍内容,可以看出,SM4算法等分组密码算法涉及轮函数指令,轮函数指令包含置换盒运算,并且置换盒运算通过4个并置的置换盒实现。
由于SM4算法等分组密码算法的轮函数指令(SM4RD)包含了置换盒运算,本申请实施例考虑通过构建分组密码算法的轮函数指令与序列密码算法的Sbox1运算的关联,从而利用分组密码算法的轮函数指令实现序列密码算法的Sbox1运算。
本申请的发明人发现祖冲之密码算法等序列密码算法的Sbox1运算,与SM4算法等分组密码算法的轮函数运算之间存在关联,下面对此关联进行说明。
在祖冲之密码算法等序列密码算法中,Sbox1运算的公式可以定义为如下公式1:
ZUCSbox1(u)=M·u-1+B,公式1;
其中,u为祖冲之密码算法等序列密码算法的Sbox1的输入,M为Sbox1运算对应的矩阵,矩阵M的定义可以结合图5A示例所示,B为Sbox1运算对应的向量,向量B可以定义为B=(01000100)。
在SM4算法等分组密码算法中,Sbox运算的公式可以定义为如下公式2:
SM4Sbox(e)=(e·A+C)-1·A+C,公式2;
其中,e为SM4算法等分组密码算法的Sbox的输入,A为分组密码算法的Sbox运算对应的矩阵,矩阵A的定义可以结合图5B示例所示,C为分组密码算法的Sbox运算对应的向量,向量C可以定义为C=(11001011)。
基于祖冲之密码算法等序列密码算法的Sbox1运算的公式,以及SM4算法等分组密码算法的Sbox运算的公式,本申请实施例可以令SM4算法等分组密码算法的输入e为e=(u-C)·A-1,则本申请实施例可以将公式2扩展为如下公式3:
SM4Sbox(e)=(e·A+C)-1·A+C=u-1·A+C,公式3。
在公式3基础上,本申请实施例可以构造函数f(x),f(x)=M·(x-C)·A-1+B,则以SM4算法的Sbox的输出作为函数f(x)的输入,可以得到以下公式4:
f(SM4Sbox(e))=M·(SM4Sbox(e)-C)·A-1+B=M·u-1+B=ZUCSbox1(u)
,公式4。
基于前面描述SM4算法的轮函数指令的表示形式SM4RD(xi,xi+1,xi+2,xi+3,rki)=L(SM4Sbox(e>>24),SM4Sbox(e>>16),SM4Sbox(e>
>8),SM4Sbox(e&0xFF)),本申请实施例可将公式4与SM4算法的轮函数指令的表示形式相结合,得到如下公式5:
(0,ZUCSbox 1(u>>16),0,ZUCSbox 1(u&0xFF))=
(0,M,0,M)·(L-1(SM4RD(0,0,0,0,e))-(0,C,0,C))·(0,A-1,0,A-1)+(0,B,0,B),公式5;其中,e=(u-C)·A-1。
基于公式5可以看出:
(0,M,0,M)·(L-1(SM4RD(0,0,0,0,e))-(0,C,0,C))·(0,A-1,0,A-1)+(0,B,0,B)的运算结果中,第二位的分量和第四位的分量为,序列密码算法的两个Sbox1运算ZUCSbox1(u>>16)和ZUCSbox1(u&0xFF)的输出。
基于此,本申请实施例可以在确定序列密码算法的Sbox1的输入u之后,确定与Sbox1的输入u相关联的分组密码算法的Sbox的输入e,从而利用公式5确定序列密码算法的Sbox1运算的输出。
在可选实现中,本申请实施例在确定序列密码算法的Sbox1的输入u之后,可以根据序列密码算法的Sbox1的输入u、SM4算法等分组密码算法的Sbox运算对应的向量C和矩阵A,确定相关联的分组密码算法的Sbox的输入e。例如,e=(u-C)·A-1。
在步骤S212中,根据分组密码算法的Sbox的输入,确定分组密码算法的轮函数指令的输入。
在步骤S213中,调用分组密码算法的轮函数指令,根据轮函数指令的输入进行轮函数指令的运算,得到轮函数指令的运算结果。
在可选实现中,本申请实施例在确定分组密码算法的Sbox的输入e之后(例如,e=(u-C)·A-1),可以将分组密码算法的Sbox的输入e作为轮函数指令的最后一位输入,并将轮函数指令的其他位输入设置为零,从而得到分组密码算法的轮函数指令的输入,例如,轮函数指令的输入为(0,0,0,0,e)。从而,本申请实施例可以调用分组密码算法的轮函数指令SM4RD,确定轮函数指令SM4RD在轮函数指令的输入对应的运算结果,得到轮函数指令的运算结果。例如,本申请实施例在确定轮函数指令SM4RD的输入为(0,0,0,0,e)之后,可以调用轮函数指令SM4RD,计算SM4RD(0,0,0,0,e)对应的运算结果,得到轮函数指令的运算结果。
需要说明的是,基于前面描述SM4算法的轮函数指令的表示形式SM4RD(xi,xi+1,xi+2,xi+3,rki)=L(SM4Sbox(e>>24),SM4Sbox(e>>16),SM4Sbox(e>>8),SM4Sbox(e&0xFF)),本申请实施例在确定轮函数指令SM4RD的输入为(0,0,0,0,e)的情况下,可以相应计算出SM4RD(0,0,0,0,e)对应的运算结果。
在步骤S214中,根据轮函数指令的运算结果,确定包含序列密码算法的第一Sbox的输出的结果。
在步骤S215中,从包含序列密码算法的第一Sbox的输出的结果中,选取序列密码算法的第一Sbox的输出。
在得到分组密码算法的轮函数指令SM4RD的运算结果之后,本申请实施例可以基于轮函数指令的运算结果,得到序列密码算法的Sbox1的输出,以实现利用分组密码算法的轮函数指令SM4RD,实现序列密码算法的Sbox1运算。
作为可选实现,本申请实施例可以根据轮函数指令的运算结果SM4RD(0,0,0,0,e),进行线性操作处理,线性操作处理的结果可以视为是包含序列密码算法的Sbox1的输出的结果;进而,本申请实施例可以从线性操作处理的结果中选取序列密码算法的Sbox1的输出,以实现利用分组密码算法的轮函数指令SM4RD,实现序列密码算法的Sbox1运算。
在进一步的可选实现中,本申请实施例可以根据序列密码算法的Sbox1运算对应的矩阵M和向量B、分组密码算法的Sbox运算对应的矩阵A和向量C、以及轮函数指令的运算结果SM4RD(0,0,0,0,e)对应的线性变换L的逆变换,进行线性操作处理,从而得到线性操作处理的结果;进而,从线性操作处理的结果中选取序列密码算法的Sbox1的输出。
可选的,本申请实施例可以从线性操作处理的结果中,选取第二位的分量和第四位的分量,作为序列密码算法的两个Sbox1的输出。
在一个示例中,在得到轮函数指令的运算结果SM4RD(0,0,0,0,e)之后,本申请实施例可以基于前文描述的公式5进行以下线性操作处理:
(0,M,0,M)·(L-1(SM4RD(0,0,0,0,e))-(0,C,0,C))·(0,A-1,0,A-1)+(0,B,0,B),从而得到线性操作处理的结果。
可选的,基于前文公式5,本申请实施例可以从线性操作处理的结果中舍弃第一位的分量和第三位的分量,选取第二位的分量和第四位的分量,作为序列密码算法的两个Sbox1的输出。例如,在线性操作处理的结果中,8比特作为一位分量,则本申请实施例可将线性操作处理的结果中第0至7比特(对应第一位的分量),以及第16至23比特(对应第三位的分量)进行舍弃,从而选取第8至15的比特(对应第二位的分量),以及第24至31的比特(对应第四位的分量)作为序列密码算法的ZUCSbox1(u>>16)和ZUCSbox1(u&0xFF)的输出。比如,线性操作处理的结果中,第8至15的比特作为ZUCSbox1(u
>>16)的输出,第24至31的比特作为ZUCSbox1(u&0xFF)的输出。
需要说明的是,Sbox运算作为SM4算法等分组密码算法中较为耗时的部分,处理器厂商会设计专门的硬件指令形式的轮函数指令SM4RD来进行运算加速,因此在SM4算法等分组密码算法的轮函数指令SM4RD存在加速设计的情况下,通过调用轮函数指令SM4RD来实现祖冲之密码算法等序列密码算法的Sbox1运算,可以实现序列密码算法的Sbox1运算的加速处理。本申请实施例对于轮函数指令SM4RD的加速设计形式并不设限,保障轮函数指令SM4RD的加速设计所带来的运算速度,高于序列密码算法(例如祖冲之密码算法等)的Sbox查找表的查找运算效率即可。
在一种可选实现中,处理器可以通过专门的硬件设计,来实现轮函数指令SM4RD的加速设计。
在另一种可选实现中,可以通过将轮函数指令SM4RD的Sbox的输入映射到有限复合域,以实现轮函数运算的加速。例如,将轮函数指令SM4RD的Sbox的输入映射到GF(28)、或者GF(((22)2)2)、或者GF((24)2)等有限复合域。从而,本申请实施例可设置有限复合域对应的目标集合,且目标集合同构于GF(28)、或者GF(((22)2)2)、或者GF((24)2)等有限复合域;从而,针对轮函数指令SM4RD的Sbox的输入,本申请实施例可使用目标集合中的元素来表示Sbox的输入,以在有限复合域下进行轮函数指令SM4RD的Sbox运算,避免通过查找表的方式,查找轮函数指令SM4RD的Sbox运算结果;进而基于Sbox运算结果,得到轮函数指令SM4RD的运算结果。
在步骤S216中,根据序列密码算法的第一Sbox的输出,确定序列密码算法的密钥字。
在序列密码算法每一次迭代的生成密钥字时,可以基于本申请实施例提供的方案,得到序列密码算法的Sbox1的输出;从而本申请实施例可以进一步确定序列密码算法的Sbox0的输出,结合序列密码算法的Sbox1的输出和Sbox0的输出,确定序列密码算法的记忆单元变量的赋值;进而,根据记忆单元变量的赋值,确定序列密码算法的密钥字,以得到序列密码算法每一次迭代生成的密钥字。基于记忆单元变量的赋值,确定序列密码算法的密钥字的过程可以参照前文相应部分的描述,此处不再赘述。
在可选实现中,序列密码算法的Sbox0的输出可以通过查找Sbox0查找表实现,例如,在确定ZUCSbox0的输入后,从ZUCSbox0的输入中确定查找行和查找列,在ZUCSbox0对应的ZUCSbox0查找表中,确定查找行和查找列对应的值,得到ZUCSbox0的输出。
需要说明的是,本申请实施例利用序列密码算法的Sbox1运算,与分组密码算法的轮函数指令之间的关联,调用分组密码算法的轮函数指令,来加速序列密码算法的Sbox1运算,可以使得序列密码算法的Sbox1运算的效率得以提升;从而由于序列密码算法的Sbox1运算的效率提升,本申请实施例可以提升序列密码算法的Sbox运算整体的效率。
在步骤S217中,根据序列密码算法的密钥字,对数据进行安全处理。
在得到序列密码算法的密钥字后,序列密码算法多次迭代生成的多个密钥字可以形成密钥流;进而,本申请实施例可以利用序列密码算法的密钥流中的密钥字,对数据进行安全处理。
例如,在对明文数据进行加密处理时,可以利用密钥流加密明文数据(比如,使用密钥流中的各个密钥字,依次对明文数据中的比特字进行加密),从而得到加密保护后的密文数据。利用密钥流加密明文数据可以是利用密钥流异或明文数据,比如使用密钥流中的各个密钥字,依次对明文数据中的比特字进行异或。
又例如,在对密文数据进行解密处理时,可以利用密钥流解密密文数据,例如,使用密钥流中的各个密钥字,依次对密文数据中的比特字进行异或,从而得到解密后的明文数据。
本申请实施例提供的数据安全处理方法可以应用于序列密码算法,序列密码算法用于对数据进行安全处理;从而,在利用序列密码算法对数据进行安全处理时,本申请实施例可以在序列密码算法每一次迭代的生成密钥字时,确定序列密码算法的第一Sbox的输入;根据序列密码算法的第一Sbox运算,与分组密码算法的轮函数指令之间的关联,调用分组密码算法的轮函数指令,确定所述第一Sbox的输入对应的输出,从而得到序列密码算法的第一Sbox的输出,其中,分组密码算法的轮函数指令包含Sbox运算,且轮函数指令存在加速设计;进而,本申请实施例可以根据序列密码算法的第一Sbox的输出,确定序列密码算法的密钥字;根据序列密码算法的密钥字,对数据进行安全处理。
可以看出,区别于利用查找表等方式进行序列密码算法的第一Sbox的运算,本申请实施例可以通过序列密码算法的第一Sbox运算,与分组密码算法的轮函数指令之间的关联,调用分组密码算法的轮函数指令,来实现序列密码算法的第一Sbox的运算,由于分组密码算法的轮函数指令包含Sbox运算,且存在加速设计,因此本申请实施例可以利用具有加速设计的轮函数指令,来实现序列密码算法的第一Sbox运算,从而加速序列密码算法的第一Sbox运算,使得序列密码算法的第一Sbox运算的效率得以提升;进而序列密码算法的密钥字的生成效率得以提升,实现在利用序列密码算法的密钥字,对数据进行安全处理时,可以提升利用序列密码算法对数据进行安全处理的效率。
本申请实施例还提供一种数据安全处理装置,该数据安全处理装置可以视为是对数据进行加解密处理的计算机设备(终端设备或者服务器设备),为实现本申请实施例提供的数据安全处理方法所需设置的功能模块。例如,装载序列密码算法的计算机设备,可以基于本申请实施例提供的数据安全处理装置,利用序列密码算法对数据进行安全处理。下文描述内容可与前文描述内容相互对应参照。
作为可选实现,图6示例性的示出了本申请实施例提供的数据安全处理装置的可选框图,该装置可应用于序列密码算法,所述序列密码算法用于对数据进行安全处理。参照图6,该装置可以包括:
输入确定模块610,用于确定序列密码算法的第一Sbox的输入;
输出确定模块620,用于根据序列密码算法的第一Sbox运算,与分组密码算法的轮函数指令之间的关联,调用分组密码算法的轮函数指令,确定所述第一Sbox的输入对应的输出,以得到序列密码算法的第一Sbox的输出;其中,分组密码算法的轮函数指令包含Sbox运算,且轮函数指令存在加速设计;
密钥字确定模块630,用于根据序列密码算法的第一Sbox的输出,确定序列密码算法的密钥字;
安全处理模块640,用于根据序列密码算法的密钥字,对数据进行安全处理。
作为可选实现,输出确定模块620,用于根据序列密码算法的第一Sbox运算,与分组密码算法的轮函数指令之间的关联,调用分组密码算法的轮函数指令,确定所述第一Sbox的输入对应的输出,以得到序列密码算法的第一Sbox的输出包括:
确定与第一Sbox的输入相关联的分组密码算法的Sbox的输入,以及,根据分组密码算法的Sbox的输入,确定分组密码算法的轮函数指令的输入;
调用分组密码算法的轮函数指令,根据轮函数指令的输入进行轮函数指令的运算,得到轮函数指令的运算结果;
根据轮函数指令的运算结果,确定包含序列密码算法的第一Sbox的输出的结果;
从包含序列密码算法的第一Sbox的输出的结果中,选取序列密码算法的第一Sbox的输出。
作为可选实现,输出确定模块620,用于确定与第一Sbox的输入相关联的分组密码算法的Sbox的输入包括:
根据序列密码算法的第一Sbox的输入、分组密码算法的Sbox运算对应的向量和矩阵,确定分组密码算法的Sbox的输入。
作为可选实现,输出确定模块620,用于根据序列密码算法的第一Sbox的输入、分组密码算法的Sbox运算对应的向量和矩阵,确定分组密码算法的Sbox的输入包括:
根据如下公式确定分组密码算法的Sbox的输入:
e=(u-C)·A-1;
其中,e为分组密码算法的Sbox的输入,u为序列密码算法的第一Sbox的输入,C为分组密码算法的Sbox运算对应的向量,A为分组密码算法的Sbox运算对应的矩阵。
作为可选实现,输出确定模块620,用于根据分组密码算法的Sbox的输入,确定分组密码算法的轮函数指令的输入包括:
将分组密码算法的Sbox的输入作为轮函数指令的最后一位输入,并将轮函数指令的其他位输入设置为零,以得到分组密码算法的轮函数指令的输入。
作为可选实现,输出确定模块620,用于根据轮函数指令的运算结果,确定包含序列密码算法的第一Sbox的输出的结果包括:
根据轮函数指令的运算结果,进行线性操作处理,线性操作处理的结果为包含序列密码算法的第一Sbox的输出的结果。
作为可选实现,输出确定模块620,用于从包含序列密码算法的第一Sbox的输出的结果中,选取序列密码算法的第一Sbox的输出包括:
从线性操作处理的结果中,选取序列密码算法的第一Sbox的输出。
作为可选实现,输出确定模块620,用于根据轮函数指令的运算结果,进行线性操作处理包括:
根据序列密码算法的第一Sbox运算对应的矩阵和向量、分组密码算法的Sbox运算对应的矩阵和向量、以及轮函数指令的运算结果对应的线性变换的逆变换,进行线性操作处理,得到线性操作处理的结果。
作为可选实现,输出确定模块620,用于根据序列密码算法的第一Sbox运算对应的矩阵和向量、分组密码算法的Sbox运算对应的矩阵和向量、以及轮函数指令的运算结果对应的线性变换的逆变换,进行线性操作处理,得到线性操作处理的结果包括:
根据如下公式,得到线性操作处理的结果:
(0,M,0,M)·(L-1(SM4RD(0,0,0,0,e))-(0,C,0,C))·(0,A-1,0,A-1)+(0,B,0,B);其中,M为序列密码算法的第一Sbox运算对应的矩阵,L为线性变换,SM4RD(0,0,0,0,e)为轮函数指令SM4RD的运算结果,e为分组密码算法的Sbox的输入,C为分组密码算法的Sbox运算对应的向量,A为分组密码算法的Sbox运算对应的矩阵,B为序列密码算法的第一Sbox运算对应的向量。
作为可选实现,所述线性操作处理的结果表示为:
(0,ZUCSbox1(u>>16),0,ZUCSbox1(u&0xFF))=(0,M,0,M)·(L-1(SM4RD(0,0,0,0,e))-(0,C,0,C))·(0,A-1,0,A-1)+(0,B,0,B);
其中,ZUCSbox1为序列密码算法的第一Sbox,u为第一Sbox的输入;线性操作处理的结果中第二位的分量和第四位的分量为,序列密码算法的ZUCSbox1(u>>16)和ZUCSbox1(u&0xFF)的输出。
作为可选实现,输出确定模块620,用于从线性操作处理的结果中,选取序列密码算法的第一Sbox的输出包括:
从线性操作处理的结果中,选取第8至15的比特作为ZUCSbox1(u>>16)的输出,第24至31的比特作为ZUCSbox1(u&0xFF)的输出。
作为可选实现,输入确定模块610,用于确定序列密码算法的第一Sbox的输入包括:
在序列密码算法每一次迭代的生成密钥字时,确定序列密码算法的第一Sbox的输入。
作为可选实现,密钥字确定模块630,用于根据序列密码算法的第一Sbox的输出,确定序列密码算法的密钥字包括:
在序列密码算法每一次迭代的生成密钥字时,结合序列密码算法的第一Sbox的输出和第零Sbox的输出,确定序列密码算法的记忆单元变量的赋值,根据记忆单元变量的赋值,确定序列密码算法生成的密钥字,以得到序列密码算法每一次迭代的生成密钥字。
作为可选实现,序列密码算法生成的多个密钥字形成密钥流;安全处理模块640,用于根据序列密码算法的密钥字,对数据进行安全处理包括:
使用密钥流中的各个密钥字,依次对明文数据中的比特字进行异或,得到密文数据;
或者,使用密钥流中的各个密钥字,依次对密文数据中的比特字进行异或,得到明文数据。
本申请实施例还提供一种计算机设备(终端设备或者服务器设备),该计算机设备可以执行本申请实施例提供的数据安全处理方法。作为可选实现,图7示例性的示出了本申请实施例提供的计算机设备的可选框图,参照图7,该计算机设备可以包括:至少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4。
在本申请实施例中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信。
可选的,通信接口2可以为用于进行网络通信的通信模块的接口。
可选的,处理器1可能是CPU(中央处理器),GPU(Graphics Processing Unit,图形处理器),NPU(嵌入式神经网络处理器),FPGA(FieldProgrammable Gate Array,现场可编程逻辑门阵列),TPU(张量处理单元),AI芯片,特定集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路等。
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
其中,存储器3存储一条或多条计算机可执行指令,处理器1调用所述一条或多条计算机可执行指令,以执行本申请实施例提供的数据安全处理方法。
本申请实施例还提供一种存储介质,该存储介质存储一条或多条计算机可执行指令,该一条或多条计算机可执行指令被执行时,实现如本申请实施例提供的数据安全处理方法。
上文描述了本申请实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本申请实施例披露、公开的实施例方案。
虽然本申请实施例披露如上,但本申请并非限定于此。任何本领域技术人员,在不脱离本申请的精神和范围内,均可作各种更动与修改,因此本申请的保护范围应当以权利要求所限定的范围为准。