一种白盒SM4密码算法方案与系统的制作方法

文档序号:15929433发布日期:2018-11-14 01:28阅读:761来源:国知局

本发明属于信息安全技术领域,具体涉及一种改进的sm4白盒密码算法。本发明还涉及一种当sm4算法初始密钥为192比特甚至更大值的密钥扩展算法的新模式。

背景技术

以往,我们公认密码的具体实现是被公开的,并且基于一般认为只要我们保留一些信息即密钥为秘密的,密码算法就可以提供相应的安全保证。这种黑盒模型应用于硬件是起作用的,硬件方可以采取各种抵抗措施使攻击者陷入困境,然而如今随着更加轻便的个人设备的日益流行,密码算法常常运行在不安全的平台上。攻击者可以通过对程序运行的二进制追踪、读取内存中的密钥和程序执行的中间结果、静态分析等等方式很容易地获得密钥信息。因此,当前很重要的是我们要用另一个层面来对抗攻击者。

基于此观察,chow等在2002年提出白盒攻击环境(white-boxattackcontent)的概念,它假设在同一主机中,可以同时运行加密软件与拥有特殊权限的攻击软件,并且对密码算法的运行过程拥有完全的控制权;程序的动态执行过程可以被监视;密码算法的实现细节及执行过程是可见的,并且可被任意修改。白盒攻击环境可以认为是最坏的模型,然而它也是在信息技术发展迅速的今天很适用的模型。能够抵抗白盒攻击的密码算法称为白盒密码。

白盒密码的提出最早是为了解决数字版权问题,而随着白盒环境场景的不断增多,白盒密码的应用范围也迅速扩大。sm4密码算法(原名sms4)是我国商用密码管理办公室公布的商用分组密码标准,广泛地被用于无线局域网产品的加密。sm4算法的分组长度为128比特,密钥长度只有128长度一个选择,采用32轮非线性迭代结构,解密与加密算法的算法结构相同,但轮密钥的使用顺序相反。解密轮密钥是加密轮密钥的逆序。

专利文献1(公开号:cn105681025a,公开日2016年06月15日)提出了一种国家密码标准算法sm4的安全白盒实现方法和装置,主要原理是将密钥嵌入到查找表中,使用两种查找表,将两种查找表的操作交叉,一个表的输出数据嵌入另一个表中,由随机选取的仿射变换保护,从而防止了破解难度的降低,保证了该方法的安全性。但实际投入应用过程中,存储空间大,执行效率相对较低。

专利文献2(公开号:cn106452729,公开日2017年02月22日)提供了一种基于随机置换的白盒密码的加密方法。方法的具体步骤包括输入混淆函数p;随机置换s;输出混淆函数q,使得除了能够观测到查找表以外不能获得更多其他的信息,从而保证了在不可信任终端运行加密算法的安全性。这种方法对本发明的方案提出有很大的启发和借鉴意义,但仍存在着需要完善之处,因它的每一轮的q和下一轮的p是互逆的,在合并相邻两轮时会抵消部分变换对原有算法的混淆作用。

通过对上述两篇专利文献的分析,上述发明存在着不完善之处。复杂化内部编码解码过程并不能有效提高线性变换的安全性,通过对仿射矩阵或仿射常数进行拆分来增大白盒多样性的策略只会增大白盒方案的实现难度,对整体安全性无明显加强。而且在我们的方案设计中需考虑实际问题,在尽可能的情况下兼顾空间和效率的平衡。总的来说,白盒密码的研究还处于探索阶段。为了满足各领域高标准的安全要求,应用于更多的工作环境中,设计安全高效、能够抵抗白盒攻击的sm4白盒加密算法是很有必要的。



技术实现要素:

针对sm4算法的上述需求以及克服现有技术的不足,本发明提出了一种密钥长度为192比特的sm4新模式,同时,进行了白盒算法的改进设计。这里的白盒sm4加密算法与白盒sm4解密算法的结构相似,使用的查找表结构也相同,不同之处在于使用密钥的顺序。

本发明的方法中,采用新模式,使初始密钥由原先的128比特增至192比特,改进密钥扩展算法,使之仍然产生32轮每轮32比特的密钥,提高了算法整体的安全性。对sm4白盒密码算法进行了两项改进设计,一是在第一轮输入之前和最后一轮输出之后添加置乱编码,在进行内部编码之后进行外部编码,这是为了保证白盒算法的完整性和可用性,其中本方案的编码均为可逆仿射变换的形式;二是对sm4算法轮变换中的t变换做编码,形成查找表,将密钥隐藏在查找表中。直接采用一个查找表占用存储空间过大,故以分块矩阵的方式降低查找表规模,使得空间在可接受的范围内变大并比现有技术节约了一半的查找次数,尽可能地达到空间和效率的平衡。且在实际操作中密钥扩展算法产生的查找表可以先不做处理直接参与构造查找表,节省时间,提高效率。

