?-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 = k3 ? IV0 s11 = k3 ? 1 s7 = k3 s3 = k3 ? 1
s14= k2
s13 = k1
s12 = k0 ? IV1
s10= k2 ? 1 ? IV2 s9 = k1 ? 1 ? IV3 s8 = k0 ? 1 s6= k2
s5 = k1
s4 = k0 s0 = k0 ? 1
s2= k2? 1 s1 = k1 ? 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 生成密钥流
21
?-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 ? s0; 步骤3:LFSR 在密钥流模式下clock。
3.1.4.4.3 计算得到鉴权码MAC
根据Eval_M函数计算: 1) EVAL = 0;
2) For(i=0;i<=D-2;i++)
{ }
3) EVAL = EVAL ? MD-1;
4) EVAL = Mul(EVAL, Q, 0x000000000000001b); 5) For(i=0;i<=31;i++)
22
EVAL = MUL(EVAL ? Mi, P, 0x000000000000001b );
{ }
根据得到的鉴权码MAC-I,判断消息的完整性。
MAC-I[i] = ei ? OTP[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)
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位字节计算) 23
表3.1.5.2-2 输出参数
参数 MAC 大小(bits) 128 消息鉴权码 注释 3.1.5.3 EIA2算法流程图
开始获取输入参数KEY、MESSAGE、LENGTH根据输入参数KEY计算得到子密钥生成鉴权码MAC检验鉴权码结束
图3.1.5.3-1 EIA2完整性保护算法流程
如图3.1.5.3-1所示,完整性保护算法EIA2的流程有以下步骤:
1) 从RRC层获得输入参数KEY、MESSAGE和LENGTH; 2) 根据输入参数KEY计算得到子密钥:K1,K2;
3) 利用子密钥对MESSAGE加密,生成鉴权码MAC; 4) 验证鉴权码。
注释:以上两种算法中的密钥KEY即KRRCint,该密钥从密钥KeNB中获得;而KeNB又是基于上层提供的密钥KASME。KASME存储在UE和MME中,并在下一个鉴权过程中更新。
24
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 0x00000000000000000000000000000000 + + const_Rb is 0x00000000000000000000000000000087 + + 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算法
25
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库LTE - Security(加密保护算法)(5)在线全文阅读。
相关推荐: