LTE - Security(加密保护算法)(7)

2019-06-11 15:45

1. v=【215s15+217s13+221s10+220s4+(1+28)s0 】mod (231-1); 2. If v=0, then set v=231-1; 3. s16=v⊕u;

4. If s16=0, then set s16=231-1; 5. (s1,s2, …,s15,s16)→(s0,s1, …,s14,s15). }

在工作模式LFSR不接收输入,逐位执行右移操作。 LFSRWithWorkMode() {

1. s16=215s15+217s13+221s10+220s4+(1+28)s0 mod (231-1); 2. If s16=0, then set s16=231-1; 3. (s1,s2, …,s15,s16)→(s0,s1, …,s14,s15). }

注1:2i与31比特数相乘可表示为向左循环移位i位,只是在上述功能的第1步中,增加模(231-1)的操作。因此LFSRWithInitialisationMode(u)函数中的第1步也可如下实现:

v=(s15<<<3115)+(s13<<<3117)+(s10<<<3121)+(s4<<<3120) +s0 mod(231-1). 同样,LFSRWithWorkMode()中的step1也可依此实现。

注2:对于GF(231-1)的两参数a、b,v=a+b mod (231-1)可通过几步实现:(1)计算v=a+b,(2)如果进位是1,令v=v+1。也可以:(1)计算w=a+b,w是32比特的值,(2)令v= (w的低31比特)+(w的最高有效位)。 3.1.6.3 比特重组BR

该层将LFSR产生的128位重组为4个32位的字做为F的输入。

设 s0, s2, s5, s7, s9, s11, s14, s15 是 LFSR 的8个寄存器,重组后的4个32位字X0,X1,X2,X3 产生方法如下: Bitreorganization() {

1. X0=s15H || s14L; 2. X1=s11L || s9H; 3. X2=s7L || s5H; 4. X3=s2L ||s0H. }

3.1.6.4 非线性函数F

3.1.6.4.1 工作过程

31

F 有2个32位的存储单元 R1 和R2. 输入为 X0, X1 和X2, F输出一个32位字 W. 过程如下: 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×32 的S盒, L1 和 L2 是线性转换.

3.1.6.4.2 S盒

一个32×32 S盒由4个并列的8×8 S盒组成,即 S=(S0,S1,S2,S3), 并且 S0=S2, S1=S3. S0 、 S1 定义分别参见表3.1.6.4-1和表3.1.6.4-2.

表3.1.6.4-1 S0(S2)盒定义

0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F

3E 72 5B 47 CA E0 00 33 04 D1 54 98 09 B9 6D CB 7B 1B F9 32 AF 9D 6A A 5 B8 2D FC 1D 08 53 03 90 4D 4E 84 99 E4 CE D9 91 DD B6 85 48 8B 29 6E AC CD C1 F8 1E 73 43 69 C6 B5 BD F D 39 63 20 D4 38 76 7D B2 A7 CF ED 57 C5 F3 2C BB 14 21 06 55 9B E3 EF 5E 31 4F 7F 5A A 4 0D 82 51 49 5F BA 58 1C 4A 16 D5 17 A8 92 24 1F 8C FF D8 AE 2 E 01 D3 AD 3B 4B DA 46 EB C9 DE 9 A 8F 87 D7 3A 80 6F 2F C8 B1 B4 37 F7 0A 22 13 28 7C CC 3C 89 C7 C3 96 56 07 BF 7E F0 0B 2B 97 52 35 41 79 61 A6 4C 10 FE BC 26 95 88 8A B0 A3 F B C0 18 94 F2 E1 E5 E9 5D D0 DC 11 66 64 5C EC 59 42 75 12 F5 74 9C AA 23 0E 86 AB BE 2A 02 E7 67 E6 44 A2 6C C2 93 9F F1 F6 FA 36 D2 50 68 9E 62 71 15 3D D6 40 C4 E2 0F 8E 83 77 6B 25 05 3F 0C 30 EA 70 B7 A1 E8 A9 65 8D 27 1A DB 81 B3 A0 F4 45 7A 19 DF E E 78 34 60

