掌桥专利:专业的专利平台
掌桥专利
首页

一种祖冲之密码安全算法的实现方法

文献发布时间:2023-06-19 16:06:26



技术领域

本发明涉及信息安全技术领域,尤其涉及一种抗能量攻击的祖冲之密码安全算法的实现方法。

背景技术

ZUC密码算法与其它公开密码算法一样,其加密和解密过程是基本是一样的,其安全性除算法本身外,主要依赖于密钥的安全性,一旦密钥被破解(非法获取),则整个算法就失去了安全性,加密也就失去了意义。

破解密钥分为入侵式物理攻击和非入侵式物理攻击,能量攻击是一种较为常见的非入侵式物理攻击手段,包括简单能量攻击(SPA)、差分能量攻击(DPA)和时间攻击等等。由于不同运算过程中,不同数值运算的耗电/电磁辐射大小不同,给在非入侵式物理攻击提供了可能。其主要原理是根据算法本身的特点,利用选择性明文,根据算法中运算中的顺序、运算内容的耗电/电磁辐射的大小进行破解,同时利用统计学原理,大量重复计算过程中,获取统计意义上的能量差异,从而获得密钥的真值或部分值。

发明内容

基于此,本发明的目的在于提供一种祖冲之密码安全算法的实现方法,其使得在运算过程中能量消耗在时间上具有随机性,并在统计意义上使得能量耗散白噪声化,破坏简单能量攻击(SPA)、差分能量攻击(DPA)的基础,使得非入侵物理攻击的方法失效。为实现上述目的,本发明的技术方案如下:

一种祖冲之密码安全算法的实现方法,包括以下阶段:

S1.密钥装入阶段;

S2.初始化阶段;

S3.工作阶段;

S4.密钥输出阶段;

其中,

在密钥装入阶段秘密产生一个随机数,根据随机数值获取对应的密钥装入的预定顺序,并按照对应的预定顺序进行密钥装入;

在初始化阶段秘密产生一个或多个随机数,根据随机数值获取对应的计算比特重构BitReconstrction()的预设顺序、计算非线性函数W=F(X0,X1,X2)的预设顺序和/或计算寄存器初始化模式运算LFSRWithInitialisationMode()的预设顺序,并按照对应的预设顺序进行比特重构BitReconstrction()计算、非线性函数W=F(X0,X1,X2)的计算和/或寄存器初始化模式LFSRWithInitialisationMode()的计算;

和/或如下:

在工作阶段秘密产生一个或多个随机数,根据该随机数值获取对应的计算比特重构BitReconstrction()的预设顺序、计算非线性函数W=F(X0,X1,X2)的预设顺序及和/或计算寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并根据对应的预设顺序进行比特重构BitReconstrction()的计算、非线性函数W=F(X0,X1,X2)的计算和/或寄存器工作模式运算LFSRWithWorkMode()的计算。

在密钥输出阶段秘密产生一个或多个随机数,根据该随机值获取对应的计算比特重构BitReconstrction()的预设顺序、计算非线性函数W=F(X0,X1,X2)的预设顺序及计算寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并根据对应的预设顺序进行比特重构BitReconstrction()的计算、非线性函数W=F(X0,X1,X2)的计算和/或寄存器工作模式运算LFSRWithWorkMode()的计算,在完成非线性函数W=F(X0,X1,X2)运算后,计算Z=W⊕X3;

三个32比特字X0,X1,X2代表非线性函数F()的输入,一个32比特字W代表非线性函数F()的输出,Z为输出的32位密钥字,⊕表示按比特位逐位异或运算,X3为比特比特重组BitReconstrction()输出的最后一个比特字;在祖冲之算法中,“字”表示一个32比特数据字段。

在步骤S1密钥装入阶段秘密产生一个随机数,根据随机数值获取对应的密钥装入的预定顺序,并按照对应的预定顺序进行密钥装入,包括:

先产生一个随机数r0,按照预定的算法计算出随机数r0所对应的线性反馈寄存器LFSR内容s

s

按照随机数的值完成16个线性反馈寄存器内容s

在初始化阶段秘密产生一个或多个随机数,根据随机数值获取对应的计算比特重构BitReconstrction()的预设顺序、计算非线性函数W=F(X0,X1,X2)的预设顺序和/或计算寄存器初始化模式运算LFSRWithInitialisationMode()的预设顺序,并按照对应的预设顺序进行比特重构BitReconstrction()计算、非线性函数W=F(X0,X1,X2)的计算和/或寄存器初始化模式LFSRWithInitialisationMode()的计算;包括:

