预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共22页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

祖冲之序列密码算法 第1部分:算法描述 范围 本部分描述了祖冲之序列密码算法,可用于指导祖冲之算法相关产品得研制、检测与使用。 术语与约定 以下术语与约定适用于本部分。 比特bit 二进制字符0与1称之为比特. 字节byte 由8个比特组成得比特串称之为字节。 字word 由2个以上(包含2个)比特组成得比特串称之为字。 本部分主要使用31比特字与32比特字。 字表示wordrepresentation 本部分字默认采用十进制表示。当字采用其它进制表示时,总就是在字得表示之前或之后添加指示符。例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示。 高低位顺序bitordering 本部分规定字得最高位总就是位于字表示中得最左边,最低位总就是位于字表示中得最右边. 符号与缩略语 运算符 +算术加法运算 mod整数取余运算 ⨁按比特位逐位异或运算 ⊞模232加法运算 ‖字符串连接符 ∙H取字得最高16比特 ∙L取字得最低16比特 <<〈k32比特字左循环移k位 〉>k32比特字右移k位 ab向量a赋值给向量b,即按分量逐分量赋值 符号 下列符号适用于本部分: 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ﻩ 用于算法初始化得字符串常量 缩略语 下列缩略语适用于本部分: ZUC祖冲之序列密码算法或祖冲之算法 LFSR线性反馈移位寄存器 BR比特重组 F非线性函数 算法描述 算法整体结构 祖冲之算法逻辑上分为上中下三层,见图1.上层就是16级线性反馈移位寄存器(LFSR);中层就是比特重组(BR);下层就是非线性函数F。 图SEQ图\*ARABIC1祖冲之算法结构图 线性反馈移位寄存器LFSR 4.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) { v=215s15+217s13+221s10+220s4+(1+28)s0mod(231—1); s16=(v+u)mod(231-1); 如果s16=0,则置s16=231-1; (s1,s2,…,s15,s16)(s0,s1,…,s14,s15)。 } 4.2。3工作模式 在工作模式下,LFSR不接收任何输入。其计算过程如下: LFSRWithWorkMode() { s16=215s15+217s13+221s10+220s4+(1+28)s0mod(231-1); 如果s16=0,则置s16=231—1; (s1,s2,…,s15,s16)(s0,s1,…,s14,s15)。 } 比特重组BR 比特重组从LFSR得寄存器单元中抽取128比特组成4个32比特字X0、X1、X2、X3。BR得具体计算过程如下: BitReconstruction() { X0=s15H‖s14L; X1=s11L‖s9H; X2=s7L‖s5H; X3=s2L‖s0H。 } 非线性函数F F包含2个32比特记忆单元变量R1与R2。 F得输入为3个32比特字X0、X1、X2,输出为一个32比特字W。F得计算过程如下: F(X0,X1,X2) { W=(X0R1)⊞R2; W1=R1⊞X1; W2=R2X2; R1=S(L1(W1L‖W2H)); 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). 密钥装入 密钥装入过程将128比特得初始密钥k与128比特得初始向量iv扩展为16个31比特字作为LFSR寄存器单元变量s0,s1,…,s15得初始状态。设k与iv分别为 k0‖k1‖……‖k15 与 iv0‖iv1‖……‖iv15, 其中ki与ivi均为8比特字节,0≤i≤15。密钥装入过程如下: D为240比特得常量,可按如下方式分成16个15比特得子串: D=d0‖d1‖……‖d15, 其中: d0=100010012, d1=