admin 管理员组

文章数量: 887019


2024年3月9日发(作者:chargeof)

欧阳学创编

LTE安全功能

时间:2021.03.03

创作:欧阳学

目 录

1

概述

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

1.1

参考文献

[1]

[2]

[3]

[4]

[5]

3GPP TS 33.401:"3GPP System Architecture

Evolution (SAE); Security architecture".

3GPP 36.331 Radio Resource Control (RRC);

Protocol specification

3GPP 36.413 S1 application protocol (S1AP)

3GPP 36.423 X2 application protocol (X2AP)

3GPP TS 36.323: "Evolved Universal Terrestrial

Radio Access (E-UTRA); Packet Data

Convergence Protocol (PDCP) Specification".

1.2

术语

AES Advanced Encryption Standard

CK Cipher Key

IK Integrity Key

EARFCN-DL E-UTRA Absolute Radio Frequency

Channel Number-Down Link

EEA EPS Encryption Algorithm

EIA EPS Integrity Algorithm

欧阳学创编

欧阳学创编

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

KDF Key Derivation Function(密钥获取功能)

KSI Key Set Identifier

MAC-I Message Authentication Code for Integrity

(TS36.323 )

NCC Next hop Chaining Counter

NH Next Hop

SMC Security Mode Command

SQN Sequence Number

HFN Hyper Frame Number

LSM Limited Service Mode(受限服务模式)

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

Chaining of KeNB:

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

eKSI:

eKSI是KASME的一个指示,由MME进行分配,作用是在UE和MME中指示一个通过EPS AKA过程产生的Native KASME,可以进行KASME的重新启用。eKSI为4bit,最高位指示eKSI值是KASME还是KSGSN,剩余的三位填写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 NumberIE。

2

加密和完整性保护算法

2.1

完整性保护

参数说明:

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

一个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组成。

(1)

输入

COUNT

BEARER

32bit

5bit

由HFN和PDCP SN组成,共32bit

取值为“RB identity"-1

特例:对于EIA1算法,输入为32bit,高27bit填零,低5bit为BEARER。

0—上行,1—下行

DIRECTION 1bit

欧阳学创编

欧阳学创编

MESSAGE

LENGTH

RRC消息内容,即PDCP SDU。

(1)对于EIA1和EIA3,采用流密码加密方式,LENGTH取值为MESSAGE的bit数;

(2)对于EIA2,采用块密码加密方式,LENGTH取值为MESSAGE的字节数。

KRRCint

EIA0――空算法;

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

sonw3G;

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

EIA3――祖冲之算法ZUC;

KEY

算法

128-bit algorithms

128bit

生成KEYSTREAM BLOCK

输出

MAC-I/ XMAC-I 32bit

2.2

加密

参数说明:

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

一个128bit 密钥KUPenc;

(2)

一个5bit承载标识BEARER;

(3)

1bit传输方向DIRECTION;

(4)

密钥流的长度LENGTH;

(5)

时间以及方向。

(1)

输入

COUNT

BEARER

DIRECTION

LENGTH

32bit

5bit

1bit

16bit

由HFN和PDCP SN组成,共32bit

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

对于业务数据――DRB identity-1

0—上行,1—下行

Keystream block长度,在加密算法中,利用keystreamblock对未加密的数据的消息字段进行操作。

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

LENGTH取值为Keystream block的bit数;

(2)对于EIA2,采用块密码加密方式:

LENGTH取值为Keystream block的字节数。

对于信令数据――加密数据为PDCP DATA和MAC-I,长度为PDCP DATA长度加上MAC-I长度;而PDCP DATA即为未压缩的PDCP SDU。

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

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

对于信令数据――KRRCenc

对于业务数据――KUPenc

EEA0――空算法;

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

sonw3G;

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

KEY

算法

128bit

128-bit algorithms

欧阳学创编

欧阳学创编

EEA3――祖冲之算法ZUC;

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

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

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

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

Data PDU,对数据进行加密。

2.3

加密和完整性保护的关系

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

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

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

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

