实用文档之祖冲之序列密码算法ZUC算法.docx
- 文档编号:24768414
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:32
- 大小:81.28KB
实用文档之祖冲之序列密码算法ZUC算法.docx
《实用文档之祖冲之序列密码算法ZUC算法.docx》由会员分享,可在线阅读,更多相关《实用文档之祖冲之序列密码算法ZUC算法.docx(32页珍藏版)》请在冰豆网上搜索。
实用文档之祖冲之序列密码算法ZUC算法
实用文档之"祖冲之序列密码算法"
第1部分:
算法描述
1范围
本部分描述了祖冲之序列密码算法,可用于指导祖冲之算法相关产品的研制、检测和使用。
2术语和约定
以下术语和约定适用于本部分。
2.1
比特bit
二进制字符0和1称之为比特。
2.2
字节byte
由8个比特组成的比特串称之为字节。
2.3
字word
由2个以上(包含2个)比特组成的比特串称之为字。
本部分主要使用31比特字和32比特字。
2.4
字表示wordrepresentation
本部分字默认采用十进制表示。
当字采用其它进制表示时,总是在字的表示之前或之后添加指示符。
例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示。
2.5
高低位顺序bitordering
本部分规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边。
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线性反馈移位寄存器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) { (1)v=215s15+217s13+221s10+220s4+(1+28)s0mod(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=215s15+217s13+221s10+220s4+(1+28)s0mod(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非线性函数F F包含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‖iv1‖……‖iv15, 其中ki和ivi均为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=010*******100112, d10=1101011110001002, d11=0011010111100012, d12=1011110001001102, d13=0111100010011012, d14=1111000100110102, d15=1000111101011002。 (2)对0≤i≤15,有si=ki‖di‖ivi。 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, 其中xi和yi均为8比特字节,i=0,1,2,3。 则有yi=Si(xi),i=0,1,2,3。 表1S0盒 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 3E 72 5B 47 CA E0 00 33 04 D1 54 98 09 B9 6D CB 1 7B 1B F9 32 AF 9D 6A A5 B8 2D FC 1D 08 53 03 90 2 4D 4E 84 99 E4 CE D9 91 DD B6 85 48 8B 29 6E AC 3 CD C1 F8 1E 73 43 69 C6 B5 BD FD 39 63 20 D4 38 4 76 7D B2 A7 CF ED 57 C5 F3 2C BB 14 21 06 55 9B 5 E3 EF 5E 31 4F 7F 5A A4 0D 82 51 49 5F BA 58 1C 6 4A 16 D5 17 A8 92 24 1F 8C FF D8 AE 2E 01 D3 AD 7 3B 4B DA 46 EB C9 DE 9A 8F 87 D7 3A 80 6F 2F C8 8 B1 B4 37 F7 0A 22 13 28 7C CC 3C 89 C7 C3 96 56 9 07 BF 7E F0 0B 2B 97 52 35 41 79 61 A6 4C 10 FE A BC 26 95 88 8A B0 A3 FB C0 18 94 F2 E1 E5 E9 5D B D0 DC 11 66 64 5C EC 59 42 75 12 F5 74 9C AA 23 C 0E 86 AB BE 2A 02 E7 67 E6 44 A2 6C C2 93 9F F1 D F6 FA 36 D2 50 68 9E 62 71 15 3D D6 40 C4 E2 0F E 8E 83 77 6B 25 05 3F 0C 30 EA 70 B7 A1 E8 A9 65 F 8D 27 1A DB 81 B3 A0 F4 45 7A 19 DF EE 78 34 60 表2S1盒 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 55 C2 63 71 3B C8 47 86 9F 3C DA 5B 29 AA FD 77 1 8C C5 94 0C A6 1A 13 00 E3 A8 16 72 40 F9 F8 42 2 44 26 68 96 81 D9 45 3E 10 76 C6 A7 8B 39 43 E1 3 3A B5 56 2A C0 6D B3 05 22 66 BF DC 0B FA 62 48 4 DD 20 11 06 36 C9 C1 CF F6 27 52 BB 69 F5 D4 87 5 7F 84 4C D2 9C 57 A4 BC 4F 9A DF FE D6 8D 7A EB 6 2B 53 D8 5C A1 14 17 FB 23 D5 7D 30 67 73 08 09 7 EE B7 70 3F 61 B2 19 8E 4E E5 4B 93 8F 5D DB A9 8 AD F1 AE 2E CB 0D FC F4 2D 46 6E 1D 97 E8 D1 E9 9 4D 37 A5 75 5E 83 9E AB 82 9D B9 1C E0 CD 49 89 A 01 B6 BD 58 24 A2 5F 38 78 99 15 90 50 B8 95 E4 B D0 91 C7 CE ED 0F B4 6F A0 CC F0 02 4A 79 C3 DE C A3 EF EA 51 E6 6B 18 EC 1B 2C 80 F7 74 E7 FF 21 D 5A 6A 54 1E 41 31 92 35 C4 33 07 0A BA 7E 0E 34 E 88 B1 98 7C F3 3D 60 6C 7B CA D3 1F 32 65 04 28 F 64 BE 85 9B 2F 59 8A D7 B0 25 AC AF 12 03 E2 F2 注: S0盒和S1盒数据均为十六进制表示。 附 录 B (资料性附录) 模231-1乘法和模231-1加法的实现 B.1模231-1乘法 两个31比特字模231-1乘法可以快速实现。 特别地,当其中一个字具有较低的汉明重量时,可以通过31比特的循环移位运算和模231-1加法运算实现。 例如,计算abmod(231-1),其中b=2i+2j+2k。 则 abmod(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+bmod(231-1)可以通过下面的两步计算实现: 1)c=a+b; 2)c=(c&0x7FFFFFFF)+(c>>31)。 附 录 C (资料性附录) 算法计算实例 C.1测试向量1(全0) 输入: 密钥k: 00000000000000000000000000000000 初始向量iv: 00000000000000000000000000000000 输出: z1: 27bede74 z2: 018082da 初始化: 线性反馈移位寄存器初态: i S0+i S1+i S2+i S3+i S4+i S5+i S6+i S7+i 0 0044d700 0026bc00 00626b00 00135e00 00578900 0035e200 00713500 0009af00 8 004d7800 002f1300 006bc400 001af100 005e2600 003c4d00 00789a00 0047ac00 t X0 X1 X2 X3 R1 R2 W S15 0 008f9a00 f100005e af00006b 6b000089 67822141 62a3a55f 008f9a00 4563cb1b 1 8ac7ac00 260000d7 780000e2 5e00004d 474a2e7e 119e94bb 4fe932a0 28652a0f 2 50cacb1b 4d000035 13000013 890000c4 c29687a5 e9b6eb51 291f7a20 7464f744 3 e8c92a0f 9a0000bc c400009a e2000026 29c272f3 8cac7f5d 141698fb 3f5644ba 4 7eacf744 ac000078 f100005e 350000af 2c85a655 24259cb0 e41b0514 006a144c 5 00d444ba cb1b00f1 260000d7 af00006b cbfbc5c0 44c10b3a 50777f9f 07038b9b 6 0e07144c 2a0f008f 4d000035 780000e2 e083c8d3 7abf7679 0abddcc6 69b90e2b 7 d3728b9b f7448ac7 9a0000bc 13000013 147e14f4 b669e72d aeb0b9c1 62a913ea 8 c5520e2b 44ba50ca ac000078 c400009a 982834a0 f095d694 8796020c 7b591cc0 9 f6b213ea 144ce8c9 cb1b00f1 f100005e e14727d6 d0225869 5f2ffdde 70e21147 初始化后线性反馈移位寄存器状态: i S0+i S1+i S2+i S3+i S4+i S5+i S6+i S7+i 0 7ce15b8b 747ca0c4 6259dd0b 47a94c2b 3a89c82e 32b433fc 231ea13f 31711e42 8 4ccce955 3fb6071e 161d3512 7114b136 5154d452 78c69a74 4f26ba6b 3e1b8d6a 有限状态机内部状态: R1=14cfd44c R2=8c6de800 密钥流: t X0 X1 X2 X3 R1 R2 z S15 0 7c37ba6b b1367f6c 1e426568 dd0bf9c2 3512bf50 a0920453 286dafe5 7f08e141 1 fe118d6a d4522c3a e955463d 4c2be8f9 c7ee7f13 0c0fa817 27bede74 3d383d04 2 7a70e141 9a74e229 071e62e2 c82ec4b3 dde63da7 b9dd6a41 018082da 13d6d780 C.2测试向量2(全1) 输入: 密钥k: ffffffffffffffffffffffffffffffff 初始向量iv: ffffffffffffffffffffffffffffffff 输出: z1: 0657cfa0 z2: 7096398b 初始化: 线性反馈移位寄存器初态: i S0+i S1+i S2+i S3+i S4+i S5+i S6+i S7+i 0 7fc4d7ff 7fa6bcff 7fe26bff 7f935eff 7fd789ff 7fb5e2ff 7ff135ff 7f89afff 8 7fcd78ff 7faf13ff 7febc4ff 7f9af1ff 7fde26ff 7fbc4dff 7ff89aff 7fc7acff t X0 X1 X2 X3 R1 R2 W S15 0 ff8f9aff f1ffff5e afffff6b 6bffff89 b51c2110 30a3629a ff8f9aff 76e49a1a 1 edc9acff 26ffffd7 78ffffe2 5effff4d a75b6f4b 1a079628 8978f089 5e2d8983 2 bc5b9a1a 4dffff35 13ffff13 89ffffc4 9810b315 99296735 35088b79 5b9484b8 3 b7298983 9affffbc c4ffff9a e2ffff26 4c5bd8eb 2d577790 c862a1cb 2db5c755 4 5b6b84b8 acffff78 f1ffff5e 35ffffaf a13dcb66 21d0939f 4487d3e3 60579232 5 c0afc755 9a1afff1 26ffffd7 afffff6b cc5ce260 0c50a8e2 83629fd2 29d4e960 6 53a99232 8983ff8f 4dffff35 78ffffe2 dada0730 b516b128 ac461934 5e02d9e5 7 bc05e960 84b8edc9 9affffbc 13ffff13 2bbe53a4 12a8a16e 1bf69f78 7904dddc 8 f209d9e5 c755bc5b acffff78 c4ffff9a 4a90d661 d9c744b4 ec602baf 0c3c9016 9 1879dddc 9232b729 9a1afff1 f1ffff5e 76bc13d7 a49ea404 2cb05071 0b9d257b 初始化后线性反馈移位寄存器状态: i S0+i S1+i S2+i S3+i S4+i S5+i S6+i S7+i 0 09a339ad 1291d190 25554227 36c09187 0697773b 443cf9cd 6a4cd899 49e34bd0 8 56130b14 20e8f24c 7a5b1dcc 0c3cc2d1 1cc082c8 7f5904a2 55b61ce8 1fe46106 有限状态机内部状态: R1=b8017bd5 R2=9ce2de5c 密钥流: t X0 X1 X2 X3 R1 R2 z S15 0 3fc81ce8 c2d141d1 4bd08879 42271346 aa131b11 09d7706c 668b56df 13f56dbf 1 27ea6106 82c8f4b6 0b14d499 91872523 251e7804 caac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实用 文档 序列 密码 算法 ZUC