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