在步骤S2初始化阶段先秘密产生一个或多个随机数ri,按照预定的算法计算出随机数ri所对应的计算比特重构BitReconstrction()、非线性函数W=F(X0,X1,X2)和/或寄存器初始化模式运算LFSRWithInitialisationMode()的预设顺序,并按照对应的预设顺序进行比特重构BitReconstrction()计算、非线性函数W=F(X0,X1,X2)的计算和/或寄存器初始化模式LFSRWithInitialisationMode()的计算。

上述比特重构BitReconstrction()、非线性函数W=F(X0,X1,X2)及寄存器初始化模式运算LFSRWithInitialisationMode()的计算需要进行32轮,不同轮次可以是同一个随机数,也可以是不同的随机数。

在工作阶段秘密产生一个或多个随机数,根据随机数值获取对应的计算比特重构BitReconstrction()的预设顺序、计算非线性函数F(X0,X1,X2)的预设顺序及和/或计算寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并根据对应的预设顺序进行比特重构BitReconstrction()的计算、非线性函数F(X0,X1,X2)的计算和/或寄存器工作模式运算LFSRWithWorkMode()的计算;包括:

在步骤S3工作阶段秘密产生一个随机数r1或多个随机数r1、r2、r3,按照预定的算法计算出随机数r1所对应的计算比特重构BitReconstrction()、非线性函数W=F(X0,X1,X2)和/或寄寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并按照对应的预设顺序进行比特重构BitReconstrction()计算、非线性函数W=F(X0,X1,X2)的计算和/或寄存器工作模式运算LFSRWithWorkMode()的计算;

或者,按照预定的算法计算出随机数r1所对应的计算比特重构BitReconstrction()的预设顺序、随机数r2所对应的计算非线性函数W=F(X0,X1,X2)的预设顺序、随机数r3所对应的计算寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并按照对应的预设顺序进行比特重构BitReconstrction()计算、非线性函数W=F(X0,X1,X2)的计算和寄存器工作模式运算LFSRWithWorkMode()的计算。

在密钥输出阶段秘密产生一个或多个随机数,根据随机数值获取对应的计算比特重构BitReconstrction()的预设顺序、计算非线性函数W=F(X0,X1,X2)的预设顺序和/或计算寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并根据对应的预设顺序进行比特重构BitReconstrction()的计算、非线性函数W=F(X0,X1,X2)的计算和/或寄存器工作模式运算LFSRWithWorkMode()的计算;包括:

在步骤S4密钥输出阶段秘密产生一个或多个随机数rj,按照预定的算法计算出随机数rj所对应的计算比特重构BitReconstrction()、非线性函数W=F(X0,X1,X2)和/或寄寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并按照对应的预设顺序进行比特重构BitReconstrction()计算、非线性函数W=F(X0,X1,X2)的计算和/或寄存器工作模式运算LFSRWithWorkMode()的计算。在完成非线性函数W=F(X0,X1,X2)运算后,计算Z=W⊕X3。

在多个轮次的密钥输出阶段,即:输出多次Z的计算过程中,可以使用同一个随机数rj,也可以不同轮次使用不同随机数rj。

根据随机数值获取对应的计算比特重构BitReconstrction()的预设顺序,并按照对应的预设顺序进行比特重构BitReconstrction()计算;包括:

按照预定的算法计算出随机数所对应的计算比特重构BitReconstrction()的预设顺序,并按照对应的预设顺序进行完成X1,X2及X3内容的加载和赋值;

在多轮的计算过程中,使用单个随机数的值完成比特重构的加载和赋值顺序,或者,根据不同轮次使用不同随机数来完成比特重构的加载和赋值顺序;

其中,X0=s

在步骤S1密钥装入阶段,先产生一个随机数r0,并根据r0的数值完成线性反馈寄存器LFSR内容的装入。即完成:

s

按照随机数r0的值对应的计算顺序,完成16个线性反馈寄存器内容s

在步骤S2初始化阶段,先产生一个或多个随机数ri,按照预定的算法计算随机数ri的计算顺序结果,并根据顺序结果完成32轮如下运算:

·比特重构BitReconstrction()随机顺序运算;

·非线性函数W=F(X0,X1,X2)随机顺序运算;

