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
版权声明:本文标题:LTE_Security(加密保护算法) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1709966760h552009.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论