本发明的优势在于:

1.效率:现有的sm4白盒算法有大量的矩阵乘法操作,而本方案的算法运行过程主要由可逆仿射变换和查找表组成,相对而言速度更快。整个算法共32轮迭代过程,第一轮之前与最后一轮之后都有4个32比特到32比特的可逆双射,占用空间:2×4×(32×32)=8192(比特)。

每一轮分为三个部分,每一轮所占用的空间为:

part1包括3个32比特到32比特的仿射变换:3×(32×32+32)=3168(比特);

part2包括2个16比特到16比特的查找表:2×(216×16)=2097152(比特);

part3包括2个32比特到32比特的仿射变换:2×(32×32+32)=2112(比特);

所以,本发明提出的整个白盒sm4算法方案所占用的空间为:

32×(3168+2097152+2112)+8192=67286016(比特)=8410752b=8.021118mb

而执行一次加密算法需要进行64次查表,168次仿射变换和96次异或运算。专利1所述的白盒实现方案需进行32轮变换,每轮需要16个ttc查找表和4个trt查找表,共需640个查找表,给存储空间造成了极大的负担,而且查表次数过多,对执行效率也会有一定的影响。与之相比,本方案在存储空间和执行速度具有较为明显的优势。

2.安全性:白盒密码算法设计的主要目的是为了在白盒攻击环境中防止攻击者从密码算法的执行过程中抽取出密钥。本设计将密钥信息隐藏在查找表中,且增加了外部编码,使得查找表随机选取的输入和输出编码难以被攻破恢复,那么密钥信息也就不能被攻击者轻易得到。sm4算法的安全性主要看从查找表中分析出密钥或者恢复出输入输出编码的复杂度。无论是哪一种查找表,攻击者都不可能通过暴力穷搜的方式找出一种特定的查找表构造方法。从现有的白盒安全指标白盒多样性和白盒含混度来看,本方案设计的改进算法是安全的,攻击者很难从仿射变换或者查找表中推断出输入输出置乱编码及密钥信息。

附图说明

图1是一种新的白盒sm4密码算法方案整体框图;

图2是sm4-192bit新模式密钥扩展算法流程图;

图3是改进sm4白盒密码算法part1部分;

图4是改进sm4白盒密码算法part2部分;

图5是改进sm4白盒密码算法part3部分;

具体实施方式

下面结合附图和具体实施例对本发明做进一步详细的说明,但不以任何方式限制本发明的范围。

本方案基于国家商用密码标准sm4密码算法进行构建。sm4-192bit新模式的密钥扩展算法输入192比特初始密钥mk进行密钥扩展算法,得到12个分密钥,分为三组。初始计算后各经过16、16、32轮变换,得到64个子密钥,两两拼接处理,从而产生加密解密算法所需的32轮轮密钥rki(i=0,1,…,31),其中rki为32比特数据。

如图2所示,步骤一:在轮变换之前进行初始异或计算,即

其中,是比特异或符号,mkm,n(m=0,1,2;n=0,1,2,3)均为16比特数值,是192比特初始密钥分组产生的分密钥;系统参数fk的取值固定每个为16比特,由sm4密码算法原有取值拆分以及相互异或而成,其具体取值用16进制表示为:

产生的km,n,(m=0,1,2;n=0,1,2,3)作为初值参与轮变换。

步骤二:三组初始值所进行的具体轮密钥产生流程是相同的,均为

其中:

(1)合成置换是一个可逆变换,由非线性变换τ和线性变换l′复合而成,即t′(·)=l′(τ(·));非线性变换τ由4个并行的s盒构成;设输入为

(2)cki,j,(i=0,1…,31;j=1,2)为固定16比特数值,由sm4密码算法原有32个取值拆分得到。原固定参数ck按照以下方法来取值(16进制表示):00070e15,1c232a31,383f464d,545b6269,70777e85,8c939aa1,a8afb6bd,c4cbd2d9,e0e7eef5,fc030a11,181f262d,343b4249,50575e65,6c737a81,888f969d,a4abb2b9,c0c7ced5,dce3eaf1,f8ff060d,141b2229,30373e45,4c535a61,686f767d,848b9299,a0a7aeb5,bcc3cad1,d8dfe6ed,f4fb0209,10171e25,2c333a41,484f565d,646b7279。而本发明中,ck被分为2部分,ck=cki,1||cki,2,i=0,1,…31。

(3)产生的rki,k,(i=0,1,…,31;k=1,2,3)为16比特数值。