·寄存器初始模式运算LFSRWithInitialisationMode()的随机顺序计算。

在步骤S3工作阶段,先产生一个随机数r1或多个随机数r1,r2,r3,按照预定的算法计算随机计算顺序结果,并根据顺序结果完成如下运算:

·比特重构BitReconstrction()随机顺序运算;

·非线性函数W=F(X0,X1,X2)随机顺序运算;

·寄存器工作模式运算LFSRWithWorkMode()的随机顺序运算;

在步骤S4密钥输出阶段,先产生一个或多个随机数rj,按照预定的算法计算随机数rj的计算顺序结果,并根据顺序结果完成L轮如下运算:

·比特重构BitReconstrction()随机顺序运算;

·非线性函数W=F(X0,X1,X2)随机顺序运算;

·寄存器工作模式运算LFSRWithWorkMode()的随机顺序运算;

并输出密钥流Z,其中Z=W⊕X3。其中L=[LENGTH/32],即由密钥流长度LENGTH确定的轮数,函数[x]表示不小于x的整数。

上述步骤S2、步骤S3和步骤S4阶段的比特重构BitReconstrction()随机顺序运算,首先按照预定的算法计算随机数r1/r2/r3、或ri/rj的计算顺序结果,并根据顺序结果完成X0,X1,X2及X3内容的加载和赋值。在多轮的计算过程中,既可以使用单个随机数r1/r2/r3的值完成比特重构的加载和赋值顺序,也可以根据不同轮次使用不同随机数ri/rj来完成比特重构的加载和赋值顺序;比特重构是从LFSR=(s

其中,X0=s

根据随机数值获取到的对应的计算非线性函数W=F(X0,X1,X2)的预设顺序,既包括计算W、W1、W2、R1、R2的先后次序,也包括计算R1和R2的线性函数L1()、L2()和Sbox()的8比特非线性映射函数的计算先后次序;

在多轮的计算过程中,使用单个随机数的值完成非线性函数W=F(X0,X1,X2)的计算,或者,根据不同轮次使用不同随机数来完成非线性函数W=F(X0,X1,X2)的计算;

非线性函数W=F(X0,X1,X2)定义为如下计算过程:

1)W=(X0⊕R1)+R2

2)W1=R1+X1

3)W2=R2⊕X2

4)R1=S(L1(W12))

5)R2=S(L2(W21))

其中,⊕为32比特异或运算,+为模2

L1(X)=X⊕X1⊕X2⊕X3⊕X4

L1(X)=X⊕X5⊕X6⊕X7⊕X8

其中,X1=X<<<2;X1=X<<<10;X3=X<<<18;X4=X<<<24,X5=X<<<8;X6=X<<<14;X7=X<<<22;X8=X<<<30,运算符<<<逻辑为左移运算;W12=W1L||W2H,W21=W2L||W1H,W1L和W2L分别是W1和W2的低16比特数据,W1H和W2H分别是W1和W2的高16比特数据。

上述步骤S2、步骤S3和步骤S4阶段的非线性函数W=F(X0,X1,X2)随机顺序运算,首先按照预定的算法计算随机数r2或ri/rj的计算顺序结果,并根据顺序结果完成非线性函数W=F(X0,X1,X2)的计算。在多轮的计算过程中,既可以使用单个随机数ri/rj的值完成非线性函数的计算,也可以根据不同轮次使用不同随机数ri/rj来完成非线性函数的计算;

上述根据顺序结果完成非线性函数W=F(X0,X1,X2)的计算,既包括计算W、W1、W2、R1、R2的先后次序,也包括计算R1和R2中L1()、L2()的线性运算和Sbox()的8比特非线性映射函数的计算先后次序。

在步骤S4密钥输出阶段,按照上述随机顺序完成非线性函数W=F(X0,X1,X2)后,最终计算Z=W⊕X3。

步骤S2阶段的寄存器初始模式运算LFSRWithInitialisationMode()的随机顺序计算,首先按照预定的算法计算随机数ri的计算顺序结果,并根据顺序结果完成寄存器初始模式运算LFSRWithInitialisationMode()的计算。在多轮的计算过程中,既可以使用单个随机数ri的值完成寄存器初始模式的计算,也可以根据不同轮次使用不同随机数ri来完成寄存器初始模式的计算;

按照预定的算法计算出随机数ri所对应的计算寄存器初始化模式运算LFSRWithInitialisationMode()的预设顺序,其中,该预设顺序中既包括计算u、v的先后次序,也包括计算v=2