表3.1.6.4-2 S1(S3)盒定义

32

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

如果 x 是 8位输入到 S0 (或 S1),并且x=h||l.则S0(或S1)表第h行第l列的数据就是输出。 【例子】

S0(0x12)=0xF9 and S1(0x34)=0xC0.

如果X是 32位的输入,输出Y也是32位:

X = x0 || x1 || x2 || x3, Y = y0 || y1 || y2 || y3,

这里 xi 和yi 是所有的字节, i=0,1,2,3. 则

yi=Si(xi), i=0,1,2,3.

【例子】

设 输入X=0x12345678 , 输出Y为:

Y=S(X)=S0(0x12)||S1(0x34)||S2(0x56)||S3(0x78)=0xF9C05A4E.

3.1.6.4.3 线性转换

L1 和L2 定义为:

33

L1(X)=X⊕(X<<<2)⊕(X<<<10)⊕(X<<<18)⊕(X<<<24), L2(X)=X⊕(X<<<8)⊕(X<<<14)⊕(X<<<22)⊕(X<<<30).

3.1.6.5 ZUC两个阶段

3.1.6.5.1 初始化阶段

初始化阶段将128位初始密钥k 和128位初始矢量 iv 输入LFSR 进入初始状态设置 R1 和 R2 为0. 然后执行如下过程

1. Bitreorganization();

2. u=F(X0, X1, X2)⊕X3; 3. LFSRWithInitialisationMode(u>>1).

3.1.6.5.2 密钥流产生阶段

首先执行下面操作一次,丢弃F的输出W:

1. Bitreorganization();

2. F(X0, X1, X2); 3. LFSRWithWorkMode()

然后产生密钥流,即每执行一次,产生一个32位的Z:

1. Bitreorganization();

2. Z= F(X0, X1, X2)⊕X3; 3. LFSRWithWorkMode() 3.1.6.6 EIA3算法实现

3.1.6.6.1 输入输出

void EIA3(u8* IK,u32 COUNT,u32 DIRECTION,u32 BEARER,u32 LENGTH,u32* M,u32* MAC)

输入参数:

参数 长度(bits) 说明 COUNT 32 计数COUNT [0]…COUNT [31] BEARER 5 承载标识 34

DIRECTION IK LENGTH M 输出参数:

1 128 32 LENGTH 方向DIRECTION [0] 完整性保护密钥IK [0]…IK [127] 数据流长度 输入数据流 参数 MAC 3.1.6.6.2 初始化

长度(bits) 32 说明 产生的验证码 下面介绍ZUC参数如何定义:初始密钥KEY和初始向量IV是根据完整性保护密钥IK和初始变量产生的。

IK是128比特完整性密钥,其中IK[i] (0≤i≤15)是一个字节。

IK= IK [0] ║IK [1] ║IK [2] ║?║IK [15]

用于ZUC算法的128比特初始密钥KEY如下,其中KEY

KEY[i]=IK[i], i=0,1,2,?,15.

COUNT是32位计数,其中COUNT[i] ( 0≤i≤3)是一个字节。 COUNT=COUNT[0]║COUNT[1]║COUNT[2]║COUNT[3] 128比特初始向量IV为:

IV = IV[0]║IV[1] ║IV[2] ║?║IV[15], 其中,IV[i] ( 0≤i≤15) 是字节。且: IV[0] = COUNT[0], IV[1] = COUNT[1], IV[2] = COUNT[2], IV[3] = COUNT[3], IV[4] = BEARER║0002, IV[5] =000000002, IV[6] = 000000002, IV[7] = 000000002,

IV[8] = IV[0]?(DIRECTION << 7), IV[9] = IV[1], IV[10] = IV[2], IV[11] = IV[3], IV[12] = IV[4], IV[13] = IV[5],

IV[14] = IV[6]?(DIRECTION << 7), IV[15] = IV[7].

3.1.6.6.3 密钥流产生

35


LTE - Security(加密保护算法)(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:东飞电子商务有限公司项目建设运营计划书 (1)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: