admin 管理员组

文章数量: 887021


2024年3月9日发(作者:c map 和类成员函数指针)

LTE 安全功能1

1 概述 ....................................................................................... 4

1.1

1.2

参考文献 .............................................................................. 4

术语 .................................................................................. 4

2 加密和完整性保护算法 ....................................................................... 6

2.1

2.2

2.3

完整性保护 .......................................................................... 6

加密 ................................................................................ 7

加密和完整性保护的关系 .............................................................. 9

3 算法 ....................................................................................... 9

3.1 算法介绍 .............................................................................. 9

128-EEA1 ......................................................................................................................................................... 10

128-EEA2 ......................................................................................................................................................... 15

128-EIA1 .......................................................................................................................................................... 17

128-EIA2 .......................................................................................................................................................... 23

3.1.1 EEA0、EIA0 (NULL Algorithm) .................................................................................................................... 9

3.1.2

3.1.3

3.1.4

3.1.5

3.2

3.1.6 EIA3、EEA3(ZUC) ................................................................... 29

算法选择 .............................................................................. 38

3.2.1 初始安全上下文建立过程: ............................................................ 38

3.2.2 X2 切换过程中算法选择: ............................................................. 38

3.2.3 S1 切换过程中的算法选择: ............................................................ 38

4 密钥的生成和更新 ........................................................................... 38

4.1 HMAC-SHA256()算法 .................................................................. 38

4.1.1 输入输出 ............................................................................ 38

4.1.2 HMAC 过程 .......................................................................... 40

4.1.3 SHA-256 算法 ........................................................................ 41

4.2

4.3

4.4

密钥层次 .............................................................................. 44

接入层的密钥生成 ....................................................................... 46

接入层的密钥处理机制: .................................................................. 49

5 ENB 影响分析 ................................................................................ 51

5.1 流程分析 .............................................................................. 51

5.1.1 初始业务接入 ........................................................................ 51

5.1.2 X2 切换 ............................................................................. 52

5.1.3 eNB 内切换 .......................................................................... 53

5.1.4 S1 切换 .............................................................................. 54

5.1.5 RRC 重建 ............................................................................ 54

5.1.5 UE 能力改变 ......................................................................... 62

5.1.6 安全密钥更新 ........................................................................ 63

5.1.7 E-UTRAN→UTRAN/GERAN 的切换 ..................................................... 64

5.1.8 UTRAN/GERAN→E-UTRAN 的切换 ..................................................... 65

2

5.1.9 PDCP 计数器回卷 .................................................................... 66

5.2

6

性能分析 ............................................................................. 66

5.2.5 UP .................................................................................................................................................................... 66

相关协议参数 ................................................................................ 68

6.1 TS36.331 ............................................................................................................ 68

6.1.1 RRCConnectionReconfiguration ..................................................................................................................... 68

6.1.2 RRCConnectionReestablishmentRequest ........................................................................................................ 70

6.1.3 RRCConnectionReestablishment ..................................................................................................................... 71

6.1.4 SecurityModeCommand .................................................................................................................................. 72

6.1.5 HandoverPreparationInformation .................................................................................................................... 72

6.1.6 MobilityFromEUTRACommand message ....................................................................................................... 74

6.2 TS36.413 ............................................................................................................ 77

6.2.1 INITIAL CONTEXT SETUP REQUEST ....................................................................................................... 77

6.2.2 UE CONTEXT MODIFICATION REQUEST ................................................................................................ 79

6.2.3 PATH SWITCH REQUEST ACKNOWLEDGE ............................................................................................ 79

6.2.4 HANDOVER REQUEST ................................................................................................................................ 80

6.2.5 HANDOVER COMMAND ............................................................................................................................. 82

6.3 TS36.423 ............................................................................................................ 83

6.3.1 HANDOVER REQUEST ................................................................................................................................ 83

6.4 TS36.323 ............................................................................................................ 85

6.4.1 PDCP SN ......................................................................................................................................................... 85

6.4.2 Data .................................................................................................................................................................. 85

6.4.3 MAC-I .............................................................................................................................................................. 85

6.4.4 COUNT ............................................................................................................................................................ 85

7 汇总 ...................................................................................... 86

7.1 流程 .................................................................................... 87

7.1.1 SMC 流程 ............................................................. 错误!未定义书签。

7.1.2 eNB 间切换(S1 切换、X2 切换) ........................................................ 87

7.1.3 RRC 重建流程 ....................................................................... 87

7.1.4 小区内切换 .......................................................................... 92

7.1.5 PDCP 回卷流程 ...................................................................... 93

7.1.6 UE 上下文修改 ...................................................................... 93

7.2 性能优化 ................................................................................ 97

7.2.1 DSP 支持 ZUC ............................................................................................................................................... 98

8 问题 ...................................................................................... 93

9 附录 ZUC 相关资料 .......................................................................... 94

9.1 ZUC

算法研制中心提供的性能数据 ...............................................

94

9.2 ZUC IP核的设计与实现 ................................................................... 94

9.3 CLP-411: ZUC 后备(LOOK

ASIDE) 密码核 .................................................... 96

1 概述

3

本文档对LTE 安全技术进行的总结,描述了与安全相关的协议,重点包括:安全流程梳理。

1.1 参考文献

[1] 3GPP TS 33.401:"3GPP System Architecture Evolution (SAE); Security architecture".

[2] 3GPP 36.331 Radio Resource Control (RRC); Protocol specification

[3] 3GPP 36.413 S1 application protocol (S1AP)

[4] 3GPP 36.423 X2 application protocol (X2AP)

[5] 3GPP TS 36.323: "Evolved Universal Terrestrial Radio Access (E-UTRA); Packet Data

Convergence Protocol (PDCP) Specification".

1.2 术语

AES

CK

IK

EARFCN-DL

EEA

EIA

eKSI

KDF

KSI

MAC-I

NCC

NH

SMC

SQN

HFN

LSM

Advanced Encryption Standard

Cipher Key

Integrity Key

E-UTRA Absolute Radio Frequency Channel Number-Down Link

EPS Encryption Algorithm

EPS Integrity Algorithm

Key Set Identifier in E-UTRAN (E-UTRAN 的密钥组标识)

Key Derivation Function(密钥获取功能)

Key Set Identifier

Message Authentication Code for Integrity ( TS36.323 )

Next hop Chaining Counter

Next Hop

Security Mode Command

Sequence Number

Hyper Frame Number

Limited Service Mode(受限服务模式)

✓ COUNT:包括上行下行两个变量。

✓ Chaining of KeNB:

HFN PDCP SN

从一个 KeNB生成另一个 KeNB(如切换过程中,根据生成源小区 KeNB生成目标小区 KeNB)

✓ eKSI:

eKSI 是KASME的一个指示,由 MME 进行分配,作用是在 UE和 MME 中指示一个通过 EPS AKA 过程产 生的 Native KASME,可以进行 KASME

的重新启用。eKSI 为 4bit,最高位指示 eKSI 值是 KASME

还是 KSGSN,剩 余的4

三位填写KSI 值。在从 UE发送给 MME 的消息中,如果 eKSI 值为全 1,表示没有可用的 eKSI。

✓ Mapped security context:

跨系统移动,由源系统的安全上下文,映射获得的安全上下文。比如在 UTRAN 到E-UTRAN的切换过程 中,通过UTRAN 的安全上下文获取E-UTRAN 的安全上下文。

✓ Refresh of KeNB:

KASME

不变情况下的 KeNB

更新。