在多轮的计算过程中,使用单个随机数ri的值完成寄存器初始化模式LFSRWithInitialisationMode()的计算,或者,根据不同轮次使用不同随机数ri来完成寄存器初始化模式LFSRWithInitialisationMode()的计算;

LFSRWithInitialisationMode()寄存器初始化模式运算过程为:

1)u=W>>1变成31比特值;

2)v=2

3)s

4)如果s

5)(s

上述按照随机数得到的计算顺序,既包括计算u、v的先后次序,也包括计算v=2

根据随机数值获取对应的计算寄寄存器工作模式运算LFSRWithWorkMode()的预设顺序,是指计算s

在多轮的计算过程中,使用单个随机数rj的值完成寄存器工作模式运算LFSRWithWorkMode()的计算,或者,根据不同轮次使用不同随机数rj来完成寄存器工作模式运算LFSRWithWorkMode()的计算。

步骤S3和步骤S4阶段的寄存器工作模式运算LFSRWithWorkMode()的随机顺序运算,首先按照预定的算法计算随机数r3或rj的计算顺序结果,并根据顺序结果完成寄存器工作模式LFSRWithWorkMode()的计算。在多轮的计算过程中,既可以使用单个随机数rj的值完成寄存器工作模式的计算,也可以根据不同轮次使用不同随机数rj来完成寄存器工作模式的计算;

上述寄存器工作模式运算LFSRWithWorkMode()的随机顺序运算,是指计算s

所述的祖冲之密码安全算法的实现方法,包括祖冲之算法的机密性算法中的加密、解密和密钥流产生步骤,也包括祖冲之算法的完整性算法中密钥流产生过程中的密钥装入阶段、初始化阶段、工作阶段及密钥输出阶段。

为进一步说明各阶段随机运算的详细过程,下面举例说明。需要说明的是,举例仅仅是上述随机运算的一种例子,并不能作为限定本发明的依据。

进一步地,在密钥装入阶段,该阶段就是将16个8比特密钥Ki,16个8比特IV及16个7比特固定常数Di拼接并装入和赋值给LFSR寄存器或变量si的过程。表述为:

s

首先,产生秘密产生一个随机数r0,根据随机数的值,按照预定顺序完成这16个s

进一步地,在初始化阶段、工作阶段和密钥输出阶段,并根据随机数的数值完成比特重构BitReconstrction()的随机化运算过程。

其中,比特重构BitReconstrction()是对4个32位寄存器/变量X0,X1,X2,X3的装入/赋值,具体为:X0=s

进一步地,在初始化阶段、工作阶段和密钥输出阶段,根据随机数的数值完成非线性函数W=F(X0,X1,X2)随机顺序运算,包括两个步骤:

步骤1:完成W、W1、W2的计算,具体为:

W=(X0⊕R1)+R2;W1=R1+X1;W2=R2⊕X2,其中⊕表示按比特位逐位异或运算,+为模2

完成W,W1和W2的先后顺序,取决于随机数r(即随机数r2、ri和/或rj)的值。举例来说,r2’=r mod 6,则确定计算顺序如下表:

步骤2:完成R1、R2的计算,具体为:R1=S(L1(W12)),及R2=S(L2(W21))。根据随机数r的值,按照预设顺序计算,具体计算步骤为:

例如,如果r为偶数则计算顺序为:

1)R1=S(L1(W12))

2)R2=S(L2(W21))

如果r为奇数,则计算顺序为:

1)R2=S(L2(W21))

2)R1=S(L1(W12))

式中:

S为32比特的S盒变换,为非线性变换;

L1(),L2()为线性函数,分别定义为:

L1(X)=X⊕X1⊕X2⊕X3⊕X4;

L2(X)=X⊕X5⊕X6⊕X7⊕X8;

其中,

X1=X<<<2;X2=X<<<10;X3=X<<<18;X4=X<<<24,X5=X<<<8;X6=X<<<14;X7=X<<<22;X8=X<<<30,运算符<<<逻辑为左移运算;

W12=W1L||W2H,W21=W2L||W1H;||表示字符串连接符;

W1L和W2L分别是W1和W2的低16比特数据,W1H和W2H分别是W1和W2的高16比特数据;

举例来说,计算线性变换L1(X)的过程如下:

A1=L1(X)=X⊕X1⊕X2⊕X3⊕X4,A1的计算步骤为具体为:

