带妹妹学密码系列4---流密码(ZUC)

带妹妹学密码系列4—ZUC祖冲之算法

基本介绍

序列密码也称为流密码((Stream Cipher),是对称密码算法的一种,也是密码学的一个重要分支。序列密码诞生较早,而且具有实现简单、便于硬件实施、效率高等特点,因此获得了广泛应用,并且在专用机构或机密机构中具有明显优势,序列密码在许多重要应用领域已成为主流密码。
设计原理:采用一个短的种子密钥来控制某种算法获取长的密钥序列的办法用以提高加解密,这个种子的长度较短,存储,分配都比较容易。
在实际使用中,密码设计者往往希望设计出一个滚动密钥生成器,使得密钥经其扩展成的密钥流序列具有如下性质:极大的周期、良好的统计特性、抗线性分析和抗统计分析。
带妹妹学密码系列4---流密码(ZUC)_第1张图片
分组密码与序列密码的区别有无记忆性。(分组密码有,序列无)。

ZUC

祖冲之序列密码算法(简称ZUC 算法)是由我国自主设计的密码算法,包括祖冲之算法、加密算法128-EEA3和完整性算法128-EIA3。2004年3GPP (The 3rd Generation Partner Project)启动LTE(Long Term Evolution)计划,2010年底LTE被指定为第四代移动通信标准,简称4G通信标准。安全是LTE的关键技术,并预留密码算法的接口。2011年,我国推荐ZUC算法的128-EEA3加密算法和128-EIA3完整性算法成为3GPPLTE 保密性和完整性算法标准,即第四代移动通信加密标准,这是第一个成为国际标准的我国自主研制的密码算法,对我国电子信息产业具有非常重要的意义。2012年,ZUC 算法被发布为国家密码行业标准,2016年被发布为国家标准。

算法结构

ZUC 算法是一种面向字的序列密码,该算法以一个 128位的密钥和一个128位的初始变量作为输入,一串 32位字的密钥序列作为输出,输出的密钥序列可以用来加密或解密。ZUC 算法的总体结构如下图所示,由一个顶层的16段的LFSR、中间层比特重组(简称BR)和底层非线性函数F组成。
带妹妹学密码系列4---流密码(ZUC)_第2张图片
初始化阶段:算法运行但不产出
首先把128bit的密钥k和初始变量IV加载到LFSR中,两个32位R1,R2全部清零,然后执行32轮下列操作。
(1):按上诉内容将密钥、初始变量以及常数加载到LFSR各单元中;
(2):初始化记忆单位位R1=R2=0
(3):for i=0 to 31 do
-Bitreorganization();
-Z=F(X0 , X1, X2);
-LFSRWithInitialishtionMode(Z>>1)。
其中,>>表示32比特字右循环移位。
工作阶段:每个时钟脉冲会产生一个32位字的输出。
初始化阶段后,算法进行工作阶段。算法执行一次下面操作,并丢弃函数F的输出W.
(1)Bitreorganization();
(2)F(X0 , X1, X2); //本次执行,F丢弃输出
(3)LFSRWithInitialishtionMode
接着算法进行产生密钥流阶段,也就是说,将下面的操作运行一次会输出一个32位的字Z:
KeystreanmGeneration()
(1) Bitreorganization();
(2) Z = F ( X 0 , X 1 , X 2 ) ⊕ X 3 Z=F(X0 , X1, X2)\oplus X3 Z=F(X0,X1,X2)X3
(3)LFSRWithInitialishtionMode()
输出的32位密钥序列Z可以用来对信息初始变量和完整性认证

算法描述

ZUC 算法结构分为上、中、下三层,分别为LFSR、BR、非线性函数F。
1、LSRF初始化模块LFSRWithInitialishtionMode()
LFSR包括16个31位寄存器单元变量s0,s1,s2,…,s15,有初始化模式和工作模式。
(1)初始化模式。
在初始化模式下,LFSR接收一个31位的输入字u,而u是通过去掉非线性函数F输出的32位字w的最右边的位获得的。也就是u=w>>1,即循环右移1位。初始化模式详细步骤如下。
带妹妹学密码系列4---流密码(ZUC)_第3张图片
(2)工作模式
在此模式下,LFSR 不再接收任何输入,其工作如下。
带妹妹学密码系列4---流密码(ZUC)_第4张图片
2,比特重组模块 Bitreorganization()
Bitreorganization表示为BR层,该层从LFSR 特定的8个单元中抽取128位,形成4个32位的字,这里的前3个字会在底层的非线性函数F中使用,最后一个字将涉及产生密钥流,以供下层非线性函数F和密钥输出使用。假设s0,s2,s5,s7,s9,s11,s14,s15是 LFSR里的特定8个单元,比特重组模块按如下方式形成4个32位的字X0,X1,X2,X3,详细步骤如下。
带妹妹学密码系列4---流密码(ZUC)_第5张图片
3、非线性函数F
W=F(X0 , X1, X2)为非线性函数,非线性函数F包括两个32位的记忆单元R1和R2,。F的输入为X0,X1和X2来自比特重组的输出,然后F输出一个32位的字W,函数F的具体过程如下:
带妹妹学密码系列4---流密码(ZUC)_第6张图片
其中,“田”为模2^32的加法,S表示32x32位的S盒;L1,L2是线性变换。
S盒由4个并列的8x8的S盒组成,共32x32,即S=(S0,S1,S2,S3),这里S0=S2,S1=S3。
L1,L2是32位到32位的线性变换,其定义为在这里插入图片描述

你可能感兴趣的:(密码学,密码学,ZUC,流密码)