《祖冲之序列密码算法(zuc算法)》由会员分享,可在线阅读,更多相关《祖冲之序列密码算法(zuc算法)(25页珍藏版)》请在金锄头文库上搜索。
1、1祖冲之序列密码算法第 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、指示该字采用二进制表示。2.5 高高低低位顺序位顺序 bit ordering本部分规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边。GM/T 10004.2-201223符号和缩略语符号和缩略语3.1 运算符运算符+ 算术加法运算 mod 整数取余运算 按比特位逐位异或运算 模232加法运算 字符串连接符H H 取字的最高16比特 L L 取字的最低16比特 k 32比特字右移k位a ab 向量a a赋值给向量b b,即按分量逐分量赋值3.2 符号符号下列符号适用于本部分: s0,s1,s2,s15线性反馈移位寄存器的 16 个 31 比特寄存器单元变量 X0,X1,X
3、2,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。GM/T 1000
4、4.2-20123图 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 = 215 s15 +217 s13 + 221 s10 +
5、 220 s4 + (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)。 GM/T 10004.2-201244.2.3 工作模式工作模式在工作模式下,LFSR 不接收任何输入。其计算过程如下: LFSRWithWorkMode() (1)s16 = 215 s15 +217 s13 + 221 s10 + 220 s4 + (1 + 28)s0 mod (231-1); (2)如果 s16=0,则置 s16=
6、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 = s15Hs14L; (2)X1 = s11Ls9H; (3)X2 = s7Ls5H; (4)X3 = s2Ls0H。 4.4 非线性函数非线性函数 FF 包含 2 个 32 比特记忆单元变量 R1和 R2。 F 的输入为 3 个 32 比特字 X0、X1、X2,输出为一个
7、32 比特字 W。F 的计算过程如下: F (X0, X1, X2) (1)W = (X0 R1) R2; (2)W1 = R1 X1; (3)W2 = R2 X2;(4)R1 = S(L1(W1LW2H); (5)R2 = S(L2(W2LW1H)。 其中 S 为 32 比特的 S 盒变换,定义在附录 A 中给出;L1和 L2为 32 比特线性变换,定义如下: L1(X) = X (X 1)。4.6.2 工作阶段工作阶段首先执行下列过程一次,并将 F 的输出 W 舍弃: (1)BitReconstruction(); (2)F (X0, X1, X2); (3)LFSRWithWorkMod
8、e()。 然后进入密钥输出阶段。在密钥输出阶段,每运行一个节拍,执行下列过程一次,并输出一个 32 比特的密钥字 Z: (1)BitReconstruction(); (2)Z = F (X0, X1, X2) X3; (3)LFSRWithWorkMode()。GM/T 10004.2-20126GM/T 10004.2-20127附 录 A (规范性附录) S S 盒盒 32 比特 S 盒 S 由 4 个小的 88 的 S 盒并置而成,即 S=(S0, S1, S2, S3),其中 S0=S2,S1=S3。S0和 S1的 定义分别见表 1 和表 2。设 S0(或 S1)的 8 比特输入为
9、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, 其中 xi和 yi均为 8 比特字节,i = 0, 1, 2, 3。则有 yi = Si(xi), i = 0, 1, 2, 3。表 1 S0盒盒0123456789ABCDEF03E725B47CAE0003304D1549809B96DCB17B1BF932AF9D6AA5B82
10、DFC1D0853039024D4E8499E4CED991DDB685488B296EAC3CDC1F81E734369C6B5BDFD396320D4384767DB2A7CFED57C5F32CBB142106559B5E3EF5E314F7F5AA40D8251495FB A581C64A16D517A892241F8CFFD8AE2E01D3AD73B4BD A46EBC9DE9A8F87D73A806F2FC88B1B437F70A2213287CCC3C89C7C39656907BF7EF00B2B975235417961A64C10FEABC2695888AB0A3FBC018
11、94F2E1E5E95DBD0DC1166645CEC59427512F5749CAA23C0E86ABBE2A02E767E644A26CC2939FF1DF6FA36D250689E6271153DD640C4E20FE8E83776B25053F0C30EA70B7A1E8A965F8D271ADB81B3A0F4457A19DFEE783460表2 S1盒盒0123456789ABCDEF055C263713BC847869F3CD A5B29AAFD7718CC5940CA61A1300E3A8167240F9F84224426689681D9453E1076C6A78B3943E1
12、33AB5562AC06DB3052266BFDC0BFA62484DD20110636C9C1CFF62752BB69F5D48757F844CD29C57A4BC4F9ADFFED68D7AEB62B53D85CA11417FB23D57D30677308097EEB7703F61B2198E4EE54B938F5DDBA9GM/T 10004.2-201288ADF1AE2ECB0DFCF42D466E1D97E8D1E994D37A5755E839EAB829DB91CE0CD4989A01B6BD5824A25F387899159050B895E4BD091C7CEED0FB46FA
13、0CCF0024A79C3DECA3EFEA51E66B18EC1B2C80F774E7FF21D5A6A541E41319235C433070ABA7E0E34E88B1987CF33D606C7BCAD31F32650428F64BE859B2F598AD7B025ACAF1203E2F2注:S0盒和 S1盒数据均为十六进制表示。GM/T 10004.2-20129(资料性附录) 模模 2 23131-1-1 乘法和模乘法和模 2 23131-1-1 加法的实现加法的实现B.1 模模 231-1 乘法乘法两个 31 比特字模 231-1 乘法可以快速实现。特别地,当其中一个字具有较低的汉明
14、重量时,可以通过 31 比特的循环移位运算和模 231-1 加法运算实现。例如,计算 ab mod(231-1),其中 b=2i+2j+2k。则ab mod(231-1) = (a 31)。GM/T 10004.2-201210附 录 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: 27bede74 z2: 018082
15、da初始化:线性反馈移位寄存器初态:iS0+iS1+iS2+iS3+iS4+iS5+iS6+iS7+i0 0044d700 0026bc00 00626b00 00135e00 00578900 0035e200 00713500 0009af008 004d7800 002f1300 006bc400 001af100 005e2600 003c4d00 00789a00 0047ac00tX0X1X2X3R1R2WS150 008f9a00 f100005e af00006b 6b000089 67822141 62a3a55f 008f9a00 4563cb1b1 8ac7ac00 26
16、0000d7 780000e2 5e00004d 474a2e7e 119e94bb 4fe932a0 28652a0f2 50cacb1b 4d000035 13000013 890000c4 c29687a5 e9b6eb51 291f7a20 7464f7443 e8c92a0f 9a0000bc c400009a e2000026 29c272f3 8cac7f5d 141698fb 3f5644ba4 7eacf744 ac000078 f100005e 350000af 2c85a655 24259cb0 e41b0514 006a144c5 00d444ba cb1b00f1 260000d7 af00006b cbfbc5c0 44c10b3a 50777f9f 07038b9b6 0e07144