根据ZUC算法生成L=?LENGTH/32?+2 个字的密钥流。记作:z[0], z[1], ?, z[32×L-1]。其中,z[0]是ZUC输出的第一个字的最高有效位,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?Zi。
令T=T?ZLENGTH。 最终,得到MAC,如下: MAC= T?Z32×(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 M 输出参数:
长度(bits) 说明 32 COUNT [0]…COUNT [31] 本次帧号 5 BEARER [0]…BEARER [4]承载号,rbId-1 1 DIRECTION [0]方向 128 CK [0]…. CK [127]加密密钥 32 需要加密的数据块长度,比特 LENGTH 输入明文 参数 C
长度(bits) 说明 LENGTH 输出密文 36
3.1.6.7.2 初始化
下面介绍ZUC参数如何定义:初始密钥KEY和初始向量IV是根据加密密钥CK和初始变量产生的。 CK是128比特加密密钥,其中CK[i] (0≤i≤15)是一个字节。
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。
37
C = C[0] ║C[1] ║C[2] ║?║C[LENGTH‐1] C[i] = M[i]?z[i],其中:i=0,1,2,?,LENGTH‐1。
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 输入输出
输入参数:
参数
长度(bits) 说明 38
Key S 输出参数:
256bit 变长 主密钥 输入参数,详见4.1.1.1节描述 参数 输出密钥 长度(bits) 256 bit 说明 作为输出密钥,供相关加密/完整性保护算法使用 4.1.1.1 S的生成
S的生成过程如下: 输入参数:
? Pi 输入参数的编码(字节长度由Li指示)
? Li 输入参数Pi的字节长度的编码 (Li长度为2字节) ? FC 算法标识码 (长度为1字节)
各种场景下FC/ P0 ... Pn/L0... 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输入参数的链接 :
39
S = FC || P0 || L0 || P1 || L1 || P2 || L2 || P3 || L3 ||... || Pn || Ln
4.1.2 HMAC过程
下图为HMAC过程的实现框图。
KIpadS(64字节)填充或hash变换如果S<64字节,则数据填充到64字节(64字节)K1K2(64字节)K3(>=64字节)opadIVK1SHA-256K2/K3连接进行SHA-256SHA-256K4K5(64字节)Out1(32字节)IVSHA-256K2/K3连接进行SHA-256SHA-256Out2(32字节)
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))
40
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库LTE - Security(加密保护算法)(8)在线全文阅读。
相关推荐: