祖冲之序列密码算法ZUC算法
实用文档之祖冲之序列密码算法(ZUC算法)
实用文档之"祖冲之序列密码算法"第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算法)祖冲之序列密码算法第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⽐特<<>>k32⽐特字右移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序列密码算法
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算法在我国商用密码体系中具有重要地位,广泛应用于移动通信、物联网、安全认证等领域。
其成为国际标准,不仅提升了我国在全球密码算法领域的地位,也为全球网络安全提供了更为可靠的技术保障。
[密码学——基础理论与应用][李子臣][电子课件] 第6讲---祖冲之序列密码算法
2020\3\17 Tuesday
密码学---基础理论与应用
13
密钥和初始向量会扩展成16个长度为31位的整数, 加载到每个记忆单元si中。 在LFSR里,si=ki‖di‖IVi(0≤i≤15),其中ki和IVi长度 为8位一个字节,di长度为15位。
128位的密钥K和初始向量IV表示成16个字串级联的 形式k=k0‖k1‖K2‖…‖k15,IV=IV0‖IV1‖IV2‖…‖Iv15 ,16 个di已知字符串级联成一个240位的长字符串 D=d0‖d1‖d2‖L‖d15。
d8 1001101011110002, d9 0101111000100112, d10 1101011110001002, d11 0011010111100012, d12 1011110001001102, d13 0111100010011012, d14 1111000100110102, d15 1000111101011002.
第六章 祖冲之序列密码 (ZUC)
2020\3\17 Tuesday
密码学---基础理论与应用
1
目录
6.1 ZUC算法的概念与原理 6.2 ZUC机密性算法和完整性算法 6.3 ZUC算法的安全性分析 6.4 ZUC算法案例
2020\3\17 Tuesday
密码学---基础理论与应用
2
祖冲之序列密码算法(简称ZUC算法)是由我国自 主设计的密码算法,包括祖冲之算法、加密算法 128-EEA3和完整性算法128-EIA3。
11
接着算法进入产生密钥流阶段,也就是说,将下 面的操作运行一次就会输出一个32位的字Z:
KeystreamGeneration()
(1)Bitreorganization();
(完整word版)祖冲之序列密码算法(ZUC算法)
祖冲之序列密码算法第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序列密码算法摘要:Zuc序列密码算法是一种基于序列密码原理的加密算法。
它使用一组伪随机序列对明文进行加密,使得密文具有较高的安全性和复杂性。
本文将介绍Zuc序列密码算法的基本原理、加密过程、安全性分析以及在实际应用中的优缺点。
一、基本原理Zuc序列密码算法是一种基于序列密码原理的加密算法。
序列密码是一种将明文分成长度相等的序列,然后对这些序列进行加密的密码方法。
Zuc序列密码算法使用一组伪随机序列对明文进行加密,这些序列是由一系列随机数生成器(RNG)生成的。
在加密过程中,每个序列都会与明文序列进行异或操作,从而得到密文。
由于每个序列都是随机生成的,因此密文具有较高的安全性和复杂性。
二、加密过程1. 初始化:首先,需要生成一组随机数序列作为加密钥匙。
这些序列的长度可以与明文序列的长度相同,例如,如果明文序列的长度为100位,那么钥匙序列也应该是一长度为100位的随机数序列。
2. 加密:将明文分成长度相等的序列,然后使用钥匙序列对每个明文序列进行加密。
在加密过程中,每个明文序列都会与相应的钥匙序列进行异或操作,从而得到密文序列。
3. 输出:将加密后的密文序列输出,即可得到加密后的密文。
三、安全性分析Zuc序列密码算法的安全性主要依赖于钥匙序列的随机性和复杂性。
如果钥匙序列是足够随机和复杂的,那么密文将具有很高的安全性和复杂性。
然而,如果攻击者能够获得钥匙序列的信息,那么他将能够轻松地破解密文。
因此,保护钥匙序列的安全是Zuc序列密码算法的关键。
四、优缺点1. 优点:Zuc序列密码算法具有较高的安全性,因为密文的生成过程是基于伪随机序列的。
此外,由于每个明文序列都会与不同的钥匙序列进行加密,因此密文具有很高的复杂性。
2. 缺点:Zuc序列密码算法的加密过程相对复杂,需要生成和存储大量的钥匙序列。
此外,如果钥匙序列被攻击者获得,那么整个加密系统的安全性将受到威胁。
五、实际应用尽管Zuc序列密码算法具有一定的复杂性,但在某些情况下,它的优点使其成为了一种实用的加密方法。
salsa20和ZUC算法详细介绍及对比
1 流密码算法概述1.1 Salsa20算法 1.1.1 算法设计背景2004年ECRYPT 启动了eSTREAM 流密码计划的研究项目,Salsa20是最终胜出的7个算法之一。
Salsa20是由Daniel J.Bernstein 提出的基于hash 函数设计的流密码算法,其核心部分是一个基于32比特加、比特异或以及旋转操作的512比特输入512比特输出的hash 函数。
现有的对Salsa20攻击方法包括线性分析、差分分析、非随机性分析、相关密钥分析和滑动分析等,其中以滑动攻击尤其是偶数轮的滑动攻击方式最为有效。
在软件仿真方面,算法可以在目前的x86处理器上实现4至14cycles/byte 的加密效率;且具备尚可的硬件性能。
Salsa20没有申请专利,属于公开的应用算法,为了在多个公共领域的共同架构,Bernstein 对算法的实现优化做了进一步研究和改动。
1.1.2 算法介绍(1)运算符定义word :word 是一个32比特的二进制数,即集合{}320,1,,21-中的元素之一。
(2)异或和移位计算两个word u ,v 的异或用公式表示为:()22i i i i i i u v u v u v ⊕=+-∑设非零整数c ,{}0,1,2,3c ∈,对一个word u 的c 比特左移位表示为u c <<<,用公式表示为:mod322i c i i u c u +<<<=∑(3)quarterround 函数设()0123,,,y y y y y =,输出()()0123,,,z quarterround y z z z z ==,则()()11037z y y y =⊕+<<<()()22109z y z y =⊕+<<< ()()332113z y z z =⊕+<<< ()()003218z y z z =⊕+<<<两者关系如图所示:图1 Salsa20的quarterround 函数(4)rowround 函数 设()012315,,,,,y y y y y y =,输出()()012315,,,,,z quarterround y z z z z z ==,则:()()01230123,,,,,,z z z z quarterround y y y y = ()()56745674,,,,,,z z z z quarterround y y y y = ()()101189101189,,,,,,z z z z quarterround y y y y = ()()1512131415121314,,,,,,z z z z quarterround y y y y =若将输入()012315,,,,,y y y y y 看作是一个方阵0123456789101112131415y y y y y y y y y y y y y y y y ⎛⎫ ⎪ ⎪⎪ ⎪⎝⎭则rowround 函数将方阵的每一行重新排列后作为quarterround 函数的输入,从而并行地修改了所有行。
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 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 有两种模式的操作,即初始化模式和工作模式。
国产商用密码算法及其相关标准介绍
国产商用密码算法及其相关标准介绍作者:谢宗晓董坤祥甄杰来源:《中国质量与标准导报》2020年第06期1 概述《中华人民共和国密码法》第六条中规定:密码分为核心密码、普通密码和商用密码。
同时,在第七条和第八条中规定:核心密码、普通密码属于国家秘密,商用密码用于保护不属于国家秘密的信息。
因此,在常见应用中,商用密码得到了大面积的推广,以至于,在实践中,提到“国密”,经常就被默认为国产商用密码算法。
在现代密码系统中,密码算法、密码协议和密钥管理是三个不可或缺的部分,而在这三者之中,最为核心的毫无疑问就是密码算法。
虽然实践证明,绝大部分的安全漏洞都产生于实现和部署过程中,但是,算法的安全与否,直接决定了一个密码系统的基础是否安全。
例如,选用SHA-1、MD4、MD5、RC4和密钥长度小于2048位的RSA等不安全的算法,不可能实现安全的密码系统。
已经发布的国产商用密码算法,按照类别可以分为:1)对称密码算法,主要包括ZUC和SM4;2)非对称密码算法,主要包括SM2和SM9;3)密码杂凑算法,主要包括SM3。
2 对称密码算法对称密码(symmetric cryptography)是用相同的密钥(或方法)进行加密解密,这在逻辑上非常清晰,也最直观,有时候也被称之为共享密钥密码,对称密码算法的基本过程如图1所示。
已经发布国产商用密码算法中属于对称密码算法的有ZUC和SM4。
ZUC(祖冲之密码算法)属于序列密码,也称为“流密码”,与之类似的国外密码算法如RC41)。
ZUC对应的国家标准、行业标准,如表1所示。
SM4属于分组密码,也称为“块密码”,与之类似的国外密码算法如DES(数据加密标准),TDEA/3DES(三重数据加密标准)以及AES(高级加密标准)等。
SM4对应的国家标准、行业标准,如表2所示。
在安全性上,SM4-128与AES-128差不多,当然,AES支持更高的安全强度。
但是SM4具备一个很优良的特征,加密和解密的过程基本相同,只需要将密钥的顺序倒置即可实现,AES算法的加密算法和解密算法则不一致。
祖冲之序列密码算法(ZUC算法)
祖冲之序列密码算法第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算法介绍摘要: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]。
国密算法介绍
国密算法介绍国家商用密码算法简介密码学是研究编制密码和破译密码的技术科学,起源于隐秘消息传输,在编码和破译中逐渐发展起来。
密码学是一个综合性的技术科学,与语言学、数学、电子学、声学、信息论、计算机科学等有着广泛而密切的联系。
密码学的基本思想是对敏感消息的保护,主要包括机密性,鉴别,消息完整性和不可否认性,从而涉及加密,杂凑函数,数字签名,消息认证码等。
一.密码学简介密码学中应用最为广泛的的三类算法包括对称算法、非对称算法、杂凑算法。
1.1 对称密码对称密码学主要是分组密码和流密码及其应用。
分组密码中将明文消息进行分块加密输出密文区块,而流密码中使用密钥生成密钥流对明文消息进行加密。
世界上应用较为广泛的包括DES、3DES、AES,此外还有Serpent,Twofish,MARS和RC6等算法。
对称加密的工作模式包括电码本模式(ECB 模式),密码反馈模式(CFB 模式),密码分组链接模式(CBC 模式),输入反馈模式(OFB 模式)等。
1.2 非对称密码公钥密码体制由Diffie和Hellman所提出。
1978年Rivest,Shamir 和Adleman提出RAS密码体制,基于大素数分解问题。
基于有限域上的离散对数问题产生了ElGamal密码体制,而基于椭圆曲线上的离散对数问题产生了椭圆曲线密码密码体制。
此外出现了其他公钥密码体制,这些密码体制同样基于困难问题。
目前应用较多的包括RSA、DSA、DH、ECC等。
1.3杂凑算法杂凑算法又称hash函数,就是把任意长的输入消息串变化成固定长的输出串的一种函数。
这个输出串称为该消息的杂凑值。
一个安全的杂凑函数应该至少满足以下几个条件。
1) 输入长度是任意的;2) 输出长度是固定的,根据目前的计算技术应至少取128bits长,以便抵抗生日攻击;3) 对每一个给定的输入,计算输出即杂凑值是很容易的;4) 给定杂凑函数的描述,找到两个不同的输入消息杂凑到同一个值是计算上不可行的,或给定杂凑函数的描述和一个随机选择的消息,找到另一个与该消息不同的消息使得它们杂凑到同一个值是计算上不可行的。
ZUC算法原理及实现过程
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 最右边的位得到的。
我国的商用密码算法
我国的商用密码算法
密码算法包括对称密码算法、公钥密码算法和杂凑算法。
为了保障商用密码安全,国家密码管理部门制定了一系列密码算法标准,包括SM2、SM3、SM4、SM9、祖冲之密码算法(即“ZUC算法”)等。
其中SM2、SM9为公钥密码算法,SM3为杂凑算法,其余均为对称密码算法。
具体介绍如下:
- SM2算法基于椭圆曲线上离散对数计算困难问题,密钥长度为256比特,包括SM2加密算法和SM2数字签名算法。
- SM9是一种基于身份标识的公钥密码算法,也被称为标识密码,采用256比特的椭圆曲线。
- SM3算法摘要长度为256比特,利用了简单运算的充分多次迭代,其安全性及效率与SHA-256相当。
SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等。
- SM4为分组密码,分组长度和密钥长度为128比特。
SM4算法是SM系列算法中使用最为广泛的密码算法。
- ZUC算法是序列密码算法,采用128比特的主密钥和128比特初始向量作为输入参数。
该算法速度快,常用于移动通信4G网络。
目前,我国SM系列密码算法大多已经纳入ISO/IEC国际标准,ZUC算法已经作为国际第四代移动通信加密标准,这标志着我国密码算法国际标准体系已初步成型,为有效保障网络空间安全贡献了中国智慧,提供了中国方案。
《商用密码算法原理》第二章 祖冲之序列密码
2021/1/1
商用密码算法原理与C语言实现
27
安全性分析
➢ 在猜测过程中,猜测的位置是t=0时刻的S90 ,S50 的高8位, 共16比特;t=1时刻的S91 ,S51 的高8位,共16比特,t=2时刻 的S02 ,S52 ,S92 ,S102 ,S132 的高8位和S152的低15位,共55比 特;t=3时刻共31比特,t=4时刻共8比特。因此总共猜测
ZUC算法在初始执行过程中,需用到的参数为一个 128位的初始密钥k和128位的初始向量iv。 (1)密钥装入
初始密钥和初始向量按照如下方法装入到LFSR的寄
存器单元(s0,s1,…,s15)中,每个单si(0≤i≤15)仅在有限
域GF(232 –1)中取值。密钥装入过程将128比特的初始 密钥k和128比特的初始向量iv扩展为16个31比特加载
➢ 由此类推,在t=3 、t=4、t=5 时刻时均用此分析方法,在 t=5 时刻,由(S14,S24,…,S154,S164)→(S05,S15,…,S145,S155) 可知该时刻的已知量为S05, S15, S25, S35, S45, S55, S65, S75, S85, S95, S105, S115, S125, S135, S145, S155,此外还有 R15和R25 。因此t=5时刻的全部内部单元均已找到。之后即 可用所求内部单元生成密钥来检测与原密钥是否相同。
2021/1/1
商用密码算法原理与C语言实现
14
2021/1/1
商用密码算法原理与C语言实现
15
2021/1/1
商用密码算法原理与C语言实现
16
2021/1/1
商用密码算法原理与C语言实现
17
(3)线性变换L1和L2 L1和L2都是32位到32位的线性变换,其定义如下:
zuc、salsa20算法
1 流密码算法概述1.1 Salsa20算法 1.1.1 算法设计背景2004年ECRYPT 启动了eSTREAM 流密码计划的研究项目,Salsa20是最终胜出的7个算法之一。
Salsa20是由Daniel J.Bernstein 提出的基于hash 函数设计的流密码算法,其核心部分是一个基于32比特加、比特异或以及旋转操作的512比特输入512比特输出的hash 函数。
现有的对Salsa20攻击方法包括线性分析、差分分析、非随机性分析、相关密钥分析和滑动分析等,其中以滑动攻击尤其是偶数轮的滑动攻击方式最为有效。
在软件仿真方面,算法可以在目前的x86处理器上实现4至14cycles/byte 的加密效率;且具备尚可的硬件性能。
Salsa20没有申请专利,属于公开的应用算法,为了在多个公共领域的共同架构,Bernstein 对算法的实现优化做了进一步研究和改动。
1.1.2 算法介绍(1)运算符定义word :word 是一个32比特的二进制数,即集合{}320,1,,21- 中的元素之一。
(2)异或和移位计算两个word u ,v 的异或用公式表示为:()22i i i i i i u v u v u v ⊕=+-∑设非零整数c ,{}0,1,2,3c ∈ ,对一个word u 的c 比特左移位表示为u c <<<,用公式表示为:mod322i c i i u c u +<<<=∑(3)quarterround 函数设()0123,,,y y y y y =,输出()()0123,,,z quarterround y z z z z ==,则()()11037z y y y =⊕+<<< ()()22109z y z y =⊕+<<<()()332113z y z z =⊕+<<< ()()003218z y z z =⊕+<<<两者关系如图所示:图1 Salsa20的quarterround 函数(4)rowround 函数设()012315,,,,,y y y y y y = ,输出()()012315,,,,,z quarterround y z z z z z == ,则:()()01230123,,,,,,z z z z quarterround y y y y = ()()56745674,,,,,,z z z z quarterround y y y y = ()()101189101189,,,,,,z z z z quarterround y y y y = ()()1512131415121314,,,,,,z z z z quarterround y y y y =若将输入()012315,,,,,y y y y y 看作是一个方阵0123456789101112131415y y y y y y y y y y y y y y y y ⎛⎫ ⎪ ⎪⎪ ⎪⎝⎭则rowround 函数将方阵的每一行重新排列后作为quarterround 函数的输入,从而并行地修改了所有行。
祖冲之算法
祖冲之密码算法祖冲之密码算法由中国科学院等单位研制,名字源于我国古代数学家祖冲之,它包括加密算法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.。
国产商用对称密码算法及其相关标准介绍
国产商用对称密码算法及其相关标准介绍作者:谢宗晓董坤祥甄杰来源:《中国质量与标准导报》2021年第04期1 对称密码算法对称密码(symmetric cryptography)也称为共享密钥密码,是指用相同的密钥进行加密解密,其中的“对称”指的是加密密钥和解密密钥是相同的,或者用简单的运算就可以推导两个密钥。
对称密码算法在逻辑上非常容易理解,因此出现的比较早,有时候也叫传统密码算法,以区别于公钥密码算法。
对称密码算法有两种主要形式:序列密码(stream cipher)和分组密码(block cipher)。
已经发布国产商用密码算法中属于对称密码算法的有ZUC(祖冲之密码算法)和SM4。
其中,ZUC属于序列密码,与之类似的国外密码算法如RC41)。
SM4属于分组密码,与之类似的国外密码算法如DES(Data Encryption Standard,数据加密标准)、TDEA/3DES(Triple Data Encryption Algorithm/3DES、三重数据加密标准)以及AES(Advanced Encryption Standard,高级加密标准)等。
2 对称密码算法标准为了配合WAPI2)无线局域网标准的推广应用,国家密码管理局在2006年公布了SMS43)算法。
2012年,该算法更名为SM4,成为行业标准。
2016年上升为国家标准。
SM4对应的国家/行业标准,如表1所示。
ZUC可以保护数据的机密性和完整性等,具体见GM/T 0001.2—2012和GM/T 0001.3—2012。
值得特别指出的是,2020年4月,ZUC已经成为国际标准ISO/IEC 18033-4:2011/Amd 1:2020 Information technology—Security techniques—Encryption algorithms—Part 4: Stream ciphers—Amendment 1: ZUC《信息技术安全技术加密算法第4部分:序列算法补篇1:ZUC》。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
祖冲之序列密码算法第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 = 8c6de800C.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初始化:线性反馈移位寄存器初态:8 56130b14 20e8f24c 7a5b1dcc 0c3cc2d1 1cc082c8 7f5904a2 55b61ce8 1fe46106 有限状态机内部状态: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初始化:线性反馈移位寄存器初态:6 90385785 1ee95b8f 4dd81d35 781ffde2 59857b80 be0fbdc1 fd2ceb1e 4b7f87ed7 96ff5b9d fa9978f7 9ac7b1bc 136bae13 9528f8ea bcc7f7eb 8d89ddde 0e633ce78 1cc687ed f49f8320 ac667b78 c4dab59a c59d2932 e1098a64 46b676f2 643ae5a69 c8753ce7 5785823d 93c045f1 f16b8f5e 755ebae8 3f9e6e86 eef1a039 625ac5d7初始化后线性反馈移位寄存器状态:R1 = 860a7dfaR2 = bf0e0ffc密钥流:————————————参考文献[1]ETSI/SAGE TS 35.221. Specification of the 3GPP Confidentiality and IntegrityAlgorithms 128-EEA3 & 128-EIA3. Document 1: 128-EEA3 and 128-EIA3 Specification.[2]ETSI/SAGE TS 35.222. Specification of the 3GPP Confidentiality and IntegrityAlgorithms 128-EEA3 & 128-EIA3. Document 2: ZUC Specification.[3]ETSI/SAGE TS 35.223. Specification of the 3GPP Confidentiality and IntegrityAlgorithms 128-EEA3 & 128-EIA3. Document 3: Implementor's Test Data.[4]ETSI/SAGE TR 35.924. Specification of the 3GPP Confidentiality and IntegrityAlgorithms 128-EEA3 & 128-EIA3. Document 4: Design and Evaluation Report.祖冲之序列密码算法第2部分:基于祖冲之算法的机密性算法1 范围本部分描述了基于祖冲之算法的机密性算法。