通过小区内切换过程,实现的KeNB参数变化。如在PATH SWITCH后目标eNB根据MME提供的NH/NCC 对,发起小区内切换,通知UE采用最新的NCC进行KeNB计算,实现KeNB参数的变化。

PDCP COUNTs越界时,需要对 KeNB, KRRC-enc, KRRC-int, and KUP-en进行Key refresh。

✓ Re-keying of KeNB:

通过新的 KASME

获取新 KeNB。KeNB, KRRC-enc, KRRC-int, and KUP-enc

可以进行 Re-keying,由 MME 发起,通常 在

NAS 安全交互后发生。

✓ UE security capabilities:

UE支持的EPS AS和NAS的完整性保护和加密算法,以及UE支持的UTRAN和GERAN的加密算法和完整 性保护算法。

✓ UE EPS security capabilities:

UE支持的EPS 系统的加密算法和完整性保护算法。

✓ NAS COUNT : 包括上下行两个变量。UE和MME 分别保存。在UE侧NAS COUNT都保存在USIM中或者UE的非易失性 存储设备中。

NAS COUNT = NAS overflow Counter(16位) || NAS SN(8位)。NAS SN 是在NAS信令交互过程中,NAS 头中包含的 Sequence Number IE。

5

2 加密和完整性保护算法

2.1 完整性保护

参数说明:

UE与eNB之间的RRC 完整性保护由PDCP提供,PDCP以下各层不需要完整性保护。EIA算法(完整 性)的输入参数为:

(1) 一个 128bit 的密钥 KRRCint;

(2) 一个 5bit 的承载 id BEARER;

(3) 一个 1bit 的传输方向 DIRECTION;

(4) 密钥流长度 LENGTH;

(5) 时间和方向的 32bit。

特例:切换过程中的RRC 层也需要进行RRC 完整性校验码的生成,用于生成ShortMAC-I。ShortMAC-I 根据

VarShortMAC-Input作为MESSAGE,根据原服务小区的KRRCint作为KEY,COUNT/BEARER/DIRECTION 的 bit 位全部为 1,计算获得;而 VarShortMAC-Input 由目标小区 cellIdentity,原服务小区的 PCI 和 c-RNTI 组 成。

输入

COUNT

BEARER

32bit

5bit

取值为“RB identity"-1 特例:对于EIA1算法,输入为32bit,高27bit填零,低5bit 为BEARER。

DIRECTION

MESSAGE

由HFN和PDCP SN组成,共32bit

1bit

0—上行,1—下行

RRC消息内容,即PDCP SDU。

(1)对于EIA1和EIA3,采用流密码加密方式,LENGTH

取值为MESSAGE的bit数;

(2)对于EIA2,采用块密码加密方式,LENGTH取值为

MESSAGE的字节数。

LENGTH

KEY 128bit KRRCint

EIA0――空算法;

算法

128-bit algorithms

6

EIA1――基于3G网络的标准算法

sonw3G;

生成KEYSTREAM BLOCK

EIA2――增强性加密算法AES;

EIA3――祖冲之算法ZUC;

输出

MAC-I/ XMAC-I 32bit

2.2 加密

参数说明:

UE与eNB 之间的用户面通过PDCP协议进行加密。128bit EEA算法(加密)的输入INPUT参数为:(1) 一个 128bit 密钥

KUPenc

(2) 一个 5bit 承载标识 BEARER;

(3) 1bit 传输方向 DIRECTION;

(4) 密钥流的长度 LENGTH;

(5) 时间以及方向

输入

COUNT 32bit

由HFN和PDCP SN组成,共32bit

BEARER 5bit

对于信令数据――“RB identity"-1 对于业务数据――DRB

identity-1

DIRECTION 1bit

0—上行,1—下行

LENGTH 16bit

Keystream block长度,在加密算法中,利用keystream block对未

加密的数据的消息字段进行操作。

(1)对于EIA1 和EIA3 ,采用流密码加密方式:

LENGTH取值为Keystream block 的bit数;

(2)对于EIA2 ,采用块密码加密方式: LENGTH取值为Keystream block 的字节数。 对于信令数据――加密数据为

PDCP DATA 和 MAC-I ,长度为

7

PDCP DATA长度加上MAC-I长度;而PDCP DATA即为未压缩的 PDCP SDU。

对于业务数据――加密数据为PDCP DATA ,长度为PDCP

DATA长度;而PDCP DATA可以为压缩的PDCP SDU,也可以为 未压缩的PDCP SDU。

KEY

算法

128bit

128-bit algorithms

对于信令数据――KRRCenc

对于业务数据――KUPenc

EEA0――空算法;

EEA1――基于3G网络的标准算法

sonw3G;

EEA2――增强性加密算法AES;

EEA3――祖冲之算法ZUC;

安全加密是针对如下三种类型的 PDU。

(1)控制平面SRB数据的PDCP Data PDU:首先对信令数据进行完整性保护,然后对信令数据和认证 码一起加密。

R R R

Data

PDCP SN

Oct 1

Oct 2

MAC-I 认证码

MAC-I (cont.)认证码

MAC-I (cont.)认证码

MAC-I (cont.)认证码

Oct N-3

Oct N-2

Oct N-1

Oct N

完整性保护(2)使用12bit SN值的PDCP Data PDU:此格式适用于携带映射到RLC AM(应答)或RLC UM(非 应答)的 DRB 的数据的 PDCP Data PDU,对数据进行加密。

D/C

R R R PDCP SN Oct 1

PDCP SN (cont.)

Oct 2

Oct 3

Data

(3)使用7bit SN 值的PDCP Data PDU:此格式适用于携带映射到RLC UM的DRB的数据的PDCP Data

PDU,对数据进行加密。

8

D/C

PDCP SN

Data

Oct 1

Oct 2

2.3 加密和完整性保护的关系

PDCP SDU

PDCP PDU

RRC 信令,完整性保护结果需要进行加/解密:

对于发送方:先进行完整性保护( MAC-I 计算),后进行加密。

对于接收方:先进行数据解密,再进行完整性验证( MAC-I 校验)。

注:RRC 信令的处理方式正好与 NAS 信令的处理方式相反。NAS 信令先加密,后进行完整性保护,完整性 保护信息不进行加密。

3 算法

3.1 算法介绍

3.1.1 EEA0、EIA0 (NULL Algorithm)

参见 36401- Annex B /B.0。

9

3.1.1.1 EEA0 算法

EEA0 算法的实现效果和应用全 0 的 KEYSTREAM 进行加密效果等同。KEYSTREAM 的长度和输入参 数

LENGTH 相同。此外,和加密相关的所有操作都应遵循本章所描述的加密算法。

3.1.1.2 EIA0 算法

EIA0 算法的实现效果和生成全 0 的 MAC-I/NAS-MAC 和 XMAC-I/XNAS-MAC 的效果相同。当应用 EIA0 算法时,无需进行重保护。除非接收侧不校验接收到的 MAC,否则,所有和完整性保护相关的操作都 应遵循本章描述的完整性保护算法。

EIA0 仅应用在处于 LSM(受限服务模式)的 UE进行紧急呼叫时。

注 1 :文中提到的重保护是指重新进行完整性保护。

注 2:E-UTRAN 中,认为使用 2G SIM 的 UE 处于 LSM 状态。

注 3 : EEA0 和 EIA0 没有提供任何安全。

3.1.2 128-EEA1

3.1.2.1 EEA1 算法原理

参见 36401-B.12。