根据随机数r获得r3’,r3’=r mod 24,并根据r3’值获取对应的计算A1的预设顺序,按照该预设顺序计算A1,具体如下:

计算线性变换L2(X)的过程如下:

A2=L2(X)=X⊕X5⊕X6⊕X7⊕X8,A2的计算步骤具体为:

根据r3’值获取对应的计算A2的预设顺序,按照该预设顺序计算A2,具体如下:

其中,⊕表示按比特位逐位异或运算。

进一步,在初始化阶段、工作阶段和密钥输出阶段,根据随机数确定的运算次序,以获取对应的计算非线性函数W=F(X0,X1,X2)的预设顺序并按照对应的预设顺序进行非线性函数W=F(X0,X1,X2)的计算,包括:

按照预设顺序计算非线性函数W=F(X0,X1,X2)中的非线性运算部分,具体计算步骤为:

分别令A=L1(W12)计算R1=S(A);令A=L2(W21)计算R2=S(A);

通过随机数r获得r4’,r4’=r mod 24,并根据r4’值获取对应的计算S(A)的预设顺序,按照该预设顺序计算S(A),具体如下:

其中,a0,a1,a2,a3分别为box()的输入,b0,b1,b2,b3分别为box()的输出。

进一步,在初始化阶段,根据随机数r(即ri)进行求余运算以获取对应的计算寄存器初始化模式运算LFSRWithInitialisationMode()的预设顺序,并按照该预设顺序进行寄存器初始化模式运算LFSRWithInitialisationMode()的计算,包括:

v=2

通过随机数r获得r5’,r5’=r mod 5,并根据r5’值获取对应的计算寄存器初始化模式运算LFSRWithInitialisationMode()中v值的计算过程,具体如下:

v=S15+S13+S10+S4+S0 mod(2

其中,S15=2

其中,mod()表示整数求余运算。

更进一步,寄存器工作模式运算LFSRWithWorkMode()的随机顺序运算过程为,根据随机数确定的计算寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并根据对应的预设顺序进行寄存器工作模式运算LFSRWithWorkMode()的计算,具体如下:

s

即:s

其中,S15=2

通过随机数r获得r6’,r6’=r mod 5,并根据r6’值获取对应的计算寄存器工作模式运算LFSRWithWorkMode()中s

其中,mod表示整数求余运算。

进一步,在初始化阶段的32轮运算过程中,每一轮均使用不同的随机数ri进行求余运算,以确定计算的先后顺序。

更进一步,在密钥输出阶段,每一轮输出32比特长度的密钥,均需要比特重构、非线性函数运算、计算寄存器工作模式运算过程中,每一轮均使用随机数确定计算顺序,并按照随机数确定的顺序完成比特重构、非线性函数运算、计算寄存器工作模式运算。

本发明的有益效果是:

本发明的祖冲之密码安全算法的实现方法,通过随机改变运算次序的方法,使得在运算过程中能量消耗在时间上具有随机性,并在统计意义上使得能量耗散白噪声化,从而破坏简单能量攻击(SPA)、差分能量攻击(DPA)的基础,使得非入侵物理攻击的方法失效。

附图说明

图1为本发明祖冲之密码安全算法的实现方法的一实施例的流程示意图;

图2为本发明祖冲之密码安全算法的实现方法的简化实施例2的流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明的祖冲之密码安全算法的实现方法进行进一步详细说明。需要说明的是,在不冲突的情况下,以下各实施例及实施例中的特征可以相互组合。应当理解,此处所描述的具体实施例仅用于解释本发明,并不用于限定本发明。

实施例1:

参照图1,本发明实施例的祖冲之密码安全算法的实现方法,包括以下步骤:

S1,密钥装入阶段;

S2,初始化阶段;

S3,工作阶段;

S4,密钥输出阶段;

其中,在密钥装入阶段秘密产生一个随机数,根据随机数值获取对应的密钥装入的预定顺序,并按照对应的预定顺序进行密钥装入。

在密钥装入阶段秘密产生一个随机数r0,根据随机数r0值确定密钥装入的顺序。该阶段就是将16个8比特密钥Ki,16个8比特IV及16个7比特固定常数Di拼接并装入/赋值给LFSR寄存器或变量si的过程。表述为:

s

首先,秘密产生一个随机数r0,根据随机数的值,按照预定顺序完成这16个s

在初始化阶段秘密产生一个或多个随机数ri,根据随机数ri的数值所确定的顺序完成比特重构BitReconstrction(),首先按照预定的算法计算随机数值ri所确定的计算顺序结果,并根据顺序结果完成X0,X1,X2及X3内容的加载/赋值。在多轮的计算过程中,既可以使用单个随机数ri的值完成比特重构的加载/赋值顺序,也可以根据不同轮次使用不同随机数ri来完成比特重构的加载/赋值顺序;

其中,X0=s

具体地,例如:取随机数的低2比特为r1’,其可能的数值为0~3,则按照下表的顺序来完成比特重构的加载/赋值:

进一步,在初始化阶段秘密产生一个或多个随机数,根据随机数进行求余运算以获取对应的计算非线性函数W=F(X0,X1,X2)的预设顺序和/或计算寄存器初始化模式运算LFSRWithInitialisationMode()的预设顺序,并按照对应的预设顺序进行非线性函数W=F(X0,X1,X2)的计算,和/或按照对应的预设顺序进行寄存器初始化模式运算LFSRWithInitialisationMode()的计算;

3个32比特字X0,X1,X2代表非线性函数F()的输入,一个32比特字W代表非线性函数F()的输出。

ZUC初始运算的32轮运算过程可以是全部使用随机计算步骤,也可以是部分轮使用随机数步骤。另一方面,一轮的运算中,可以是全部步骤使用随机计算步骤,也可以只选用部分计算使用随机计算步骤。使得每次密码运算中的具体运算顺序不同,从而可以减缓或避免简单能量攻击(SPA)、差分能量攻击(DPA)的有效性。

在本发明的实施例1中,可选的,在初始化阶段,根据随机数进行求余运算以获取对应的计算非线性函数W=F(X0,X1,X2)的预设顺序并按照对应的预设顺序进行非线性函数W=F(X0,X1,X2)的计算,包括:

通过随机数ri获得r2’,r2’=ri mod 6,并根据r2’值获取对应的计算非线性函数W=F(X0,X1,X2)的预设顺序,按照该预设顺序计算非线性函数W=F(X0,X1,X2)中的线性运算部分,具体如下:

其中,R1,R2表示非线性函数F(X0,X1,X2)的2个32比特记忆单元变量;mod表示整数取余运算,⊕表示按比特位逐位异或运算,+为模2

W表示非线性函数F输出的32比特字。

例如,通过随机数ri获得r3’,r3’=ri mod 2,按照预设顺序计算非线性函数W=F(X0,X1,X2)中的非线性运算部分,具体计算步骤为:

式中,S为32比特的S盒变换;

L1(),L2()为线性函数,分别定义为:

L1(X)=X⊕X1⊕X2⊕X3⊕X4;

L2(X)=X⊕X5⊕X6⊕X7⊕X8;

其中,

X1=X<<<2;X2=X<<<10;X3=X<<<18;X4=X<<<24,X5=X<<<8;X6=X<<<14;X7=X<<<22;X8=X<<<30,运算符<<<逻辑为左移运算;

W12=W1L||W2H,W21=W2L||W1H;||表示字符串连接符;

W1L和W2L分别是W1和W2的低16比特数据,W1H和W2H分别是W1和W2的高16比特数据;

计算线性变换L1(X)的过程如下:

A1=L1(X)=X⊕X1⊕X2⊕X3⊕X4,A1的计算步骤为具体为:

通过随机数ri获得r4’,r4’=ri mod 24,并根据r4’值获取对应的计算A1的预设顺序,按照该预设顺序计算A1,具体如下:

计算线性变换L2(X)的过程如下:

A2=L2(X)=X⊕X5⊕X6⊕X7⊕X8,A2的计算步骤具体为:

同样根据r4’值获取对应的计算A2的预设顺序,按照该预设顺序计算A2,具体如下:

完成上述计算线性变换A=L(X)后,再进行非线性变换变换S(A)。包括R1=S(A1)和R2=S(A2)。其中S(A)=(Sbox(a0),Sbox(a1),Sbox(a2),Sbox(a3)),Sbox()为S盒,是一种固定映射规则的8比特至8比特的非线性映射函数。A为一个32比特数,包括四个8为数{a0,a1,a2,a3},即:A=a0||a1||a2||a3。

式中,Sbox()为8比特的S盒变换;即一次非线性变换S()包括个独立的8比特S盒变换。

分别令A=L1(W12)计算B=S(A)得到R1,令A=L2(W21)计算B=S(A)得到R2,具体更成为:通过随机数ri获得r5’,r5’=ri mod 24,并根据r5’值获取对应的计算S(A)的预设顺序,按照该预设顺序计算S(A),具体如下:

其中,a0,a1,a2,a3分别为Sbox()输入,b0,b1,b2,b3分别为Sbox()输出。

上述运算顺序的改变,得到的结果S(A)是一样的,至于本次运算使用哪个顺序,取决于随机数r5’的数值,也取决于事先约定的计算顺序。

在本发明的一些实施例中,可选的,在初始化阶段秘密产生一个或多个随机数,根据随机数进行求余运算以获取对应的计算寄存器初始化模式运算LFSRWithInitialisationMode()的预设顺序,并按照该预设顺序进行寄存器初始化模式运算LFSRWithInitialisationMode()的计算,包括:

v=2

其中,S15=2

通过随机数ri获得r6’,r6’=ri mod 5,并根据r6’值获取对应的计算寄存器初始化模式运算LFSRWithInitialisationMode()中v值的计算过程,具体如下:

v=S15+S13+S10+S4+S0 mod(2

在本发明的一些实施例中,可选的,在初始化阶段的32轮运算过程中,每一轮均使用随机数进行求余运算,或者,部分轮使用随机数进行求余运算。

ZUC初始运算的32轮运算过程可以是全部使用随机计算步骤,也可以是部分轮使用随机数步骤。另一方面,一轮的运算中,可以是全部步骤使用随机计算步骤,也可以只选用部分计算使用随机计算步骤。

在本发明的一些实施例中,可选的,在工作阶段,根据随机数进行求余运算以获取对应的计算非线性函数F(X0,X1,X2)的预设顺序,并根据对应的预设顺序进行非线性函数W=F(X0,X1,X2)的计算,包括:

通过随机数r2获得r3’,r3’=r2 mod 6,并根据r3’值获取对应的计算非线性函数W=F(X0,X1,X2)的预设顺序,按照该预设顺序计算非线性函数W=F(X0,X1,X2)中的线性运算部分,

在本发明的一些实施例中,可选的,在工作阶段,秘密产生一个随机数r3,根据该随机数进行求余运算以获取对应的计算寄存器工作模式运算LFSRWithWorkMode()的预设顺序,并根据对应的预设顺序进行寄存器工作模式运算LFSRWithWorkMode()的计算,具体如下:

s

其中,S15=2

s

通过随机数r3获得r7’,r7’=r3 mod 5,并根据r7’值获取对应的计算寄存器工作模式运算LFSRWithWorkMode()中s16值的计算过程,具体如下:

在本发明的一些实施例中,密钥流输出阶段的具体过程如下:

1)比特重构:BitReconstruction();

2)非线性函数:Z=F(X0,X1,X2)⊕X3;

