本发明属于信息安全技术领域,具体涉及一种16轮sm4-256白盒密码算法方案与系统。本发明还涉及一种明文分组/密钥分组为128比特/256比特的加密算法。
背景技术:
sm4密码算法(原名sms4)是一个分组密码算法,明文分组、密钥分组、密文分组长度均为128比特,加密和解密过程基本相似。通过32次循环的非线性迭代轮函数来实现加密和解密。其中包括非线性变换s盒,以及由循环移位异或构成的线性变换。
专利文献1(公开号:cn106712930a,公开日2017月05月24日)提出了一种sm4加密方法及装置,主要原理是使用分组查表技术,对国家标准sm4中的合成置换t计算进行分解,将t中的非线性变换和线性变换压缩合并,使得加密算法中的合成置换t的计算由原先的4次查表、4次循环左移以及4次异或运算简化为4次查表和3次异或运算,提高了执行效率。
专利文献2(公开号:cn109450616a,公开日2019年03月08日)提出一种提高sm4加密算法速度的方法,主要原理是将128位密钥转换成32轮密钥,在每轮迭代过程中,先将此轮轮密钥和128比特输入进行异或再进行t置换;在t置换中,使用sm4加密算法的s盒模拟出aes算法的s盒,使得sm4加密算法使用英特尔高性能aes指令集,提高了sm4加密算法的加密性能和处理速度。
通过对上述两篇专利文献的分析,上述发明存在着不完善之处。无论是使用分组查表技术或者英特尔高性能aes指令集,都是加快了速度,而安全性没有提升,128比特的初始密钥长度和轮密钥的生成过程没有加以改进,并不足够安全可靠。而且在我们的方案设计中需考虑实际问题,在尽可能的情况下兼顾效率和安全性的平衡。为了满足各领域高标准的安全要求,应用于更多的工作环境中,增加密钥长度,加快迭代变换速度,做到安全高效、能够抵抗攻击的改进的sm4密码算法新模式是很有必要的。
技术实现要素:
针对sm4白盒算法的上述需求以及克服现有技术的不足,本发明提出了一种16轮sm4-256密码算法方案与系统,可支持明文长度/密钥长度为128比特/256比特和256比特/256比特,加密轮数为16轮时改进的sm4密码算法新模式,同时,提出了一种16轮sm4-256白盒密码算法方案与系统,是对上述算法进行白盒化。
本发明所提方案中,对标准sm4的加密算法轮函数结构进行改进,把标准sm4算法的128比特明文32轮迭代过程改进为128比特或256比特明文16轮迭代过程,每轮轮函数产生两个中间变量;同时对密钥扩展模块进行改进,输入256比特初始密钥,16轮迭代运算后输出16个轮密钥;对改进的sm4密码算法新模式进行白盒化,把改进sm4密码算法的每一轮分割成小块,对每个小块进行置乱编码,将编码后的结果用查找表和仿射变换表示,从而使得密钥信息隐藏在查找表中。
本发明的优势在于:
1.提出了一种16轮sm4-256密码算法新模式。改进算法可支持明文长度/密钥长度为128比特/256比特和256比特/256比特,对轮函数的结构即加密算法的迭代过程进行改进,使每轮轮函数产生两个中间变量,把32轮的加密过程减少至16轮。
2.提出了一种16轮sm4-256白盒密码算法方案与系统。改进的sm4密码算法新模式进行白盒化,把改进sm4密码算法的每一轮分割成小块,对每个小块进行置乱编码,将编码后的结果用查找表和仿射变换表示,从而使得密钥信息隐藏在查找表中。
3.执行效率高,占用空间小。本发明所提方案执行一次白盒加密算法需要进行64次查表,48次异或运算,104次仿射变换。在存储空间和执行速度具有较为明显的优势。
4.安全性高。增加密钥长度,提升密钥破解难度,同时对算法进行白盒化,通过计算本发明所提方案的白盒多样性、白盒含混度和分析bge攻击。
附图说明
图1是16轮sm4-256/256密码算法加密算法运算过程;
图2是16轮sm4-256/256密码算法加密轮函数运行流程图;
图3是16轮sm4-256/256密码算法密钥扩展运算过程;
图4是16轮sm4-256/256密码算法密钥扩展运行流程图;
图5是16轮sm4-256/256密码算法fk’扩展算法
图6是改进的sm4白盒密码算法整体结构;
图7是改进的sm4白盒密码算法第一部分;
图8是改进的sm4白盒密码算法第二部分;
图9是改进的sm4白盒密码算法第三部分。
具体实施方式
下面结合附图对本发明所提方案做进一步详细的说明,但不以任何方式限制本发明的范围。
本发明所提方案基于国家标准sm4密码算法进行改进。改进后的sm4密码算法密钥长度支持256比特,明文长度支持128比特和256比特,初始明文经过16次迭代运算和1次反序变换r输出密文。
以明文长度为256比特为例详述加密过程。
步骤一,如图2所示,改进的sm4密码算法新模式加密迭代运算的过程中每轮轮函数产生2个中间变量,即
其中,
(1)轮函数f中的合成置换
(2)非线性变换τ:由4个并行的s盒构成,设输入为
(3)线性变换l:非线性变换τ的输出是线性变换l的输入,设输入为
步骤二,如图1所示,在经过16轮迭代运算后,经过反序变换输出密文,即
(y0,y1,y2,y3,y4,y5,y6,y7)=r(x32,x33,x34,x35,x36,x37,x38,x39)
=(x39,x38,x37,x36,x35,x34,x33,x32)
在本发明所提方案中,依据设计原理对密钥扩展算法即轮密钥的产生过程进行了改进,依据改进的sm4密码算法新模式中加密算法有16轮迭代运算,密钥扩展算法需产生16个轮密钥参与进行加密运算;在密钥扩展算法中,每轮输入8个32比特的值,产生1个新的中间变量。轮密钥的生成步骤为:
步骤一,如图5所示,把128比特的系统参数
步骤二,计算
步骤三,如图3所示,在密钥扩展算法在迭代运算的过程中每轮轮函数产生1个中间变量,即
本发明所提方案中解密变换与加密变换的结构相同,不同的仅是轮密钥的使用顺序,加密时轮密钥的使用顺序为(rk0,rk1,...,rk15),解密时轮密钥的使用顺序为(rk15,rk30,...,rk0)。
一种16轮sm4-256白盒密码算法方案与系统是基于上述改进sm4密码算法新模式做的白盒化。改进sm4白盒密码算法是把改进sm4密码算法的每一轮分割成小块,对每个小块进行置乱编码,将编码后的结果用查找表和仿射变换表示,从而使得密钥信息隐藏在查找表中。输入256比特明文(x0,x1,x2,x3,x4,x5,x6,x7),经过外部置乱编码和16轮变换后,进行反序变换,输出256比特密文(y0,y1,y2,y3,y4,y5,y6,y7)。
如图6所示,改进的sm4白盒密码算法在第一轮之前和最后一轮之后都做了添加置乱编码。把x’=g·x·f看成x的一个置乱编码形式,其中f为输入置乱编码,g为输出置乱编码。在轮变换前后即在第一轮输入之前添加输入置乱编码,最后一轮输出之后添加输出置乱编码。其中本方案的编码均为可逆仿射变换的形式,其数学表达式为:
本发明所提改进的sm4白盒密码算法方案的每一轮被分割为三部分,其特征在于,第i轮变换输入8个32比特数值(x’2i,x’2i+1,x’2i+2,x’2i+3,x’2i+4,x’2i+5,x’2i+6,x’2i+7),输出2个32比特数值(x’2i+8,x’2i+9);本方案此过程分为三个部分。
其中,第一部分,如图7所示:计算x即
第二部分,如图8所示,对t变换做输入输出置乱编码,形成查找表,将密钥隐藏在查找表中:
其中,x=(x2i,0,x2i,1,x2i,2,x2i,3);l表示sm4算法中t变换的线性变换,为两个gf(2)上的32×32的矩阵;使用gf(2)上的8比特到8比特的可逆仿射变换ei0,ei1,ei2,ei3作为查找表的输入编码,32比特到32比特的可逆仿射变换q2i作为查找表的输出编码,这一部分32比特到32比特的变换转换为4个8比特到32比特的查找变,再将这四个结果异或即可获得本部分的输出y’;
第三部分,如图9所示:计算x’2i+8,x’2i+9。
改进的sm4白盒密码算法中第i轮输出置乱编码和第i+1轮输入置乱编码相差一个常数,这个常数随机选取,无法从查找表中获得,而经过最后一轮输出之后添加置乱编码,可选择性将这些常数抵消,使得改进的sm4白盒密码算法的输出密文与改进的sm4密码算法新模式的输出密文的相同性存在两种可能。
sm4白盒加密算法与sm4白盒解密算法的结构仍然相同,但使用的查找表不相同。