128-EIA1基于 SNOW 3G 算法,和UEA2 的实现方式相同。128-EIA1采用流密码加密方式进行加密。利 用

LFSR( 线性反馈移位寄存器 ) 和 FSM( 有限状态机 ) 进行更新密钥流。用新产生的密钥流和明文按位进行异或, 从而得出密文。输出的密钥流以 32位为一组,最终可形成 z1、z2、… zt之类的密钥流,其中 t = (n + 31)

/ 32, n 为明文的长度 (以 bit 为单位 ) 。解密过程与加密过程类似。采用相同的算法和密钥,唯一不同的是对密文进 行解密。

3.1.2.2 输入和输出

u32 f8(u8 *CK-Key, u32 Count, u32 Bearer, u32 Direction, u8 *Data, u32 Length)

表 3.1.2.2-1 输入参数

参数

COUNT-C

BEAR

DIRECTION

CK

LENGTH

大小(bits)

32

5

1

128

64

注释

结构取决于输入 COUNT-I[0]…COUNT-I[31]

承载实体 BEARER[0]…BEARER[4]

传输方向 DIRECTION[0]

加解密密钥 IK[0]…IK[127]

加密的明文的长度(以位为单位)

10

IBS LENGTH 输入 bit 流,input bitstream

表 3.1.2.2-2 输出参数

参数 大小(bits) 注释

OBS LENGTH 输出 bit 流,output bitstream

3.1.2.3 EEA1算法流程图

图 3.1.2.3-1 EEA1 加解密算法流程 , 第 1 部分

如图 3.1.2.3-1 所示,加解密算法 EEA1 的流程中第 1 部分有如下步骤:

1) 将输入变量转变为适用于SNOW 3G 算法的输入变量:

K3

= IK[0] || IK[1] || IK[2]

|| … || IK[31]

K2

= IK[32] || IK[33] || IK[34]

|| … || IK[63]

K1

= IK[64] || IK[65] || IK[66]

|| … || IK[95]

K0

= IK[96] || IK[97] || IK[98]

|| … || IK[127]

IV3

= COUNT-C[0] || COUNT-C[1] || COUNT-C[2] || … || COUNT-C[31]

IV2

=

BEARER[0] || BEARER[1] || … || BEARER[4] || DIRECTION[0] || 0 || … || 0

IV0

= IV2

2) 根据SNOW 3G 算法,得到密钥流

IV1

= IV3

11

图 3.1.2.3-2 EEA1 加解密算法流程,第 2 部分

如图 3.1.2.3-2 所示,加解密算法EEA1的流程中第 2 部分有以下步骤:

1) 根据 EVAL_M 功能计算得到参数 IV3/ IV2/ IV1/ IV0。

2) 利用 1)中得到的参数,在 SNOW 3G 算法的作用下产生密钥流

3) 密钥流以 4个字节为一组,第一组为

z1,第二组为z2,…,最后一个为

zL。

3.1.2.4 EEA1算法解析

3.1.2.4.1 初始化输入参数

1. 根据输入参数得到 SNOW 3G 算法需要的参数,如图 3.1.2.4-1所示。12

-1

s15

s11

s5

s2

s1

s0

FSM

S1

R1

S2

R2

R3

图 3.1.2.4-1 密钥初始化流程

2. 根据每个为 32-bit 字的k0, k1, k2, k3和 128-bit 变量(由 4 个 32-bit 字 IV0, IV1, IV2, IV3组成)进行初始化:

s15

= k3

s11

= k3

s7

= k3

s3

= k3

IV0

1

s 14= k2

s10= k2

s 6= k2

s13

= k

1

1

s12

= k0

IV1

1

1

IV2

s9

= k

IV3

s5

= k

1

1

s8

= k0

s4

= k0

1 s 2= k2

1

s1

= k

1

1 s0

= k0

1

FSM 初始为:R1 = R2 = R3 = 0; 执行以下步骤,循环 32次:

步骤 1:更新 FSM( 有限状态机 ) 来产生初值 F(四个字节 )

✓ 步骤 2:利用 LFSR(线性反馈移位寄存器)以 F 为输入参数进行密钥初始化

3.1.2.4.2 生成密钥流13

-1

s15

s11

s5

s2

s1

s0

FSM

zt

R1

S1

R2

S2

R3

图 3.1.2.4-2 生成密钥流流程

密钥流是一串字(四个字节)组成的位流,以四个字节为一组。用 z1,z1, ……zn 表示。其中,n = (LENGTH + 31)

/ 32 , z1 表示最高有效字。按照最高字到最低字的顺序组合 z1 ||z2 || …… ||zn 。最终得到的密钥流为 KS[0],KS[2],……KS[LENGTH-1],其中 KS[0]为最高有效位。

如图 4.2 所示生成密钥流流程:

首先,FSM clock 一次,丢弃 FSM 输出字;然后 LFSR 在密钥流模式下 clock 一次。

在 n 个 32-bit 字的密钥流生成以后,执行 n 次以下步骤:

✓ 步骤 1:FSM clock,产生一个 32-bit 输出字 F;

✓ 步骤 2:计算下一个密钥流字: zt = F

s 0

✓ 步骤 3: LFSR 在密钥流模式下 clock 。

3.1.2.4.3 计算得到密文

利用已经生成的密钥流和明文做异或操作,得到密文

对于整数 i ,有以下表达式, for 为循环语句,OBS 为密文

for(i = 0; i < LENGTH – 1;i++)

{

OBS[i] = IBS[i] ^ KS[i];

}

14

3.1.3 128-EEA2

3.1.3.1 EEA2 算法原理

128-EEA2 算法基于CTR 模式的 128-bit AES。AES(ADVANCED ENCRYPTION STANDARD)的加密算法 有如下几种模式:CBC(Cipher Block Chaining)模式、ECB(Electronic Codebook)模式、(CFB)Cipher Feedback 模式、(OFB)Output Feedback 模式、CTR(COUNTER)模式、CMAC 模式等。而EEA2算法采用的就是 128 位 的 AES 中的

CTR 模式进行加密的 AES 的加密原理是块加密算法和对称加密算法 EEA2 是以 16 个字节(128 位)为一块,把密钥和明文分成若干块。用轮密钥的方法来产生密钥,每一轮采用不同的替换函数进行变换, 这样可以保证有更高的安全性。CTR 模式(COUNTER)顾名思义就是计数模式,利用 COUNT、BEAR、 DIRECTION 等参数构成一个 128 位的输入块,用最低位的 32 位的值做为计数值,每加密一块明文计数就增 加一次,这样就会产生 T1、T2、T3……Tn

等若干输入块,这样在每一块明文加密的过程中采用的输入块都 是不相同的,这样的目的就是保证了安全性,不易被破解。EEA2 的 CTR 模式的加解密过程可以用下面的公 式来简易给出:

CTR 加密:

Oj = CIPHK(Tj) for j = 1, 2 … n;

Cj = Pj ⊕ Oj for j = 1, 2 … n-1;

C*n = P*n ⊕MSBu(On).

CTR 解密:

Oj = CIPHK(Tj)

Pj = Cj ⊕ Oj

P*n = C*n ⊕MSBu(On).

其中:n = (Length ) / 16;

输入块 T1、T2……Tn的关系如下:

T1 = COUNT[0] | ……COUNT[31] | BEARER[0] | ……BEARER[4] | DIRECTION | 0 ^ 26 | 0 ^ 32 |

COUNTER[0] ……COUNTER[31];