3)线性反馈移位寄存器的初始模式:LFSRWithWorkMode();

4)输出32比特密钥流;

除输出32比特密钥流之外,密钥流输出阶段的过程与工作完全一样,不再赘述。即:每次计算密钥流均可以根据随机数来完成如下步骤:

·比特重构BitReconstrction()随机顺序运算;

·非线性函数W=F(X0,X1,X2)随机顺序运算;

·寄存器工作模式运算LFSRWithWorkMode()的随机顺序运算;

实施例一的ZUC初始运算过程中,采用32轮中使用32个随机数,使得每轮的运算中不同函数的运算顺序均有可能随机改变。该方式使得即便使用相同的明文和相同的密钥运算时,从非入侵物理攻击的角度观测32轮运算的能量变化均不同,在大量重复运算中,能量变化变得随机并趋于白噪声化,无法用统计的方法进行攻击和破解,同时,运算时间每轮是一样的,对防止时间攻击也有效果,从而使密码运算过程有效防止了非入侵物理的攻击。

实施例2:

本实施例2是一个简化的随机化计算实现祖冲之密码算法的实施例。如图2所示,其要点是:

1.每次计算仅秘密产生一个随机数r,该随机数用于如下阶段:

S1,密钥装入阶段;

S2,初始化阶段;

2.工作阶段和密钥输出阶段,不再采用随机计算。

在密钥装入阶段,根据随机数r的值,按照预定顺序完成这16个s

在初始化阶段,采用简化的随机计算过程如下:

步骤1:计算W,R1及R2,具体为:

根据随机数r mod 3的值,确定下表所列计算顺序

如r=125,则r=125 mod 3=2;则顺序为3,1,2,计算步骤为:

1)W2=R2⊕X2

2)W=(X0⊕R1)+R2

3)W1=R1+X1

如果r是奇数,R1,R2的计算顺序为:

1)R1=S(L1(W12))

2)R2=S(L2(W21))

如果r是偶数,R1,R2的计算顺序为:

1)R2=S(L2(W21))

2)R1=S(L1(W12))

上述W,W1,W2,R1,R2及W21及W12同实例1。

步骤2:计算非线性变换F()中线性运算A1=L1(W12)及A2=L2(W21),具体为:根据r mod 10的值,确定下表所列计算顺序:

如r=125,则r=125mod 10=5;顺序为5,4,3,2,1,计算公式为:

A1=X4⊕X3⊕X2⊕X1⊕X;A2=X8⊕X7⊕X6⊕X5⊕X,计算步骤为:

1)A1=X4⊕X3

2)A1=A1⊕X2

3)A1=A1⊕X1

4)A1=A1⊕X

1)A2=X8⊕X7

2)A2=A2⊕X6

3)A2=A2⊕X5

4)A2=A2⊕X

步骤3:计算非线性变换F()中非线性运算R1=S(A1),R2=S(A2),具体为:

根据r mod 4的值,确定下表所列计算顺序:

如r=125,则r=125mod 4=1;顺序为1,2,3,0,计算公式为:

R1=Sbox(a11,a12,a13,a10);R2=Sbox(a21,a22,a23,a20)计算步骤为:

1)r11=Sbox(a11)

2)r12=Sbox(a12)

3)r13=Sbox(a13)

4)r10=Sbox(a10)

1)r21=Sbox(a21)

2)r22=Sbox(a22)

3)r23=Sbox(a23)

4)r20=Sbox(a20)

结果为:R1=(r10,r11,r12,r13);R2=(r20,r21,r22,r23);

步骤4:计算寄存器工作模式运算LFSRWithWorkMode()中s16值的计算过程:

s

记做s

S10=2

根据r mod 5的值,确定下表所列计算顺序:

如r=125,则r=125 mod 5=0;顺序为15,13,10,4,0,计算步骤为:

1)S16=S15+S13

2)S16=S16+S10

3)S16=S16+S4

4)S16=S16+S0 mod(2

需要说明的是,为简化起见,上述仅列出几种随机顺序计算的过程,其它不使用随机计算的过程并未完全列出。

重复上述步骤32轮,完成ZUC的初始化阶段,后续工作阶段和密钥输出阶段不再使用随机顺序的方法,而是按照常规计算方法完成即可。

在实例2中,一次ZUC运算使用一个随机数r,并在几个步骤中使用同一个随机数确定的顺序完成计算。由于每次ZUC运算中随机数r的不同,导致使用随机顺序计算的先后次序不同。在大量的计算过程中,由于随机数r不同导致的计算顺序随机性,使得能量均匀化,即:白噪声化,可以有效减低能量估计的效果及威胁。

以上各实施例的祖冲之密码安全算法的实现方法,通过随机改变运算次序的方法,使得在运算过程中能量消耗在时间上具有随机性,并在统计意义上使得能量耗散白噪声化,从而破坏简单能量攻击(SPA)、差分能量攻击(DPA)的基础,使得非入侵物理攻击的方法失效。

本发明的目的是通过将计算过程/步骤/顺序的随机化处理,使得非入侵物理攻击的方法失效。

其基本原理是,非入侵物理攻击的原理是通过单次或大量重复计算中获取的能量变化来反推密钥的数值,即:某个轮次中某个节拍的计算的能量(如结果为0xFF)过高或过低(如结果为0x00)来反向推导密钥的数值。通过随机化顺序计算,将能量的过高或过低的出现时间随机化,在未知随机数值r的情况下,增加了未知因素,从而加大攻击难度,破坏攻击的效果。

将计算过程/步骤/顺序的随机化处理,对于单进程/单线程计算的密码设备来讲,其优点是显而易见的,如8位/16位/32位单片机、计算机和其它非并行计算设备。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。

相关技术
  • 一种祖冲之密码安全算法的实现方法
  • 一种自同步的祖冲之加解密算法的实现系统及其方法
技术分类

06120114700194