步骤三:三组初始值进行的轮数及产生的值不同,第一组初始值为(k0,0,k0,1,k0,2,k0,3),使用cki,1,i=0,1,…15参与运算,共进行16轮,生成16个子密钥rki,1,i=0,1,…15;第二组初始值为(k1,0,k1,1,k1,2,k1,3),使用cki,1i=16,17…31参与运算,共进行16轮,生成16个子密钥rki,2,i=0,1,…15;第三组初始值为(k2,0,k2,1,k2,2,k2,3),使用cki,2,i=0,1,…31参与运算,共进行32轮,生成32个子密钥rki、3,i=0,1,…31。在具体加解密运算过程中,轮密钥为32bit,而各组产生的子密钥为16bit,故对其做拼接处理,得到前16轮轮密钥rki=rki,1||rki,3,i=0,1,…15以及后16轮轮密钥rki=rki,2||rki,3,i=16,17,…31。

此处需注意本方案新模式的思路不仅可用于192比特初始密钥的sm4算法模式,也可用于初始密钥比特值更大的情况,如256比特等。

经过上述三个步骤生成轮密钥后,正式进入改进的sm4白盒加密算法流程。sm4白盒加密算法与sm4白盒解密算法的结构仍然相同,使用的查找表结构相同,不同之处在于使用密钥的顺序,对解密算法流程不做赘述。本方案sm4白盒密码算法实现过程可转化为计算仿射变换和查找表的形式,以128比特数据(x0,x1,x2,x3)作为明文输入,经过外部置乱编码和32轮变换后,进行r变换,最终输出128比特密文(x35,x34,x33,x32);所述32轮变换中,第i(0≤i≤31)轮变换以4个32比特数值xi,xi+1,xi+2,xi+3作为输入,输出一个32比特数值x1+4。

如图1所示,改进的sm4白盒密码算法在第一轮之前和最后一轮之后都做了输入、输出置乱编码。对输入的128比特明文分组(x0,x1,x2,x3)全部用32×32的可逆矩阵pi进行混淆,得x′i=pi·xi(i=0,1,2,3)作为轮函数的输入,而经过32轮变换产生的输出x32,x33,x34,x35,用32×32的可逆矩阵pi进行置乱编码即x′i=pi-1·xi(i=32,33,34,35),然后进行一次r变换,得到的(x′35,x′34,x′33,x′32)即为密文分组。其中,本方案的编码均为可逆仿射变换的形式,其数学表达式为:其中p代表一个仿射变换,l[p]是可逆矩阵,是p的线性部分,c[p]是列向量形式,是p的常数项。故可以表示为x′i=pi·xi,(i=0,1,2,3);x′i。=pi-1·xi(i=32,33,34,35)。且pi(i=0,1,2,3)与前四轮中的part1部分对xi(i=0,1,2,3)的输入置乱相抵消,pi-1(i=32,33,34,35)与最后四轮中的part3部分对xi(i=32,33,34,35)的输出置乱相抵消。

本方案32轮轮变换中每一轮轮函数被分割为part1、part2和part3三部分,拆分成三小块,使用仿射变换作为输入置乱编码和输出置乱编码来隐藏sm4算法的每个内部状态,并使用查找表来实现变换函数t,通过对查找表的输入输出值编码的方式来隐藏t中所含有的密钥信息。

如图3所示,part1:计算已知方案采用网络化编码方式,即上一变换的输出编码与下一变换的输入编码相抵消。故先对第i轮的输入x′i+1,x′i+1,x′i+1进行解码处理,消去上一轮变换中的输出置乱编码,然后进行编码。part1的计算过程可以表示为:这里的ai+j为gf(2)上的32×32可逆矩阵,ai+j是32比特的常量;ei=diag(e′i0,e′i1),e′i0、e′i1均为gf(2)上的16比特到16比特的可逆仿射变换。因pi+j与ei都是随机选择并且保密的,只需保存从而转化为一个32比特到32比特的复合仿射变换。

如图4所示,part2:对t变换做输入输出置乱编码,将密钥与s盒结合在一起形成查找表,将密钥隐藏在查找表中。

其中,l1,l2表示sm4算法中t变换的线性变换,为两个gf(2)上的16×16的矩阵;e′i0、e′i1均为gf(2)上的16比特到16比特的可逆仿射变换,它作为查找表的输入编码;qi0,qi1为16比特到16比特的可逆仿射变换,它作为查找表的输出编码。

如图5所示,part3:计算xi+4=xi+t(x+rki)即均为gf(2)上32bit到32bit的可逆仿射变换,它们将与下一轮中对xi+4的置乱编码抵消一部分;qi=diag(qi0,qi1),生成与上步的qi0,qi1相抵消。保存即可,转化为32比特到32比特的复合仿射变换。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1