欧阳学创编

欧阳学创编

3

算法

3.1

算法介绍

3.1.1

EEA0、EIA0 (NULL Algorithm)

参见36401- Annex B /B.0。

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

输入和输出

u32f8(u8 *CK-Key, u32 Count, u32 Bearer, u32 Direction,

u8 *Data, u32 Length)

表3.1.2.2-1输入参数

参数

COUNT-C

BEAR

DIRECTION

CK

LENGTH

IBS

大小(bits)

32

5

1

128

64

LENGTH

注释

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

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

传输方向DIRECTION[0]

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

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

输入bit流,input bitstream

表3.1.2.2-2 输出参数

参数

OBS

大小(bits)

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

IV2

IV1

IV0

=

=

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

|| COUNT-C[31]

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

DIRECTION[0] || 0 || … || 0

IV3

IV2

=

=

2)

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

图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所示。

-1

s15

s11

FSM

s5

s2 s1

s0

R1

S1

R2

S2

R3

图3.1.2.4-1 密钥初始化流程

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

s15 = k3s11 = k3IV0s14= k2

s13 = k1s12 = k01s10= k21 IV2s9 = k1IV1

1 IV3s8 = k01

s7 = k3s6= k2s5 = k1s4 = k0

欧阳学创编

欧阳学创编

s3 = k31s2= k21s1 = k11s0 = k01

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

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

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

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

3.1.2.4.2

生成密钥流

-1

s15

s11

FSM

s5

s2 s1

s0

R1

zt

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 s0;

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

3.1.2.4.3

计算得到密文

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

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

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

{

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

}

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) for j = 1, 2 … n;

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

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)来实现。

3.1.3.2

输入和输出

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

表3.1.4.2-1 输入参数

参数

COUNT-C

BEAR

大小(bits)

32

5

注释

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

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

传输方向DIRECTION[0]

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

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

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

输入的明文

DIRECTION 1

IK

LENGTH

T-COUNTER

IBS LENGTH

128

64

128

表3.1.4.2-2 输出参数

参数 大小(bits) 注释

欧阳学创编

欧阳学创编

OBS LENGTH

输出的密文

3.1.3.3

EEA2算法流程图

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

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

1)

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

2)

从RRC层获得输入参数KEY;

3)

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

4)

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

5)

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

6)

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

7)

执行到最后一块则推出

8)

执行步骤4

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

3.1.4

128-EIA1

3.1.4.1

EIA1算法原理

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

3.1.4.2

输入和输出

u32 f9( const u8* key, u32 count, u32 fresh, int dir, u8

欧阳学创编

欧阳学创编

*data, u64 length)

算法的输入参数和输出参数见下表。

表3.1.3.2-1输入参数

参数

COUNT-I

FRESH

大小(bits)

32

32

注释

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

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

传输方向DIRECTION[0]

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

MESSAGE的长度,比特

输入bit流

DIRECTION 1

IK

LENGTH

MESSAGE

128

64

LENGTH

表3.1.3.2-1 输出参数

参数

MAC-I

大小(bits)

32

注释

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

3.1.4.3

EIA1算法流程图

COUNT-I

||

FRESH

||

DIRECTION || 0....0

COUNT-I

||

0000 || DIRECTION || 000

FRESH

IV3 || IV2 || IV1 || IV0

IK

K3 || K2 || K1 || K0

SNOW 3G

z1 ||

P

z2 ||

||

z3 || z4

Q

||

q32 || ... || q63

||

||

z5

OTP[0] ... OTP[31]

欧阳学创编

欧阳学创编

IV3 =

IV2 =

IV1 =

IV0 =

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

如图3.1.3.3-1所示,完整性保护算法EIA1的流程中第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]

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]

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

2)

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

z1 || z2 || z3 || z4 || z5

P || Q || OTP[0] ... OTP[31]

欧阳学创编

欧阳学创编

z1 || z2

P

MESSAGE || 0 ... 0

M0 || ... || MD-2

LENGTH

MD-1

