(完整word版)祖冲之序列密码算法(ZUC算法)
- 格式:doc
- 大小:136.90 KB
- 文档页数:25
实用文档之"祖冲之序列密码算法"第1部分:算法描述1范围本部分描述了祖冲之序列密码算法,可用于指导祖冲之算法相关产品的研制、检测和使用。
2术语和约定以下术语和约定适用于本部分。
2.1比特bit二进制字符0和1称之为比特。
2.2字节byte由8个比特组成的比特串称之为字节。
2.3字word由2个以上(包含2个)比特组成的比特串称之为字。
本部分主要使用31比特字和32比特字。
2.4字表示word representation本部分字默认采用十进制表示。
当字采用其它进制表示时,总是在字的表示之前或之后添加指示符。
例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示。
2.5高低位顺序bit ordering本部分规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边。
3符号和缩略语3.1运算符+ 算术加法运算mod 整数取余运算⨁按比特位逐位异或运算⊞模232加法运算‖字符串连接符∙H取字的最高16比特∙L取字的最低16比特<<<k 32比特字左循环移k位>>k 32比特字右移k位a b向量a赋值给向量b,即按分量逐分量赋值3.2符号下列符号适用于本部分:s0,s1,s2,…,s15 线性反馈移位寄存器的16个31比特寄存器单元变量X0,X1,X2,X3比特重组输出的4个32比特字R1, R2非线性函数F的2个32比特记忆单元变量W非线性函数F输出的32比特字Z 算法每拍输出的32比特密钥字k初始种子密钥iv 初始向量D 用于算法初始化的字符串常量3.3缩略语下列缩略语适用于本部分:ZUC 祖冲之序列密码算法或祖冲之算法LFSR 线性反馈移位寄存器BR 比特重组F 非线性函数4算法描述4.1算法整体结构祖冲之算法逻辑上分为上中下三层,见图1。
上层是16级线性反馈移位寄存器(LFSR);中层是比特重组(BR);下层是非线性函数F。
我国在zuc序列密码算法
ZUC(祖冲之)序列密码算法是我国自主研发的一种序列密码算法,该算法主要用于数据的机密性和完整性保护,是实现网络空间安全的基础算法和核心技术。
ZUC算法已成为国际标准ISO/IEC 29189:2017,标志着我国在密码算法领域取得了重要突破。
ZUC算法主要由LFSR(线性反馈移位寄存器)、BR(比特重组)和F (非线性函数)三部分组成。
输入为128位长的密钥和128位长的初始化向量,输出为(n, n),其中n为节拍数(轮数)。
在ZUC算法的实现过程中,首先进行初始化阶段,然后进行多轮迭代,每轮迭代包括以下步骤:
1. 线性反馈移位寄存器(LFSR)操作:根据初始化向量和密钥进行LFSR操作,生成新的状态。
2. 比特重组(BR)操作:将LFSR生成的状态进行比特重组,得到新的数据。
3. 非线性函数(F)操作:将BR操作得到的新数据作为输入,经过非线性函数F处理,生成输出。
4. 输出:经过一定的轮数迭代后,ZUC算法输出一系列32位长的字串,用于加密和解密数据。
ZUC算法在我国商用密码体系中具有重要地位,广泛应用于移动通信、物联网、安全认证等领域。
其成为国际标准,不仅提升了我国在全球密码算法领域的地位,也为全球网络安全提供了更为可靠的技术保障。
ZUC算法原理及实现过程ZUC(ZUC算法)是一种具有高安全性和高效率的流密码算法,被广泛应用于移动通信网络中,特别是3G和4G的LTE(Long Term Evolution)网络中。
本文将详细介绍ZUC算法的原理以及其实现过程。
一、ZUC算法原理1.关键算法2.非线性函数F非线性函数F是ZUC算法的核心部分,用于生成密钥流中的随机性。
它由4个环形移位寄存器、非线性函数和线性反馈位移寄存器组成。
非线性函数F的定义如下:F(ak, bk, ck) = (ak & bk) ^ ck其中ak,bk,ck是寄存器中的三个比特位。
3.移位寄存器移位寄存器是ZUC算法中用于保存密钥流状态的关键结构。
它由两个16位寄存器和两个5位寄存器组成。
每次生成一个比特的密钥流时,寄存器中的比特位都会按照一定的规则进行位移。
4.密钥扩展算法密钥扩展算法是为了生成ZUC算法中使用的一组初始密钥值。
在密钥扩展算法中,会对输入的64位密钥进行多次迭代以产生一组256位的初始密钥值。
5.密钥序列生成算法密钥序列生成算法用于生成流密码的密钥流。
该算法接受初始密钥以及明文矢量和序列号作为输入,并通过使用非线性函数F和移位寄存器产生密钥流。
二、ZUC算法实现过程1.密钥扩展首先,将输入的64位密钥进行迭代,产生一组256位的扩展密钥。
具体过程如下:1)将初始密钥分为两个32位的部分D1和D22)将D1与D2分别异或4个轮密钥W1,W2,W3,W43)每一轮的密钥Wn由Wn-1和Wn-2进行一系列位运算得到。
2.密钥序列生成生成密钥序列是ZUC算法的核心步骤,其过程如下:1)根据输入的初始密钥和序列号,生成初始状态寄存器LFSR1和LFSR2的比特位。
2)通过一系列的寄存器移位和异或运算,依次获取每一位的密钥流。
3.加密加密是ZUC算法的最后一步,其过程如下:1)将明文划分成32位的分组。
2)使用密钥序列生成算法生成相应的密钥流。
祖冲之序列密码算法
冯秀涛
【期刊名称】《信息安全研究》
【年(卷),期】2016(002)011
【摘要】祖冲之算法,简称ZUC,是一个面向字设计的序列密码算法,其在128b种子密钥和128b初始向量控制下输出32b的密钥字流.祖冲之算法于2011年9月被3GPP LTE采纳为国际加密标准(标准号为TS 35.221),即第4代移动通信加密标准,2012年3月被发布为国家密码行业标准(标准号为GM/T 0001-2012),2016年10月被发布为国家标准(标准号为GB/T 33133-2016).简单介绍了祖冲之算法,并总结了其设计思想和国内外对该算法安全性分析的主要进展.
【总页数】14页(P1028-1041)
【作者】冯秀涛
【作者单位】中国科学院数学与系统科学研究院北京 100190
【正文语种】中文
【中图分类】TP309
【相关文献】
1.祖冲之密码算法纳入ISO标准研究 [J], 王鹏;刘丽敏
2.基于FPGA的祖冲之序列密码算法实现 [J], 郁宁亚;朱宇霞
3.祖冲之序列密码算法IP核的设计与实现 [J], 江丽娜;高能;马原;刘宗斌
4.祖冲之序列密码算法 [J], 冯秀涛;
5.基于AHB-Lite总线的祖冲之密码算法IP核研究 [J], 刘政林;张振华;陈飞;邹雪城
因版权原因,仅展示原文概要,查看原文内容请购买。
ZUC 算法原理及实现过程1.1 算法设计背景ZUC 算法,即祖冲之算法,是3GPP 机密性算法EEA3和完整性算法EIA3的核心,为中国自主设计的流密码算法。
2009年5月ZUC 算法获得3GPP 安全算法组SA 立项,正式申请参加3GPPLTE 第三套机密性和完整性算法标准的竞选工作。
历时两年多的时间,ZUC 算法经过评估,于2011年9月正式被3GPPSA 全会通过,成为3GPPLTE 第三套加密标准核心算法。
ZUC 算法是中国第一个成为国际密码标准的密码算法。
1.2 算法原理ZUC 是一个面向字的流密码。
它采用128位的初始密钥作为输入和一个128位的初始向量(IV ),并输出关于字的密钥流(从而每32位被称为一个密钥字)。
密钥流可用于对信息进行加密/解密。
ZUC 的执行分为两个阶段:初始化阶段和工作阶段。
在第一阶段,密钥和初始向量进行初始化,即不产生输出。
第二个阶段是工作阶段,在这个阶段,每一个时钟脉冲产生一个32比特的密钥输出。
(1)运算符说明mod整数模 ⊕整数比特异或 a b 字符串a 和b 的连接H aa 二进制表示的最左16位值 L aa 二进制表示的最右16位值 n a k <<< a 向左k 比特的循环移位1a >>a 向右1比特的移位 ()()1212,,,,,,n n a a ab b b → i a 值分配到对应i b 的值(2)算法结构ZUC 有三个逻辑层,见下图。
顶层为一个线性反馈移位寄存器(LFSR )的16个赛段,中间层是比特重组(BR ),最下层为一个非线性函数F 。
图1 ZUC 的整体结构图(3) 线性移位反馈寄存器(LFSR )LFSR 具有16个31比特的单元()0115,,,s s s ,每个单元()015i s i ≤≤取值均在下面的集合中:{}311,2,3,21-LFSR 有两种模式的操作,即初始化模式和工作模式。
祖冲之序列密码算法第1部分:算法描述1范围本部分描述了祖冲之序列密码算法,可用于指导祖冲之算法相关产品的研制、检测和使用。
2术语和约定以下术语和约定适用于本部分。
2.1比特bit二进制字符0和1称之为比特。
2.2字节byte由8个比特组成的比特串称之为字节。
2.3字word由2个以上(包含2个)比特组成的比特串称之为字。
本部分主要使用31比特字和32比特字。
2.4字表示word representation本部分字默认采用十进制表示。
当字采用其它进制表示时,总是在字的表示之前或之后添加指示符。
例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示。
2.5高低位顺序bit ordering本部分规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边。
3符号和缩略语3.1运算符+ 算术加法运算mod 整数取余运算⨁按比特位逐位异或运算⊞模232加法运算‖字符串连接符∙H取字的最高16比特∙L取字的最低16比特<<<k 32比特字左循环移k位>>k 32比特字右移k位a b向量a赋值给向量b,即按分量逐分量赋值3.2符号下列符号适用于本部分:s0,s1,s2,…,s15线性反馈移位寄存器的16个31比特寄存器单元变量X0,X1,X2,X3比特重组输出的4个32比特字R1, R2非线性函数F的2个32比特记忆单元变量W非线性函数F输出的32比特字Z算法每拍输出的32比特密钥字k初始种子密钥iv初始向量D用于算法初始化的字符串常量3.3缩略语下列缩略语适用于本部分:ZUC 祖冲之序列密码算法或祖冲之算法LFSR 线性反馈移位寄存器BR 比特重组F 非线性函数4算法描述4.1算法整体结构祖冲之算法逻辑上分为上中下三层,见图1。
上层是16级线性反馈移位寄存器(LFSR);中层是比特重组(BR);下层是非线性函数F。
图 1 祖冲之算法结构图4.2线性反馈移位寄存器LFSR4.2.1 概述LFSR包括16个31比特寄存器单元变量s0, s1, …, s15。
ZUC算法介绍摘要:ZUC算法是一种流密码算法,中文称作祖冲之算法,其以中国古代著名数学家祖冲之的拼音(ZU Chongzhi)首字母命名。
是移动通信 3GPP加密算法128-EEA3和完整性算法128-EIA3的核心,也是中国自主设计的加密算法。
本文介绍了ZUC算法及其结构、原理以及安全性。
关键词:ZUC,流密码,加密算法,安全性2009年5月,ZUC算法获得了3GPP安全算法组SA立项,正式申请参加3GPP-LTE第三套机密性和完整性算法标准的竞选工作[1]。
经历了两年多的时间,ZUC 算法经3个阶段的安全评估工作后,于2011年9月正式被通过,成为第三套3GPP-LTE加密标准核心算法。
ZUC算法设计具有高安全、高效率以及新颖性等特点。
由3个基本部分组成:1、线性反馈移位寄存器(LFSR);2、比特重组;3、非线性函数NLF。
ZUC算法在逻辑上采用三层结构设计。
上层为定义在素域GF(231- 1)上的线性反馈移位寄存器(LFSR)[2]。
中间层为比特重组。
比特重组采用取半合并技术,实现LFSR数据单元到非线性函数F和密钥输出的数据转换,其主要目的是破坏LFSR在素域上GF(231 - 1)上的线性结构。
下层为非线性函数NLF。
在非线性函数NLF的设计上,算法设计充分借鉴了分组密码的设计技巧,采用S盒和高扩散特性的线性变换L,非线性函数NLF具有高的抵抗区分分析、快速相关攻击和猜测确定攻击等方法的能力。
图1 ZUC算法结构ZUC是一种面向字的流密码。
其内部架构由分别对应于LFSR,BR(比特重组)和NLF (非线性函数)的三层组成。
LFSR层由每个31位(S0,S1,...,S15)的16级寄存器形成。
BR层由LFSR层的8个级寄存器(S15,S14,S11,S9,S7,S5,S2,S0)填充的四个32位寄存器(X0,X1,X2,X3)形成。
除了两个各自为31位的内部寄存器(R1,R2)之外,BR输出还用作NLF层的输入[3]。
Z U C 算法原理及实现过程1.1算法设计背景ZUC 算法,即祖冲之算法,是3GPP 机密性算法EEA3和完整性算法EIA3的核心,为中国自主设计的流密码算法。
2009年5月ZUC 算法获得3GPP 安全算法组SA 立项,正式申请参加3GPPLTE 第三套机密性和完整性算法标准的竞选工作。
历时两年多的时间,ZUC 算法经过评估,于2011年9月正式被3GPPSA 全会通过,成为3GPPLTE 第三套加密标准核心算法。
ZUC 算法是中国第一个成为国际密码标准的密码算法。
1.2算法原理ZUC 是一个面向字的流密码。
它采用128位的初始密钥作为输入和一个128位的初始向量(IV ),并输出关于字的密钥流(从而每32位被称为一个密钥字)。
密钥流可用于对信息进行加密/解密。
ZUC 的执行分为两个阶段:初始化阶段和工作阶段。
在第一阶段,密钥和初始向量进行初始化,即不产生输出。
第二个阶段是工作阶段,在这个阶段,每一个时钟脉冲产生一个32比特的密钥输出。
(1)运算符说明mod整数模 ⊕整数比特异或 a b 字符串a 和b 的连接 H aa 二进制表示的最左16位值 L aa 二进制表示的最右16位值 n a k <<<a 向左k 比特的循环移位 1a >> a 向右1比特的移位()()1212,,,,,,n n a a a b b b →i a 值分配到对应i b 的值(2)算法结构ZUC 有三个逻辑层,见下图。
顶层为一个线性反馈移位寄存器(LFSR )的16个赛段,中间层是比特重组(BR ),最下层为一个非线性函数F 。
图1ZUC 的整体结构图(3)线性移位反馈寄存器(LFSR )LFSR 具有16个31比特的单元()0115,,,s s s ,每个单元()015i s i ≤≤取值均在下面的集合中: LFSR 有两种模式的操作,即初始化模式和工作模式。
在初始化模式中,LFSR 接收一个31比特的输入u ,u 是删除非线性函数F 的32位输出W 最右边的位得到的。
zuc 序列密码算法
ZUC序列密码算法是一种基于序列密码原理的加密算法。
这种算法将明文分成长度相等的序列,然后对这些序列进行加密。
它使用一组伪随机序列对明文进行加密,这些序列是由一系列随机数生成器生成的。
在加密过程中,每个序列都会与明文序列进行异或操作,从而得到密文。
由于每个序列都是随机生成的,因此密文具有较高的安全性和复杂性。
ZUC算法是我国学者自主设计的加密和完整性算法,属于同步序列密码。
2011年,ZUC算法被批准成为新一代宽带无线移动通信系统(LTE)国际标准,即4G的国际标准。
ZUC算法在逻辑上分为上中下三层,上层是16级线性反馈移位寄存器(LFSR),中层是比特重组(BR),下层是非线性函数F。
输出为素域GF上的m序列,具有良好的随机性。
如需更多信息,建议咨询密码学专家或查阅相关文献资料。
祖冲之序列密码算法第1部分:算法描述1范围本部分描述了祖冲之序列密码算法,可用于指导祖冲之算法相关产品的研制、检测和使用。
2术语和约定以下术语和约定适用于本部分。
2.1比特bit二进制字符0和1称之为比特.2.2字节byte由8个比特组成的比特串称之为字节。
2.3字word由2个以上(包含2个)比特组成的比特串称之为字。
本部分主要使用31比特字和32比特字。
2.4字表示word representation本部分字默认采用十进制表示。
当字采用其它进制表示时,总是在字的表示之前或之后添加指示符。
例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示.2.5高低位顺序bit ordering本部分规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边.3符号和缩略语3.1运算符+ 算术加法运算mod 整数取余运算⨁按比特位逐位异或运算⊞模232加法运算‖字符串连接符∙H取字的最高16比特∙L取字的最低16比特<〈〈k 32比特字左循环移k位>>k 32比特字右移k位a b向量a赋值给向量b,即按分量逐分量赋值3.2符号下列符号适用于本部分:s0,s1,s2,…,s15 线性反馈移位寄存器的16个31比特寄存器单元变量X0,X1,X2,X3比特重组输出的4个32比特字R1,R2非线性函数F的2个32比特记忆单元变量W非线性函数F输出的32比特字Z 算法每拍输出的32比特密钥字k初始种子密钥iv 初始向量D 用于算法初始化的字符串常量3.3缩略语下列缩略语适用于本部分:ZUC 祖冲之序列密码算法或祖冲之算法LFSR 线性反馈移位寄存器BR 比特重组F 非线性函数4算法描述4.1算法整体结构祖冲之算法逻辑上分为上中下三层,见图1。
上层是16级线性反馈移位寄存器(LFSR);中层是比特重组(BR);下层是非线性函数F.图错误!未定义书签。
祖冲之算法结构图4.2线性反馈移位寄存器LFSR4.2。
祖冲之密码算法祖冲之密码算法由中国科学院等单位研制,名字源于我国古代数学家祖冲之,它包括加密算法128-EEA3和完整性保护算法128-EIA3。
祖冲之密码算法(ZUC)的名字源于我国古代数学家祖冲之,祖冲之算法集是由我国学者自主设计的加密和完整性算法,是一种流密码。
它是两个新的LTE算法的核心,这两个LTE算法分别是加密算法128-EEA3和完整性算法128-EIA3。
ZUC算法由3个基本部分组成,依次为:1、比特重组;2、非线性函数F;3、线性反馈移位寄存器(LFSR)。
3GPP Confidentiality and Integrity Algorithms 128-EEA3 & 128-EIA3July 2011: ** NEW ** Prospective FINAL VERSIONS of the Algorithms 128-EEA3 & 128-EIA3 are now available for download. The algorithms themselves are identical to the ones published in January 2011, although some text in the documents has changed slightly. The documents have been submitted to the 3GPP Security Group, which will decide whether they can be recommended for inclusion in the LTE standards. The documents have not yet been through final 3GPP approval, hence they are still preliminary draft algorithm specifications, provided for evaluation purposes only, and potentially subject to change.January 2011: ** NEW ** REVISED VERSIONS of the Algorithms 128-EEA3 & 128-EIA3 are available for download prior to approval and publication of a final version by 3GPP. These revised versions were published in January 2011. They are still preliminary draft algorithm specifications, provided for evaluation purposes only, and subject to change.Individuals or companies intending to implement and/or use the 128-EEA3 & 128-EIA3 Algorithms will be required to sign appropriate usage undertakings with an appointed custodian, such as the GSM Association. Commercial implementors of the algorithms will need to demonstrate that they satisfy approval criteria yet to be specified and formal permission to use the algorithms will need to be obtained by way of signing appropriate usage undertakings and intellectual property agreements and paying any relevant administrative charges. These arrangements will be published by the GSM Association in due course.The draft specifications are as follows:Please note, that by obtaining or distributing this algorithm you may also be bound by laws in your own country about cryptographic algorithms. It is your responsibility to conform to all these restrictions.。
zuc算法中使用到的运算ZUC算法是一种常用于无线通信系统中的流密码算法,它主要利用了一系列复杂的运算来生成密钥序列。
本文将介绍ZUC算法中使用到的运算,并对其进行详细解释。
一、置换运算(Substitution)置换运算是ZUC算法中的基础运算之一,它通过将输入的数据按照预定的规则重新排列,生成一个新的数据序列。
ZUC算法使用了两种不同的置换运算:线性置换和非线性置换。
1. 线性置换(Linear Substitution)线性置换是ZUC算法中的第一个运算步骤,它通过对输入数据进行线性变换,实现对数据的混淆。
具体而言,线性置换通过对输入数据进行位运算、移位操作以及异或运算等操作,将输入数据的位置重新排列,生成一个新的数据序列。
2. 非线性置换(Nonlinear Substitution)非线性置换是ZUC算法中的第二个运算步骤,它通过利用S盒将输入数据进行非线性变换,增加密码的随机性和安全性。
S盒是一个特殊的查找表,它根据输入数据的不同值返回相应的输出值,从而实现对输入数据的替换。
二、扩展运算(Expansion)扩展运算是ZUC算法中的另一个重要运算,它通过对输入数据进行扩展,生成更长的数据序列。
具体而言,扩展运算通过利用置换运算生成的密钥序列,以及输入数据中的一部分数据,经过一系列位运算和移位操作,生成一个新的密钥序列。
这样可以增加密钥的长度,提高密码的安全性。
三、加法运算(Addition)加法运算是ZUC算法中的基本运算之一,它通过对两个输入数据进行相加操作,生成一个新的数据。
ZUC算法中的加法运算主要用于将扩展运算生成的密钥序列与输入数据进行异或运算,从而生成最终的输出数据。
四、乘法运算(Multiplication)乘法运算是ZUC算法中的另一个基本运算,它通过对两个输入数据进行相乘操作,生成一个新的数据。
ZUC算法中的乘法运算主要用于对扩展运算生成的密钥序列进行非线性变换,增加密码的随机性和安全性。
ZUC 算法原理及实现过程 1.1 算法设计背景ZUC 算法,即祖冲之算法,是3GPP 机密性算法EEA3和完整性算法EIA3的核心,为中国自主设计的流密码算法。
2009年5月ZUC 算法获得3GPP 安全算法组SA 立项,正式申请参加3GPPLTE 第三套机密性和完整性算法标准的竞选工作。
历时两年多的时间,ZUC 算法经过评估,于2011年9月正式被3GPPSA 全会通过,成为3GPPLTE 第三套加密标准核心算法。
ZUC 算法是中国第一个成为国际密码标准的密码算法。
1。
2 算法原理ZUC 是一个面向字的流密码。
它采用128位的初始密钥作为输入和一个128位的初始向量(IV ),并输出关于字的密钥流(从而每32位被称为一个密钥字)。
密钥流可用于对信息进行加密/解密。
ZUC 的执行分为两个阶段:初始化阶段和工作阶段。
在第一阶段,密钥和初始向量进行初始化,即不产生输出.第二个阶段是工作阶段,在这个阶段,每一个时钟脉冲产生一个32比特的密钥输出.(1)运算符说明mod整数模 ⊕整数比特异或 a b 字符串a 和b 的连接H aa 二进制表示的最左16位值 L aa 二进制表示的最右16位值 n a k <<<a 向左k 比特的循环移位1a >>a 向右1比特的移位()()1212,,,,,,n n a a a b b b → i a 值分配到对应i b 的值(2)算法结构ZUC 有三个逻辑层,见下图。
顶层为一个线性反馈移位寄存器(LFSR )的16个赛段,中间层是比特重组(BR ),最下层为一个非线性函数F .图1 ZUC 的整体结构图(3) 线性移位反馈寄存器(LFSR )LFSR 具有16个31比特的单元()0115,,,s s s ,每个单元()015i s i ≤≤取值均在下面的集合中:{}311,2,3,21-LFSR 有两种模式的操作,即初始化模式和工作模式.在初始化模式中,LFSR 接收一个31比特的输入u ,u 是删除非线性函数F 的32位输出W 最右边的位得到的。
祖冲之序列密码算法第1部分:算法描述1范围本部分描述了祖冲之序列密码算法,可用于指导祖冲之算法相关产品的研制、检测和使用。
2术语和约定以下术语和约定适用于本部分。
2.1比特bit二进制字符0和1称之为比特。
2.2字节byte由8个比特组成的比特串称之为字节。
2.3字word由2个以上(包含2个)比特组成的比特串称之为字。
本部分主要使用31比特字和32比特字。
2.4字表示word representation本部分字默认采用十进制表示。
当字采用其它进制表示时,总是在字的表示之前或之后添加指示符。
例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示。
2.5高低位顺序bit ordering本部分规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边。
3符号和缩略语3.1运算符+ 算术加法运算mod 整数取余运算⨁按比特位逐位异或运算⊞模232加法运算‖字符串连接符∙H取字的最高16比特∙L取字的最低16比特<<<k 32比特字左循环移k位>>k 32比特字右移k位a b向量a赋值给向量b,即按分量逐分量赋值3.2符号下列符号适用于本部分:s0,s1,s2,…,s15线性反馈移位寄存器的16个31比特寄存器单元变量X0,X1,X2,X3比特重组输出的4个32比特字R1, R2非线性函数F的2个32比特记忆单元变量W非线性函数F输出的32比特字Z算法每拍输出的32比特密钥字k初始种子密钥iv初始向量D用于算法初始化的字符串常量3.3缩略语下列缩略语适用于本部分:ZUC 祖冲之序列密码算法或祖冲之算法LFSR 线性反馈移位寄存器BR 比特重组F 非线性函数4算法描述4.1算法整体结构祖冲之算法逻辑上分为上中下三层,见图1。
上层是16级线性反馈移位寄存器(LFSR);中层是比特重组(BR);下层是非线性函数F。
图 1 祖冲之算法结构图4.2线性反馈移位寄存器LFSR4.2.1 概述LFSR包括16个31比特寄存器单元变量s0, s1, …, s15。
LFSR的运行模式有2种:初始化模式和工作模式。
4.2.2 初始化模式在初始化模式下,LFSR接收一个31比特字u。
u是由非线性函数F的32比特输出W通过舍弃最低位比特得到,即u=W >> 1。
在初始化模式下,LFSR计算过程如下:LFSRWithInitialisationMode(u){(1)v = 215s15 +217 s13 + 221s10 + 220s4 + (1 + 28)s0 mod (231-1);(2)s16=(v+u) mod (231-1);(3)如果s16=0,则置s16=231-1;(4)(s1, s2, …, s15, s16) (s0, s1, …, s14, s15)。
}4.2.3 工作模式在工作模式下,LFSR不接收任何输入。
其计算过程如下:LFSRWithWorkMode(){(1)s16 = 215 s15 +217s13 + 221 s10 + 220s4 + (1 + 28)s0 mod (231-1);(2)如果s16=0,则置s16=231-1;(3)(s1, s2, …, s15, s16) → (s0, s1, …, s14, s15)。
}4.3比特重组BR比特重组从LFSR的寄存器单元中抽取128比特组成4个32比特字X0、X1、X2、X3。
BR的具体计算过程如下:BitReconstruction(){(1)X0 = s15H‖s14L;(2)X1 = s11L‖s9H;(3)X2 = s7L‖s5H;(4)X3 = s2L‖s0H。
}4.4非线性函数FF包含2个32比特记忆单元变量R1和R2。
F的输入为3个32比特字X0、X1、X2,输出为一个32比特字W。
F的计算过程如下:F (X0, X1, X2){(1)W = (X0⊕R1) ⊞R2;(2)W1 = R1⊞X1;(3)W2 = R2⊕X2;(4)R1 = S(L1(W1L‖W2H));(5)R2 = S(L2(W2L‖W1H))。
}其中S为32比特的S盒变换,定义在附录A中给出;L1和L2为32比特线性变换,定义如下:L1(X) = X⊕ (X <<< 2) ⊕ (X <<< 10) ⊕ (X <<< 18) ⊕ (X <<< 24),L2(X) = X⊕ (X <<< 8) ⊕ (X <<< 14) ⊕ (X <<< 22) ⊕ (X <<< 30)。
4.5密钥装入密钥装入过程将128比特的初始密钥k和128比特的初始向量iv扩展为16个31比特字作为LFSR 寄存器单元变量s0, s1, …, s15的初始状态。
设k和iv分别为k0‖k1‖……‖k15和iv0‖iv 1‖……‖iv 15,其中k i和iv i均为8比特字节,0≤i≤15。
密钥装入过程如下:(1)D为240比特的常量,可按如下方式分成16个15比特的子串:D =d0‖d1‖……‖d15,其中:d0 = 1000100110101112,d1= 0100110101111002,d2 = 1100010011010112,d3 = 0010011010111102,d4= 1010111100010012,d5 = 0110101111000102,d6 = 1110001001101012,d7 = 0001001101011112,d8 = 1001101011110002,d9 = 0101111000100112,d10 = 1101011110001002,d11= 0011010111100012,d12 = 1011110001001102,d13 = 0111100010011012,d14 = 1111000100110102,d15 = 1000111101011002。
(2)对0≤i≤15,有s i = k i‖d i‖iv i。
4.6算法运行4.6.1 初始化阶段首先把128比特的初始密钥k和128比特的初始向量iv按照4.5节密钥装入方法装入到LFSR的寄存器单元变量s0, s1, …, s15中,作为LFSR的初态,并置32比特记忆单元变量R1和R2为全0。
然后执行下述操作:重复执行下述过程32次:(1)BitReconstruction();(2)W= F(X0, X1, X2);(3)LFSRWithInitialisationMode (W >> 1)。
4.6.2 工作阶段首先执行下列过程一次,并将F的输出W舍弃:(1)BitReconstruction();(2)F (X0, X1, X2);(3)LFSRWithWorkMode()。
然后进入密钥输出阶段。
在密钥输出阶段,每运行一个节拍,执行下列过程一次,并输出一个32比特的密钥字Z:(1)BitReconstruction();(2)Z = F (X0, X1, X2) X3;(3)LFSRWithWorkMode()。
附录A(规范性附录)S盒32比特S盒S由4个小的8х8的S盒并置而成,即S=(S0, S1, S2, S3),其中S0=S2,S1=S3。
S0和S1的定义分别见表1和表2。
设S0(或S1)的8比特输入为x。
将x视作两个16进制数的连接,即x=h||l,则表1 (或表2)中第h行和第l列交叉的元素即为S0(或S1)的输出S0(x)(或S1(x))。
设S盒S的32比特输入X和32比特输出Y分别为:X = x0‖ x1‖x2‖x3,Y = y0‖y1‖y2‖y3,其中x i和y i均为8比特字节,i = 0, 1, 2, 3。
则有y i = S i(x i), i = 0, 1, 2, 3。
表1 S0盒表2 S1盒01(资料性附录)模231-1乘法和模231-1加法的实现B.1 模231-1乘法两个31比特字模231-1乘法可以快速实现。
特别地,当其中一个字具有较低的汉明重量时,可以通过31比特的循环移位运算和模231-1加法运算实现。
例如,计算ab mod(231-1),其中b=2i+2j+2k。
则ab mod(231-1) = (a <<<31i) + (a <<<31j) +(a <<<31k) mod(231-1),其中<<<31表示31比特左循环移位运算。
B.2 模231-1加法在32位处理平台上,两个31比特字a和b模231-1加法运算c =a + b mod(231-1)可以通过下面的两步计算实现:1)c = a + b;2)c = (c & 0x7FFFFFFF) + (c >> 31)。
附录C(资料性附录)算法计算实例C.1 测试向量1(全0)输入:密钥k: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00初始向量iv: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 输出:z1: 27bede74z2: 018082da初始化:有限状态机内部状态:R1 = 14cfd44cR2 = 8c6de800密钥流:C.2 测试向量2(全1)输入:密钥k: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff初始向量iv: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 输出:z1: 0657cfa0z2: 7096398b初始化:线性反馈移位寄存器初态:R1 = b8017bd5R2 = 9ce2de5c密钥流:C.3 测试向量3(随机)输入:密钥k: 3d 4c 4b e9 6a 82 fd ae b5 8f 64 1d b1 7b 45 5b初始向量iv: 84 31 9a a8 de 69 15 ca 1f 6b da 6b fb d8 c7 66输出:z1: 14f1c272z2: 3279c419初始化:线性反馈移位寄存器初态:R1 = 860a7dfaR2 = bf0e0ffc密钥流:————————————参考文献[1]ETSI/SAGE TS 35.221. Specification of the 3GPP Confidentiality and Integrity Algorithms 128-EEA3 &128-EIA3. Document 1: 128-EEA3 and 128-EIA3 Specification.[2]ETSI/SAGE TS 35.222. Specification of the 3GPP Confidentiality and Integrity Algorithms 128-EEA3 &128-EIA3. Document 2: ZUC Specification.[3]ETSI/SAGE TS 35.223. Specification of the 3GPP Confidentiality and Integrity Algorithms 128-EEA3 &128-EIA3. Document 3: Implementor's Test Data.[4]ETSI/SAGE TR 35.924. Specification of the 3GPP Confidentiality and Integrity Algorithms 128-EEA3 &128-EIA3. Document 4: Design and Evaluation Report.祖冲之序列密码算法第2部分:基于祖冲之算法的机密性算法1 范围本部分描述了基于祖冲之算法的机密性算法。