1. 算法概述
ZUC(祖冲之密码算法)是我国发布的商用密码算法中的序列密码算法。可用于数据保密性保护、完整性保护等。
ZUC算法密钥长度为128比特,由128比特种子密钥和128比特初始向量共同作用产生32比特位宽的密钥流。
ZUC算法标准包括三个部分,相对应的国家和密码行业标准分别为GB/T 33133.1-2016《信息安全技术 祖冲之序列密码算法 第1部分:算法描述》、GM/T 0001.2-2012《祖冲之序列密码算法 第2部分:基于祖冲之算法的机密性算法》、GM/T 0001.3-2012《祖冲之序列密码算法 第3部分:基于祖冲之算法的完整性算法》。
ZUC256版本算法采用256比特密钥与184比特的初始向量,可产生32/64/128比特三种不同长度的认证标签。目前暂未发布。
1)ZUC算法的结构
ZUC算法由线性反馈移位寄存器(LFSR)、比特重组(BR)、非线性函数F三个基本部分组成,如图所示。
ZUC算法结构在逻辑上分为上、中、下三层,其中上层是16级LFSR,中间层是BR,下层是非线性函数F。
上层:LFSR以一个有限域GF(231-1)上的16次本原多项式为连接多项式,输出具有良好的随机统计特性。LFSR的输出作为中层BR的输入。
中间层:BR从LFSR的状态中取出128比特,拼成4个字(X0,X1,X2,X3),供下层的非线性函数F和输出密钥序列使用。BR实现LFSR数据单元到非线性函数F和密钥输出的数据转换,其主要目的是破坏LFSR在素域GF(231-1)上的线性结构。结合下层的非线性函数F,BR可使得一些在素域GF(231-1)上的密码攻击方法变得非常困难。
下层:非线性函数F从中层的BR接收3个字(X0,X1,X2)作为输入,经过内部的异或、循环移位和模232加法运算,以及两个非线性S盒变换,最后输出一个32比特W。
最后,非线性函数F输出的W与BR输出的X3异或,形成ZUC算法的输出密钥字序列Z。
2)ZUC算法的使用
在生成密钥流时,ZUC算法采用128比特的初始密钥和128比特的IV作为输入参数,共同决定LFSR里寄存器的初始状态。随着电路时钟的变化,LFSR的状态被比特重组之后输入非线性函数F,每一拍时钟输出一个32比特的密钥流Z。随后,密钥流与明文按位异或生成密文。
3)基于ZUC的两种算法
基于ZUC的两种算法包括机密性算法128-EEA3和完整性算法128-EIA3。
---------------记录个人学习ZUC算法的笔记----------------------