EVAL_M

z3 || z4

Q

MUL

e0 || e1 || ... || e31

z5

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

MAC-I

(left 32 bits)

图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

-1

s15

s11

FSM

s5

s2 s1

s0

R1

S1

R2

S2

R3

图3.1.3.4-1 密钥初始化流程

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

s15 = k3s11 = k3s3 = k3IV0s14= k2

s13 = k1s12 = k01s10= k21s2= k21 IV2s9 = k11s0 = k0IV1

1

1

IV3s8 = k01

s7 = k3s6= k2s5 = k1s4 = k0

1s1 = k1FSM初始为: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

FSM

s5

s2 s1

s0

R1

zt

S1

R2

S2

R3

图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

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

3.1.4.4.3

s0;

计算得到鉴权码MAC

根据Eval_M函数计算:

1)

EVAL = 0;

2)

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

{

}

3)

EVAL = EVAL

EVAL = MUL(EVAL Mi, P,

0x001b );

MD-1;

4)

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

5)

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

{

MAC-I[i] = ei}

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

3.1.5

128-EIA2

3.1.5.1

OTP[i];

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)

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输入参数

参数

KEY

MESSAGE

大小(bits)

128

LENGTH

密钥

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

欧阳学创编

欧阳学创编

DIRECTION构造出的数据

LENGTH variable>=0

消息长度(按8位字节计算)

表3.1.5.2-2 输出参数

参数

MAC

大小(bits)

128

消息鉴权码

注释

3.1.5.3

EIA2算法流程图

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

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

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

2)

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

3)

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

4)

验证鉴权码。

注释:以上两种算法中的密钥KEY即KRRCint,该密钥从密钥KeNB中获得;而KeNB又是基于上层提供的密钥KASME。KASME存储在UE和MME中,并在下一个鉴权过程中更新。

3.1.5.4

1)

从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 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-1Generate_Subkey算法

1)

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

算法的输入K和一个全零的值;

K1:如果L最重要位的值为0,2)

按如下操作分离出K1就是L从左数的第一位的值;否则,K1由const_Rb的扩展OR和L从左数的第一位的值共同得到;

3)

按如下操作分离出K2:如果K1最重要位的值为0,K2就是L从左数的第一位的值;否则,K2由欧阳学创编

欧阳学创编

const_Rb的扩展OR和K1从左数的第一位的值共同得到;

4)

返回K1,K2值。

生成鉴权码MAC 3.1.5.4.2

生成鉴权码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 ing to [NIST-欧阳学创编

欧阳学创编

CMAC], atleast a 64-bit MAC should be used as

protection against result of truncation

should be taken in mostsignificant 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 +

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

+ +

+ 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 +

+ +

+

+ 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; +

欧阳学创编

+ Variables: K1, K2 for 128-bit subkeys

欧阳学创编

+ flag := false; +

+ else +

+ if len mod const_Bsize is 0 +

+ then flag := true; +

+ else flag := false; +

+ +

+ Step 4. if flag is true +

+

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

+

+ 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-2AES-CMAC算法

1)

根据子密钥生成算法从密钥 + then M_last := M_n XOR K1;

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)

CBC-MAC7)

得X;

用于得到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 +

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

+ +

+ Input : K ( 128-bit Key ) +

+ : M ( message to be verified ) +

+ : len ( length of the message in octets )

+

+ : T' ( the received MAC to be verified )

+

+

+

+ +

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

+ +

+

+ Step 2. if T* is equal to T' +

+ then +

Output : INVALID or VALID

+ Step 1. T* := AES-CMAC(K,M,len);

欧阳学创编

欧阳学创编

+ return VALID; +

+ else +

+ return INVALID; +

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

图3.1.5.4-3Verify_MAC算法

1)

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

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

比较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基站的安全技术进行系统梳理。

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⊕X3)>>1.

LFSRWithInitialisationMode(u)

{

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;

时间:2021.03.03

创作:欧阳学

欧阳学创编


本文标签: 算法 进行 输入 完整性 加密