本发明涉及信息安全技术领域,特别是涉及一种标准密文输出格式的商密sm4算法的白盒软件实现方法。
背景技术:
随着网络和计算机技术应用的快速发展,信息安全问题已经成为关乎国计民生的大事。传统密码学建立在黑盒模型下,该模型假设算法运行在一个可信的终端,其运行子结果、内存等均处在不可查看和不可更改的可信任环境中。然而,密码学的应用已经遍及到人们日常生活的各个角落,例如电子邮件、网页访问、数字内容分发、网络交易、电子政务等。这些应用虽然在一个标准的终端上执行,像手机、智能卡等,但却使用在一个不可信任的环境中,软件加解密的动态过程对于攻击者是可见的,他们很容易就获得密钥信息。传统的黑盒模型较少考虑这些问题,它已经不再满足越来越高的安全要求。
sm4算法是国家商用密码管理局制定的商用分组密码标准,主要用于无线局域网产品,其运行环境往往是不安全的。为了保护无线局域网产品中的密钥安全,设计能够抵抗白盒攻击的sm4算法是十分必要的。
2002年,chow等人提出了白盒攻击环境的概念,允许攻击者对加密软件及其运行环境拥有完全的控制能力、与软件的执行者拥有同等的权利。白盒攻击环境颠覆了传统密码学对攻击者能力的诸多限制,更加符合实际生活中的安全威胁。我们将能够抵抗白盒攻击的密码算法及其实现称为白盒密码。随后,chow等人提出了aes白盒算法和des白盒算法。不久,jacob、wyseur、goubin、billet等人采用注入错误攻击、截断差分分析、合并查找表等技术对aes白盒算法和des白盒算法进行攻击,证明了chow等人提出的白盒算法是不安全的。虽然白盒密码算法一直是学术界讨论的热点,但却一直未有安全的白盒密码算法出现。
综上,目前并没有安全的sm4白盒算法被提出,这不利于保护无线局域网产品的密钥安全,产品中的密码模块存在着巨大的安全风险。
技术实现要素:
为解决上述问题,本发明提供了一种标准密文输出格式的商密sm4算法的白盒软件实现方法,包括如下步骤:
步骤一:产生一组128bit的字符串作为根密钥。
步骤二:将128bit的根密钥按照标准sm4密钥扩展算法扩展为32个32bit的轮密钥,设为rk0,rk1,...,rk31,分别用于第1轮到第32轮的计算,第33、34、35、36轮计算的密钥分别为r28,r29,r30,r31。
步骤三:随机生成420个8×8的可逆矩阵,分别记为
mi,i=1,...,420。
步骤四:定义四类矩阵,分别为p、ei、qj、rk。令:
p=diag(p11,p12,p13,p14),
ei=diag(ei1,ei2,ei3,ei4);
qi=diag(qj1,qj2,qj3,qj4);
rk=diag(rk1,rk2,rk3,rk4);
其中p11=m1,p12=m2,p13=m3,p14=m4,eil=m4(i+1)+l,qj1=m4(j+37)+l,rkl=m4(k+73)+l,i=1,...,36,j=1,...,36,k=1,...,32,l=1,...,4。
步骤五:产生复合线性变化ai,j,i=1,...,36,j=1,2,3。
步骤六:构造第一个查找表,具体方法为:
步骤6.1:设在第i轮计算中,第一个查找表的输入为
yi=(yi1,yi2,yi3,yi4)t。
第一个查找表的构建方法如下:
首先,yi经过线性变换
其中
步骤6.2:将本轮计算的密钥rki隐藏在s盒中,
设
步骤6.3:计算qi*p*l*(zi1,zi2,zi3,zi4)t。
记hi=qipl=(hi1hi2hi3hi4),hij为32*8的矩阵,则:
据上,可获得4个8bit到32bit的查找表:
yij(→zij)→vij,j=1,2,3,4。
第一个查找表
hi=qipl=(hi1hi2hi3hi4),hij为32*8的矩阵,i=1,...36,j=1,...,4。
步骤七:构造第二个查找表,具体方法为:
设在第i轮中,第二个查找表的输入为si=(si1,si2,si3,si4)和
ti=(ti1,ti2,ti3,ti4)。
对于第1轮到第4轮计算,第二个查找表的构建方法如下:
步骤7.1:计算rip(si)和
rip(si)=(ri,1p1,1si,1,ri,2p1,2si,2,ri,3p1,3si,3,ri,4p1,4si,4);
步骤7.2:计算
对于第5轮到第32轮,第二个查找表的构建方法如下:
步骤7.1:计算
步骤7.2:计算
对于第33轮到第36轮,第二个查找表的构建方法如下:
步骤7.1:计算
步骤7.2:计算
据上,得到第二个查找表的构造为
步骤八:设明文输入为(x0,x1,x2,x3),经过36轮运算,最后输出的密文为(x39,x38,x37,x36),每一轮根据已经建立的复合线性变化ai,j,第一个查找表及第二个查找表按如下步骤进行加密运算:
设第i轮的输入为(xi-1,xi,xi+1,xi+2),其中xi-1,xi,xi+1,xi+2都为32bit。
步骤8.1:利用复合线性变换ai,1,ai,2,ai,3分别左乘xi,xi+1,xi+2,然后将结果进行异或,即:
步骤8.2:计算yi=(yi1,yi2,yi3,yi4)t经过查找表一变换后的结果,即:
步骤8.3:计算si=xi-1=(si1,si2,si3,si4)t和ti=(ti1,ti2,ti3,ti4)t经过查找表二变换后的结果,即:
经过上述3步变换后,第i轮的输出xi+3=(xi+3,1,xi+3,2,xi+3,3,xi+4,4)。
进一步的,步骤一中是利用随机数发生器产生根密钥。
进一步的,步骤二中是利用标准sm4算法的密钥扩展算法将128bit的根密钥扩展32个32bit的密钥。
本发明的有益效果为:
1.安全性:本发明设计的sm4白盒算法将密钥隐藏在查找表中,且利用线性变换对查找表进行混淆,采用线性变换的复合来抵抗查找表的合并分析,到达有效保护密钥的目的。
2.效率高:原始sm4算法有大量矩阵乘法运算,而本发明设计的sm4白盒算法实现时主要采用查找表和异或运算,及少量的矩阵乘法运算,在执行效率上优于标准sm4算法。
3.通用性强:本发明设计的sm4白盒算法和标准的sm4算法拥有相同的密文输出格式,故任何经过标准sm4加密后的数据可以直接使用本发明所设计的sm4白盒算法进行解密,或任何经过本发明所设计的sm4白盒算法进行加密后的数据可以直接使用标准sm4算法进行解密。
附图说明
图1为第i+1轮计算的实现加解密过程简略图,i=0,…,35。
具体实施方式
本发明的设计构思是:将算法的每一轮分为三层,每一层利用输入或者输出变换进行混淆,层与层之间的输入输出变换部分抵消,含有密钥的那一层运算通过查找表来实现,密钥不显式的出现在算法中,且无法通过分析中间数据获取密钥。为了保证算法的输出为标准密文格式,同时保护算法初始轮和末轮密钥的安全性,我们在第一轮加入混淆矩阵p。然而,由于s盒非线性变换在经过异或、移位等线性操作之后将无法恢复,故在该矩阵经过s盒之前一定要将其先抵消,经过s盒之后再加入。
本发明包括如下步骤:
步骤一:产生一组128bit的字符串作为根密钥。
优选的,采用随机数发生器产生一组128bit的字符串作为根密钥key。可以将用户或者设备信息进行处理,作为随机数生成的种子。
步骤二:将128bit的根密钥按照标准sm4密钥扩展算法扩展为32个32bit的轮密钥,设为rk0,rk1,...,rk31,分别用于第1轮到第32轮的计算,第33、34、35、36轮计算的密钥分别为r28,r29,r30,r31。
原始sm4算法共包含32轮,本发明共包含36轮,第33轮到36轮的作用是保证白盒sm4算法的密文输出和标准sm4算法密文输出相同,第33轮到36轮使用的密钥和原始sm4算法的第29轮到第32轮相同。
设原始sm4算法的轮密钥为r0,r1,...,r31,明文为(x′0,x′1,x′2,x′3)
,原始sm4算法每一轮的输出分别为(x′4,x′5,...,x35′),满足:
其中l为非线性变换
后输出的密文为y=(x′35,x′34,x′33,x32′)。
本发明的sm4白盒算法中,将密钥隐藏在s盒中生成t盒,t盒的定义如下:
其中x为32bit。
步骤三:随机生成420个8×8的可逆矩阵,分别记为mi,i=1,...,420。步骤四:定义四类矩阵,分别为p、ei、qj、rk。令:
p=diag(p11,p12,p13,p14),
ei=diag(ei1,ei2,ei3,ei4),(i=1、2、3......36);
qj=diag(qj1,qj2,qj3,qj4),(j=1、2、3......36);
rk=diag(rk1,rk2,rk3,rk4),(k=1、2、3......32);
其中p11=m1,p12=m2,p13=m3,p14=m4,eil=m4(i+1)+l,qj1=m4(j+37)+l,rkl=m4(k+73)+k,i=1,...,36,j=1,...,36,k=1,...,32,l=1,...,4;
步骤五:产生复合线性变化ai,j,i=1,...,36,j=1,2,3。
步骤六:构造第一个查找表,具体方法为:
步骤6.1:设在第i轮计算中,第一个查找表的输入为
yi=(yi1,yi2,yi3,yi4)t。
第一个查找表的构建方法如下:
首先,yi经过线性变换
其中
步骤6.2:设
步骤6.3计算qi*p*l*(zi1,zi2,zi3,zi4)t。
记hi=qipl=(hi1hi2hi3hi4),hij为32*8的矩阵,则:
据上,可获得4个8bit到32bit的查找表:yij(→zij)→vij,j=1,2,3,4。
第一个查找表
hi=qipl=(hi1hi2hi3hi4),hij为32*8的矩阵,i=1,...36,j=1,...,4。
步骤7.1:计算rip(si)和
rip(si)=(ri,1p1,1si,1,ri,2p1,2si,2,ri,3p1,3si,3,ri,4p1,4si,4);
步骤7.2:计算
对于第5轮到第32轮,第二个查找表的构建方法如下:
步骤7.1:计算
步骤7.2:计算
对于第33轮到第36轮,第二个查找表的构建方法如下:
步骤7.1:计算
步骤7.2:计算
据上,得到第二个查找表的构造为
步骤八:设明文输入为(x0,x1,x2,x3),经过36轮运算,最后输出的密文为(x39,x38,x37,x36),每一轮根据已经建立的复合线性变化ai,j,第一个查找表及第二个查找表按如下步骤进行加密运算:
设第i轮的输入为(xi-1,xi,xi+1,xi+2),其中xi-1,xi,xi+1,xi+2都为32bit。
步骤8.1:利用复合线性变换ai,1,ai,2,ai,3分别左乘xi,xi+1,xi+2,然后将结果进行异或,即:
步骤8.2:计算yi=(yi1,yi2,yi3,yi4)t经过查找表一变换后的结果,即:
步骤8.3:计算si=xi-1=(si1,si2,si3,si4)t和ti=(ti1,ti2,ti3,ti4)t经过查找表二变换后的结果,即:
经过上述3步变换后,第i轮的输出为
xi+3=(xi+3,1,xi+3,2,xi+3,3,xi+4,4)。
为了方便对上述算法的进一步理解,下面结合图1对本发明的算法构建进行描述:
将算法的每一轮分为三步,第一步为两个线性变换的复合运算,第二、三步都为查找表运算。每一轮算法结构包含两个虚线框,虚线框中的运算以表的方式进行存储。第一个虚线框需要4个8入32出的查找表,第二个虚线框需要4个16入8出的表。
第一层的线性变换、第二层的查找表、及第三层的查找表的构造方式如前所述。算法每一轮的步骤如下:
对于第i+1轮的输入xi,xi+1,xi+2,xi+3,首先将(xi+1,xi+2,xi+3)经过线性变换ai+1,1,ai+1,2,ai+1,3的作用并求和后计算出第一步运算结果yi=(yi1,yi2,yi3,yi4),然后将yi通过查找表一
将明文(x0,x1,x2,x3)按上面的步骤经过36轮变换为密文
(x39,x38,x37,x36)。
算法每一轮的第一步存储3个32*32的可逆矩阵,第二步存储4个8bit到32bit的查找表,第三步存储4个16bit到8bit查找表,每一步需要的存储空间为:
3×32×32+4×28×32+4×216×8bit=260.375kb,整个sm4白盒算法需要的存储空间为36×260.375kb≈9.15m。