Tn = Tn-1 + 1;计数的增加通过 COUNTER = (COUNTER + 1) mod (2 ^32)来实现。

for j = 1, 2 … n;

for j = 1, 2 … n-1;

15

3.1.3.2 输入和输出

表 3.1.4.2-1 为输入参数,表 3.1.4.2-2 为输出参数。

16

表 3.1.4.2-1 输入参数

参数

大小(bits)

注释

COUNT-C 32

结构取决于输入 COUNT-I[0]…COUNT-I[31]

BEAR 5

承载实体 BEARER[0]…BEARER[4]

DIRECTION 1

传输方向 DIRECTION[0]

IK 128

加解密密钥 IK[0]…IK[127]

LENGTH 64

加密的明文的长度(以字节为单位)

T-COUNTER 128

利用以上参数构造的输入块的长度

IBS LENGTH

输入的明文

表 3.1.4.2-2 输出参数

参数

大小(bits)

注释

OBS LENGTH

输出的密文

17

3.1.3.3 EEA2算法流程图

图 3.1.4.3-1 EEA2 加解密算法流程

如图 3.1.4.3-1 所示,加解密算法EEA2的流程有以下步骤:

1)

2)

3)

4)

5)

6)

7)

8)

根据输入参数COUNT、BEARER、DIRECTION 等构造输入输入块 T1

从 RRC层获得输入参数KEY;

把明文/密文分成若干块,每块的长度为16字节(128位);

输入块在轮密钥的作用下通过函数替换产生输出块;

输出块和明文做异或操作产生一块密文;

计数块 T 加一,更新计数值,产生新的输入块;

执行到最后一块则推出

执行步骤 4 注意:若最后一块明文的长度不够16字节(128位),则在加密的过程中要单独处理。处理完后放到之前产 生的密文/明文的后面。

3.1.4 128-EIA1

3.1.4.1 EIA1 算法原理

128-EIA1基于 SNOW 3G 算法,和 UIA2 的实现方式相同。

18

3.1.4.2 输入和输出

u32 f9( const u8* key, u32 count, u32 fresh, int dir, u8 *data, u64 length) 算法的输入参数和输出参数见下表。

表 3.1.3.2-1 输入参数

参数

大小(bits)

注释

COUNT-I 32

结构取决于输入 COUNT-I[0]…COUNT-I[31]

FRESH 32

随机数 FRESH[0]…FRESH[31]

DIRECTION 1

传输方向 DIRECTION[0]

IK 128

完整性密钥 IK[0]…IK[127]

LENGTH 64

MESSAGE 的长度,比特

MESSAGE LENGTH

输入 bit 流

表 3.1.3.2-1 输出参数

参数

大小(bits)

注释

MAC-I 32

消息鉴权码 MAC-I[0]…MAC-I[31]

19

3.1.4.3 EIA1 算法流程图

图 3.1.3.3-1 EIA1 完整性保护算法流程, 第 1 部分

如图 3.1.3.3-1所示,完整性保护算法EIA1的流程中第1部分有以下步骤:

1)

K3

K2

K1

将输入变量转变为适用于 SNOW 3G 算法的输入变量:

= IK[0]

= IK[32]

= IK[64]

= IK[96]

|| IK[1] || IK[2]

|| IK[33] || IK[34]

|| IK[65] || IK[66]

|| IK[97] || IK[98]

|| … || IK[31]

|| … || IK[63]

|| … || IK[95]

|| … || IK[127]

K0

=

=

=

=

2)

IV3

IV2

IV1

IV0

COUNT-I[0] || COUNT-I[1] || COUNT-I[2] || … || COUNT-I[31]

FRESH[0] || FRESH[1] || FRESH[2] || … || FRESH[31]

DIRECTION[0]

COUNT-I[0] || COUNT-I[1] || COUNT-I[2] || … || COUNT-I[31]

DIRECTION[0] || FRESH[17] || … || FRESH[31] FRESH[0] || FRESH[1] || … || FRESH[15] || FRESH[16]

根据SNOW 3G 算法,得到密钥流

z1

|| z2

||

z3

||

Qz4

|| z5

P ||

|| OTP[0] ... OTP[31]

20

图 3.1.3.3-2 EIA1 完整性保护算法流程, 第 2 部分

如图 3.1.3.3-2所示,完整性保护算法EIA1的流程中第2部分有以下步骤:

1) 根据EVAL_M 功能计算得到参数

2) 将 1)中得到的参数与 MD-1进行与或计算,得到

3) 将 2)中得到的参数与Q 进行 MUL 计算,得到数值 e0

|| e1

|| ... || e31

4) 将 3)中得到的参数与OTP[0] || ... || OTP[31]进行与或计算,得到最终的密钥验证码 MAC-I。3.1.4.4 EIA1 算法解析

3.1.4.4.1 初始化输入参数

1. 根据输入参数得到 SNOW 3G 算法需要的参数,如图 4.2.4

21

-1

s15

s11

s5

s2

s1

s0

FSM

S1

R1 R2

S2

R3

图 3.1.3.4-1 密钥初始化流程

根据 32-bit 字 k0, k1, k2, k3和 128-bit 变量(由 4个 32-bit 字 IV0, IV1, IV2, IV3组成)进行初始化:

s15

= k3

s11

= k3

s7

= k3

s3

= k3

IV0

1

s 14= k2

s10= k2

s 6= k2

s13

= k

1

1

s12

= k0

IV1

1

1

IV2

s9

= k IV3

s5

= k

1

1

1

s8

= k0

s4

= k0

1 s 2= k2

1

s1

= k

1 s0

= k0

1

FSM 初始为:R1 = R2 = R3 = 0;

执行以下步骤,循环 32次:

步骤 1:The FSM is clocked (see 错误!未找到引用源。) producing the 32-bit word F

步骤 2:Then the LFSR is clocked in Initialisation Mode (see 错误!未找到引用源。) consuming F(LFSR 运行初始 化模式,32比特F作为输入,也是输出)

3.1.4.4.2 生成密钥流

-1

s15

s11

s5

s2

s1

s0

FSM

S1

R1

R1

R2

S2

R3

22

图 3.1.3.4-2 生成密钥流流程

如图 4.2.5 所示生成密钥流流程:首先,FSM clock 一次,丢弃 FSM 输出字;然后LFSR 在密钥流模式 clock 一次。

在生成32-bit字的密钥流时,执行5次以下步骤,生成5个32比特的密钥流:

步骤 1:FSM clock,产生一个 32-bit 输出字 F;

步骤 2:计算下一个密钥流字:zt = F

s0;

步骤 3:LFSR 在密钥流模式下 clock。

3.1.4.4.3 计算得到鉴权码 MAC

根据 Eval_M 函数计算:

1) EVAL = 0;

2) For(i=0;i<=D-2;i++)

{

EVAL = MUL(EVAL

Mi, P, 0x001b );

}

3) EVAL = EVAL

MD-1;

4) EVAL = Mul(EVAL, Q, 0x001b);

5) For(i=0;i<=31;i++)

{

MAC-I[i] = ei

OTP[i];

}

根据得到的鉴权码 MAC-I,判断消息的完整性。

3.1.5 128-EIA2

3.1.5.1 EIA2 算法原理

128-EIA2基于CMAC 模式的128-bit AES算法。

MESSAGE 的比特长度称为 BLENGTH。

CMAC 模式的输入是 Mlen 长度的字符串M。M 由以下几部分组成:

M0

.. M31

= COUNT[0] .. COUNT[31]

M32

.. M36

= BEARER[0] .. BEARER[4]

M37

= DIRECTION

M38

.. M63

= 026 (i.e. 26 zero bits)

23

M64

.. MBLENGTH+63

= MESSAGE[0] .. MESSAGE[BLENGTH-1] 于是,Mlen = BLENGTH + 64.

CMAC 模式的 AES 算法使用上述输入产生消息鉴权码 T(MACT),长度 Tlen=32。T 用作 128-EIA2 算 法的输出 MACT[0] .. MACT[31],MACT[0]是 T 的 MSB。

3.1.5.2 输入和输出

void AES_CMAC(const unsigned char *key, unsigned int count, unsigned char bearer, unsigned char dir, const unsigned char

*input, unsigned short length, unsigned char *mac) 输入参数和输出参数见下表。

表 3.1.5.2-1 输入参数

参数

大小(bits)

注释

KEY 128

密钥

MESSAGE LENGTH

由需要鉴权的消息、COUNT 值、BEARER 值和

DIRECTION 构造出的数据

24

LENGTH variable>=0 消息长度(按 8位字节计算)

表 3.1.5.2-2 输出参数

参数

大小(bits)

128

消息鉴权码

注释

MAC

3.1.5.3 EIA2 算法流程图

如图 3.1.5.3-1所示,完整性保护算法EIA2的流程有以下步骤:

1)

2)

3)

4)

从 RRC层获得输入参数KEY、MESSAGE 和 LENGTH;

根据输入参数KEY 计算得到子密钥:K1,K2;

利用子密钥对 MESSAGE 加密,生成鉴权码 MAC;

验证鉴权码。

图 3.1.5.3-1 EIA2 完整性保护算法流程

注释:以上两种算法中的密钥KEY 即 KRRCint,该密钥从密钥 KeNB中获得;而 KeNB又是基于上层提供的密钥

KASME。KASME存储在UE和 MME 中,并在下一个鉴权过程中更新。

25

3.1.5.4 EIA2 算法解析

3.1.5.4.1 产生子密钥

产生子密钥的算法为 Generate_Subkey(),其输入为密钥 K,输出为两个子密钥 K1,K2,如图 4.3 所示。

K1,K2同时应用于鉴权码MAC 的生成和验证算法中。K1用于最后一个 block 长度等于整块长度的情况;

K2 适用于最后一个 block 长度小于整块长度的情况。

+ Algorithm Generate_Subkey +

++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++

+

+

+

+ Input : K (128-bit key) +

+ Output : K1 (128-bit first subkey)

+

+

K2 (128-bit second subkey)

+

+ -------------- -------------------------------------------------------- +

+ +

+ Constants: const_Zero is 0x00000000 +

+ const_Rb is 0x00000087 +

+ Variables: L for output of AES-128 applied to 0^128 +

+ +

+ Step 1. L := AES-128(K, const_Zero); +

+ Step 2. if MSB(L) is equal to 0 +

+ then K1 := L << 1; +

+ else K1 := (L << 1) XOR const_Rb; +

+ Step 3. if MSB(K1) is equal to 0 +

+ then K2 := K1 << 1; +

+ else K2 := (K1 << 1) XOR const_Rb; +

+ Step 4. return K1, K2; +

+

+

图 3.1.5.4-1 Generate_Subkey 算法

26

1) AES-128算法的输入K 和一个全零的值;

2) 按如下操作分离出K1:如果 L 最重要位的值为 0,K1就是 L从左数的第一位的值;否则,K1由const_Rb 的扩展 OR和 L 从左数的第一位的值共同得到;

3) 按如下操作分离出K2:如果 K1最重要位的值为0,K2就是L 从左数的第一位的值;否则,K2由 const_Rb 的扩展 OR和 K1从左数的第一位的值共同得到;

4) 返回 K1,K2 值。

3.1.5.4.2 生成鉴权码 MAC

生成鉴权码 MAC 的算法为 AES-CMAC(),其输入为密钥 K,消息 M 和消息长度 len;其中 M是长度为 len

的比特流,其构造如下:

M0

.. M31

= COUNT[0] .. COUNT[31]

M32

.. M36

= BEARER[0] .. BEARER[4]

M37

= DIRECTION

M38

.. M63

= 026 (i.e. 26 zero bits)

M64

.. MBLENGTH+63

= MESSAGE[0] .. MESSAGE[BLENGTH-1]

因此,len = BLENGTH + 64.

MESSAGE 为需要进行完整性保护的原始消息,其长度为 BLENGTH。EIA2 算法中,M 表示成 M_i 序列, M_i

为一个消息块。M = M_1 || M_2 || ... || M_{n-1} || M_n,i = 1,...,n-1。M_i 的长度为 128bits。

该算法的输出为鉴权码 MAC,用于证明输入消息的正确性。MAC 由 T 表示,T := AES-CMAC(K,M,len), 通过

MAC 的正确性判断来验证源端消息的完整性。

It is possible to truncate the MAC. According to [NIST-CMAC], at least a 64-bit MAC should be used as protection against

guessing attacks. The result of truncation should be taken in most significant bits first order.

AES-128 的消息块长度为 128bits。如果消息长度不等于消息块大小的整倍数,则采取特殊的处理:在最 后一个消息块中加 bit 串 10^i 使其称为一个完整的消息块。

对于一个输入流 x,填充函数 padding(x)定义如下:

- padding(x) = x || 10^i //i 等于 128-8*r-1

图 3.1.5.4-2 描述了 MAC 生成算法

+ Algorithm AES-CMAC +

27

+ +

+ Input : K ( 128-bit key ) +

+

: M ( message to be authenticated ) +

+ : len ( length of the message in octets ) +

+

Output : T ( message authentication code ) +

+

+

+ Constants: const_Zero is 0x00000000 +

+ const_Bsize is 16 +

+ +

+ Variables: K1, K2 for 128-bit subkeys +

+ M_i is the i-th block (il(len/const_Bsize)) +

+ M_last is the last block xor-ed with K1 or K2 +

+ n for number of blocks to be processed +

+ r for number of octets of last block +

+ flag for denoting if last block is complete or not +

+ +

+ Step 1. (K1,K2) := Generate_Subkey(K); +

+

Step 2. n := ceil(len/const_Bsize); +

+ Step 3. if n = 0 +

+ then +

+ n := 1; +

+ flag := false; +

+ else +

+ if len mod const_Bsize is 0 +

+ then flag := true; +

+

else flag := false; +

+ +

+ Step 4. if flag is true +

+ then M_last := M_n XOR K1; +

+ else M_last := padding(M_n) XOR K2; +

28

+ Step 5. X := const_Zero;

+ Step 6. for i := 1 to n-1 do

+

+

+

+

+

+

begin

Y := X XOR M_i;

X := AES-128(K,Y);

end

Y := M_last XOR X;

T := AES-128(K,Y);

+

+

+

+

+

+

+

+

+ + Step 7. return T;

图 3.1.5.4-2 AES-CMAC 算法

1) 根据子密钥生成算法从密钥K 中得到子密钥 K1,K2;

2) 计算消息块个数 n,取比(消息总长度除以消息块长度)大的最小整数;

3) 检查输入信息的长度,若输入的长度为 0,则消息块个数为 1,标识为不完整的消息块(失败);否则, 若最后一个消息块的长度为 128bits,则标识为完整的消息块(成功);否则,标识为不完整的消息块(失 败);

4) 根据M_n的扩展OR和一个子密钥计算M_last。如果最后一个消息块是完整的,则由M_n的扩展OR和 K1 得到

M_last;否则,由 M_n 的扩展 OR 和 K2 得到 M_last;

5)

6)

7)

初始化变量 X;

CBC-MAC 用于得到 M_1,...,M_{n-1},M_last;

得到 MAC,T := AES-CMAC(K,M,len)。If necessary, the MAC is truncated before it is returned.

3.1.5.4.3 验证鉴权码 MAC

MAC 验证可以简单的通过再计算 MAC 得到,应用的还是生成 MAC 的算法。

MAC 验证函数 Verify_MAC(),有四个输入参数:密钥 K,消息 M,消息长度 len,得到的鉴权码 MAC, 用 T '标识;输出为 INVALID 或 VALID。

图 3.1.5.4-3 描述的是 MAC 验证算法。

Algorithm Verify_MAC

29

+

+ Input

+

: K

: M

( 128-bit Key )

( message to be verified )

+

+

+

+ +

+

+

+

+

: len ( length of the message in octets )

: T' ( the received MAC to be verified )

Output

: INVALID or VALID

+

+

+--

--------------------------------------------- +

+

+ Step 1.

+ Step 2.

+

T* := AES-CMAC(K,M,len);

if T* is equal to T'

+

+

+ +

then

return VALID;

+

+

+

+ else

return INVALID; + +

图 3.1.5.4-3 Verify_MAC 算法

1) 在 MAC 生成算法中,根据 K,M 和 len 得到T*;

2) 比较T*和 T'。如果 T*=T',返回VALID;否则返回 INVALID;

如果输出为 INVALID,则证明消息不可靠;若输出为VALID,则证明消息可靠,在传输过程中没有被干 扰;尽管如此,这种确认在任何 MAC算法中都不是绝对的。

3.1.6 EIA3、EEA3(ZUC)

ZUC 算法(数学家祖冲之名字的缩写)是 CCSA 推荐给 3GPP LTE 使用的新算法,已在 3GPP SA3 立 项。目前ZUC算法已通过了算法标准组ETSI SAGE 的内部评估,通过了两个专业团队的外部评估,经过评 估后ETSI SAGE认为算法强壮,并推荐在LTE标准中使用。这将是第一个成为国际标准的我国自主的密码 算法。ZUC 算法的国际标准化,对我国按照国际惯例掌握通信产业的主动有非常重要的意义。在国家密码管 理局的大力支持下,DCS 中心成功举办了两次国际研讨会,会议结果作为必要的公众评估结论,为算法的国 际标准化奠定了基础。

ZUC 算法作为我国第一个自主产权的安全算法,受到国家乃至全球的高度重视,将全面应用于我国的LTE 系统中――作为设备入网的必选算法,并可能在网络部署时进行全网开启。在这种背景下,需要对 LTE 基站 的安全技术进行系统梳理。

30

ZUC 是一个面向字的流密码算法,初始密钥为 128 位,初始矢量为 128 位,输出每个密钥字为 32 位的 密钥流(这里每个 32位的密钥称为一个密钥字).该密钥流可用于对明文信息加解密。

使用 ZUC 算法分为两个阶段:密钥初始化阶段和产生密钥阶段.第一个阶段进行密钥初始化工作,即不 输出密钥。第二阶段是产生密钥阶段,每循环一次产生一个32位的密钥字输出。

3.1.6.1 ZUC 算法结构

ZUC有3个逻辑层,参见下图。顶层是16阶线性反馈移存器 (LFSR),中间层是位重组 层,底层为是非线性函数 F。

3.1.6.2 线性反馈移存器 LFSR

LFSR 有 16 个 31位寄存器(s0, s1,…, s15). 每个寄存器 si (0≤i≤15) 定义域为

{1,2,3, …,231-1}.

LFSR 有 2 个操作模式: 初始化模式和工作模式。 初始化模式,LFSR 接收一个 31 位的输入 u, 其产生公式为

u =(W⊕ X 3)>>1.

LFSRWithInitialisationMode(u)

{

31

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.1 工作过程

F 有 2 个 32 位的存储单元 R 1

和 R2. 输入为 X0, X1

和 X2, F 输出一个 32 位字 W. 过程如下:

F (X 0, X1, X2)

{

1. W=( X0⊕R1) ⊞ R2;

2. W1= R1⊞X1;

3.1.6.4 非线性函数 F

32

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 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 F D 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 2 E 01 D3 AD

7 3B 4B DA 46 EB C9 DE 9 A 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 E E 78 34 60

表 3.1.6.4-2 S1 (S3)盒定义

33

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.

L1

和 L2

定义为:

3.1.6.4.3 线性转换

34

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

承载标识

DIRECTION

1

方向

DIRECTION

[0]

35

IK

LENGTH

128

32

LENGTH

完整性保护密钥

IK

[0]…IK

[127]

数据流长度

输入数据流

M

输出参数:

参数

MAC

长度(bits)

32

说明

产生的验证码

3.1.6.6.2 初始化

下面介绍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 密钥流产生

根据 ZUC 算法生成L=LENGTH/32+2 个字的密钥流。记作:z[0], z[1], …, z[32×L-1]。其中,z[0]是 ZUC 输出的36

第一个字的最高有效位,z[31]是最低有效位。

对于 i=0,1,2,…,32×(L–1),zi

= z[i] ║z[i+1] ║…║z[i+31],Zi

表示一个32 位字。

3.1.6.6.4 计算 MAC

T 是一个 32 位的字,令 T=0 。

对于 i=0,1,2,…,LENGTH-1,如果 M[i]=1,则:

T=T令 T=TZi。

ZLENGTH

最终,得到 MAC,如下:

MAC= TZ32×(L-1)。

3.1.6.7 EEA3 算法实现

加密算法 128-EEA3 是一种使用密钥对数据块进行加密/解密的流加密算法。数据块的长度可以从 1 到 65504 比特。

3.1.6.7.1 输入输出

void EEA3(u8* CK,u32 COUNT,u32 BEARER,u32 DIRECTION,u32 LENGTH,u32* M,u32* C)

输入参数:

参数

COUNT

BEARER

DIRECTION

CK

LENGTH

长度(bits)

说明

32

COUNT

[0]…COUNT

[31] 本次帧号

5

BEARER

[0]…BEARER

[4]承载号,rbId-1

1

DIRECTION

[0]方向

128

CK

[0]….

CK

[127]加密密钥

32

需要加密的数据块长度,比特

LENGTH

输出参数:

M

输入明文

参数

C

长度(bits)

LENGTH

说明

输出密文

3.1.6.7.2 初始化

下面介绍 ZUC 参数如何定义:初始密钥 KEY 和初始向量 IV 是根据加密密钥 CK 和初始变量产生的。 CK 是 128 比特加密密钥,其中 CK[i] (0≤i≤15) 是一个字节。

37

CK=CK[0] ║CK[1] ║CK[2] ║…║CK[15]

设置 128 比特初始密钥 KEY 为:

KEY[i]=CK[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║DIRECTION║002,

IV[5] = IV[6] = IV[7] = 000000002,

IV[8] = IV[0], IV[9] = IV[1],

IV[10] = IV[2], IV[11] = IV[3],

IV[12] = IV[4], IV[13] = IV[5],

IV[14] = IV[6], IV[15] = IV[7].

3.1.6.7.3 密钥流产生

根据 ZUC 算法生成 L 个字的密钥流。其中,每个字可展开为 32 比特,即得到二进制字符串 z[0], z[1], …, z[32×L‐1]。其中,z[0]是 ZUC输出的第一个字的最高有效位,z[31]是最低有效位。对LENGTH 比特的消息进行加密时,L=

LENGTH/32。

3.1.6.7.4 加密/解密

加密和解密操作一样,都是对输入数据流 M 和产生的密钥流Z 进行异或操作。

M 是输入比特流,长度为 LENGTH,可表示为:

M = M[0] ║M[1] ║M[2] ║… ║M[LENGTH ‐ 1]

C 是输出比特流,长度为 LENGTH,其中 M[i]和 C[i]均为比特,i=0,1,2,…,LENGTH‐1。

C = C[0] ║C[1] ║C[2] ║…║C[LENGTH‐1]

C[i] = M[i]z[i],其中:i=0,1,2,…,LENGTH‐1。

38

3.2 算法选择

3.2.1 初始安全上下文建立过程

E-NodeB 支持的安全算法是网络通过网络管理进行配置的,包括:一个完整性算法列表和一个加密算法 列表。列表中的算法根据运营商的策略进行优先级排序。AS安全上下文建立之后,MME向 eNB发送UE的 EPS 安全能力,随后,eNB

储存UE的安全能力信息。同时,eNB 根据UE的安全能力和自己本地配置的算 法优先级,选择在本地配置的UE支持的优先级最高的算法,通过AS SMC消息通知UE。

3.2.2 X2 切换过程中算法选择

X2切换过程中在Handover Request 消息中需要将UE EPS 安全能力和加密完整性保护算法(透明盒中含 有源侧使用的算法)传给目标 eNB。随后,目标 eNB 根据UE的安全能力和自己本地配置的算法优先级,选 择在本地配置的 UE 支持的优先级最高的算法。而后,在 Handover Request Response 消息中通过透传盒传给 源 eNB ,源 eNB 发起 RRC 重配置消息将透传盒通知给 UE。

[注]:切换请求过程中携带选择的加密算法和完整性保护算法,用于目标 eNB解密 RRC重建完成消息。 比如:在切换失败的情况下,如果UE向目标eNB侧小区发送RRC重建请求消息,目标 eNB侧小区要根据 源小区的算法UE发送SRB1:RRC重建完成消息进行解密和完整性保护。

3.2.3 S1 切换过程中的算法选择

当进行S1切换时,MME将UE的安全能力信息通过HANDOVER REQUEST消息通知给目标eNB。目 标 eNB 根据

UE 的安全能力和本地配置的算法优先级,选择 UE 的安全算法,并通过 HANDOVER PREPARETION ACKNOWLEDGE 消息告知源 eNB,再通过源 eNB 的 RRC连接重配置通知给 UE。

4 密钥的生成和更新

4.1 HMAC-SHA256()算法

HMAC-SHA256()算法主要应用于密钥产生函数。密钥产生过程包括两步,第一步为 S 的生成,第二步为

HMAC 过程,使用 HMAC-SHA256()算法进行密钥生成。

4.1.1 输入输出

输入参数:

参数

Key

长度(bits)

256bit

变长

说明

主密钥

输出参数:

S

输入参数,详见 4.1.1.1 节描述

39

参数

输出密钥

长度(bits)

256

bit

说明

作为输出密钥,供相关加密/完整性保护算法使用

4.1.1.1 S 的生成

S 的生成过程如下:

输入参数:

➢ Pi 输入参数的编码(字节长度由 Li 指示)

➢ Li 输入参数 Pi 的字节长度的编码 ( Li 长度为 2 字节)

➢ FC 算法标识码 (长度为 1 字节)

各种场景下 FC/ P0 ... Ln 的取值见 4.2 节。

输出参数:S (长度为 1+(P0的长度+2)+(P2 长度+2)+…+(Pn长度+2)) 输入参数和长度链接成 S,方法如下:

整数 j 输入 KDF 编码为 Pi:

将 j 用二进制编码表示;

设 n 是比特数 , 为 8 的倍数,或者与编码后的 j 一致;

最低位= j 的二进制;如果 j 中比特数目小于 n,余下填 0。

【例1】如 Pi 是 Uplink NAS COUNT ,则 Pi 中字节数k= 4, 位长度n = 32.假设Uplink NAS COUNT 值 j = 259. 用 2

进制编码 259 是 100000011, 则

Pi 为: 0000000 0000000 00000001 00000011, 即 0x00 0x00 0x01 0x03

Li 为 0000000 00000100, 即 0x00 0x04 。

【例2】 Pi, j = 259将编码为 Pi。则 259 用二进制表示为 100000011, n表示Pi的比特 16, Pi中字 节数为 2。

Pi : 00000001 00000011, 或者 0x01 0x03 。

Li: 0000000 00000010, 即 0x00 0x02 。

2. S 是 n+1输入参数的链接 :

40

S = FC || P0 || L0 || P1 || L1 || P2 || L2 || P3 || L3 ||... || Pn || Ln

4.1.2 HMAC 过程

下图为 HMAC 过程的实现框图。

K Ipad S

HMAC-SHA256 算法框图

步骤:

第一步、填充缓冲区:

ipad = the byte 0x36 repeated B times

opad = the byte 0x5C repeated B times.

第二步、计算 数据为 text 的 HMAC 码字:

如果密钥长度大于 64 字节,首先进行哈希变换,以认证码字为新的密钥;

H(K XOR opad, H(K XOR ipad, text))

(1) 将 K 扩充成B 字节为 K1 (例如:K 长度 20 字节,而B=64 字节,则 K通过补充44 个字节的 0

41

形成64字节 ;

(2) K1 与 ipad 进行 XOR 形成新的 K2;

(3) 如 'text' 不够 64 字节扩充形成 K3;

(4) 对 K2 和 K3 链接进行 HASH256 产生输出 Out1 ;

(5) K1 与 opad 异或形成 K4;

(6) 扩充 K4 到 B 字节形成 K5;

(7) 对 K5和 Out1 链接,进行哈希变换输出 Out2。

4.1.3 SHA-256 算法

SHA-256 是一种哈希算法,能够对一则长度为 l 的消息 M 产生散列值。

4.1.3.1 SHA-256 输入输出

输入参数:

参数

M

长度(bits)

02

64说明

消息长度

即将进行哈希处理的消息,

256bit 初始化的{Y0,Y1, ..... Y7}

输出参数:

IV

参数

Digest

长度(bits)

256bit

说明

SHA-256 生成的哈希摘要

4.1.3.2 SHA-256 算法描述

一、SHA-256预处理

a.对消息M进行分拆和填充,规则如下:

设有一个任意长度的消息m,将m按512比特块进行分拆,对最后一个比特块(至少含有1比特, 多512比特)填充0或1成一个448比特的消息块:

m=m1m2m3 … mt-1mt

'

其中mk(k=1,2,…t-1)为512比特的消息块,mt'为448比特的消息块。

填充规则如下:

从m的最低位开始,先添加一个1,接着再添加若干0,使m的最后一个不足448比特的块填充成为一个448 比42

特的块。如果m分拆后的最后一个块本身就是448比特的块,则也必须按照上述方法添加一个1及若干个0, 即要填加成512比特将最后的消息块分成512及448的两个块。

b.将原始数据的长度补到已经过a步骤处理后的消息后面。用一个64位的数据来表示原始消息的比特长度。

c.最后将数据分成t个块,每块为512比特。

d. 用16 进制数初始化8 个工作变量Y0~ Y7:

Y0

=0x 6a09e667

Y1

=0x bb67ae85

Y2=0x 3c6ef372

Y3

=0x a54ff53a

Y4=0x 510e527f

Y5=0x 9b05688c

Y6

=0x 1f83d9ab

Y7=0x 5be0cd19

二、SHA-256使用的函数和常数

函数

常数:C0到C63

三、SHA-256 的散列计算

SHA-256 预处理完成后,将每个消息分组(mk)分成 16 个 32-bit 的子分组(Z0~ Z15),再按以下步骤 1 规 则变换成 64

个32-bit 的子分组(Z0~ Z63),组成一个有 64 个 32-bit 单元的消息表,按次序依次进行处理。 For k= 1 to t (说明:t为消息分组的个数)

1、计算产生消息表{ Z 0, Z1,…, Z63}

Mk的内容转换为Z 0~ Z15, Z 0包含512位中的最左32bit。

i=16 ~63的情况下:

43

2、对{X

0~ X7}赋值:

3、计算新的{X

0~ X7}:

步骤 3过程如下图所示:

4、生成中间散列值{Y

0~ Y7}:

经过t 圈循环之后,得到最后的哈希摘要结果:Y0,Y1, Y2,Y3, Y4,Y5, Y6,Y7。转换成32个字节 的序列。Y0 占用前 4 个字节,Y1占用接着的 4 个字节,如此类推。第一个字节(left-most)对应于Y0 的大 头字节(most significant)。第

32 字节对应于 Y7 的小头字节(least significant)。该 32 字节应转换为 256bit 字符串。第一个 bit(left-most)代表字节 0 的 the

most significant bit, 第 256 个 bit(left-most)代表第 32 字节 的最 he least significant bit。

44

4.2 密钥层次

与 eNB 相关的密钥包括:

用于生成完整性保护和加密密钥的 KeNB

- FC = 0x11,

- P0 = Uplink NAS COUNT,

- L0 = length of uplink NAS COUNT (i.e. 0x00 0x04)

采用256-bit KASME为主密钥,通过HMAC-SHA256 算法生成。

- FC = 0x13

- P0 = PCI (target physical cell id)

- L0 = length of PCI (i.e. 0x00 0x02)

P1 = EARFCN-DL (target physical cell downlink frequency)

- L1 length of EARFCN-DL (i.e. 0x00 0x02)

临时密钥 KeNB*

当切换时采用垂直衍生方式时采用 256-bit NH为主密钥生成,采用水平衍生方式时采用 256-bit KeNB为主密钥, 通过

HMAC-SHA256 算法生成。

45

临时密钥 NH

- FC = 0x12

- P0 = SYNC-input

- L0 = length of SYNC-input (i.e. 0x00 0x20)

采用256-bit KASME为主密钥生成,通过 HMAC-SHA256 算法生成。

用于信令数据加密的 KRRCenc

- FC = 0x15

- P0 = algorithm type distinguisher (0x03 )

- L0 = length of algorithm type distinguisher (i.e. 0x00 0x01)

- P1 = algorithm identity (0x00 、0x01、0x02、0x03)

- L1 = length of algorithm identity (i.e. 0x00 0x01)

采用256-bit KeNB为主密钥生成,通过 HMAC-SHA256 算法生成。

用于完整性保护的 KRRCint

- FC = 0x15

- P0 = algorithm type distinguisher (0x04 )

- L0 = length of algorithm type distinguisher (i.e. 0x00 0x01)

- P1 = algorithm identity (0x00 、0x01、0x02、0x03)

- L1 = length of algorithm identity (i.e. 0x00 0x01)

采用256-bit KeNB为主密钥生成,通过 HMAC-SHA256 算法生成。。 用于数据业务加密的

KUPenc

FC = 0x15

- P0 = algorithm type distinguisher (0x05 )

46

- L0 = length of algorithm type distinguisher (i.e. 0x00 0x01)

- P1 = algorithm identity (0x00 、0x01、0x02、0x03)

- L1 = length of algorithm identity (i.e. 0x00 0x01)

采用256-bit KeNB为主密钥生成,通过 HMAC-SHA256 算法生成。

Table A.7-1: Algorithm type distinguishers

Algorithm distinguisher Value

RRC-enc-alg 0x03

RRC-int-alg 0x04

UP-enc-alg 0x05

Algorithm ID Value

算法名称

EIA0 0x00 Null Integrity Protection algorithm

128-EIA1 0x01 SNOW 3G

128-EIA2 0x02 AES

128-EIA3 0x03 ZUC

4.3 接入层的密钥生成

47

eNB

Ke*NB

K eNB

HSS

MME

NCC为0时KeNB作

256

CK/IK

为输入,其他取值 NH作

作为输入

CC不变时KeNB作为输入进行水 平方SN id, SQN异或 AK

式产生密钥,NCC变化时NH 作为输入进KDF

行垂直方向产 生密钥。

eNB

Physical cell ID, EARFCN-DL

256

K

eNB

ASME

UP-enc-alg,

Alg-ID

NAS UPLINK COUNT

RRC-int-alg,

Alg-ID

RR C-enc-alg,

Alg-ID

256

256 bit

keys

K

RRCenc

K RRCint

KUPenc

256

256

截取低 128bit

Trunc

Tr unc

128 bit

KRRCint

K

keys

RRCenc

K

UPenc

网络侧密钥产生机制图

属性 密钥名称 长度 作用 产生方法

KeNB

256bit

用于计算

KUPenc、KRRCenc

初始时,取值为 KeNB(Initial);

KRRCint

后续取值为

KeNB*

中间

KeNB

256bit

根密钥

KeNB,用于生成

MME根据Uplink NAS COUNT,

密钥

(Initial)

Kamse 作为密钥生成 KeNB。对应

eNB

PDCP

层安全密钥。

NCC=0。

UE采用相同方式生成密钥。

KeNB*

256bit

用于计算切换目标小区的

KeNB*由 eNB生成。NCC 变化时

采用垂直衍生方式,根据NH及

KeNB。当切换完成后,自动

PCI/UARFCN 生成;NCC 不变

48

转为

时采用水平衍生方式,根据

KeNB使用。

KeNB 及 PCI/UARFCN 生成。

UE采用相同方式生成密钥。

NH 256bit

NH 和 NCC 总是配对使用,

每NH 由 MME 生成。NCC 为 0 时,

采用最新生成的 KeNB 作为输入,

次 NH 计算进行 NCC++, 可Kamse 作为密钥生成 NH;NCC 为

通过 HANDOVER REQ 和

其他取值时,采用上一个 NH作为

PATH SWITCH ACK 通知

输入,Kamse 作为密钥生成 NH。

eNB。当

NCC

变化时,基 站MME 接收 handover required 和

NCC

通过空口通知

UE;path switch request 时,总是进行

NH 计算,并进行 NCC++。 UE根UE

根据

NCC

取值确 定垂据空口通知的 NCC,按照相 同方直方向的密钥。

式生成 NH。

信令 数KUPenc

128bit

用于用户面下行数据加密。

根据KeNB

RRC-enc-alg

据 及

Algorithm ID

生成。

用户 数KRRCenc

128bit

据 密钥

用于下行

RRC

加密。

根据KeNB

RRC-int-alg

Algorithm ID

生成。

KRRCint

128bit

用于下行

RRC

完整性保

根据KeNB

UP-enc-alg

护。

Algorithm ID

生成。

49


本文标签: 算法 密钥 进行 消息 输入