3 f1-f5算法介绍及C语言代码设计实现 内容来自www.paper51.com 3.1 f1-f5介绍 paper51.com
AKA协议是由与GSM/GPRS中的认证及密钥分配相类似的“请求-响应”式协议组成的。整个AKA过程分为两个步骤。 http://www.paper51.com (1) 认证向量从本地环境/认证中心(HE/AuC)到访问位置寄存器(VLR)的发布。此过程由VLR发起,HE/AuC收到来自VLR的认证请求后,计算出认证向量组AV(1…n)并通过响应的方式发送给VLR。 copyright paper51.com 认证向量AV=(RAND,XRES,CK,IK,AUTN<SQN[⊕AK] ‖AMF‖MAC-A>),各参数分别为:随机数RAND、预期响应XRES、加密密钥CK、完整性密钥IK和认证令牌AUTN,以及序列号SQN、匿名密钥AK(可选,用于隐藏序列号)、认证管理域码AMF(用于支持多种认证算法和设置密钥生命期)和消息认证码MAC-A。 paper51.com
(2) 认证和密钥建立过程。VLR选择新的认证向一AV(i),并向移动台(MS)发送其中的RAND‖AUTN,用户收到的RAND‖AUTN后,计算出AK并恢复SQN,以及计算XMAC-A并将其与接收到的MAC-A进行核对。 内容来自论文无忧网 www.paper51.com AKA为了实现上述过程,利用f0-f5*算法。其中,本次设计所用到的,f1算法为消息鉴权函数,用于计算网络鉴权时的XMAC-A;f2算法为消息鉴权函数,用语用户鉴权计算XRES期望的响应值;f3算法为密钥生成函数,用于计算加密密钥CK;f4为密钥生成函数,用于计算消息完整性密钥IK;f5为密钥生成函数,用语计算匿名密钥AK,对鉴权序列号SQN加解密,防止被位置跟踪。 内容来自论文无忧网 www.paper51.com 对于f1到f5实现的问题,采用基于AES内核的算法设计,如下图流程: copyright paper51.com : paper51.com
图9 f1-f5实现流程图 http://www.paper51.com 具体示例: 内容来自www.paper51.com 取r1=64,r2=0,r3=32,r4=64;c1=0,c2=1,c3=2,c4=4 paper51.com SQN ||AMF|| SQN|| AMF:长度为128位。 内容来自www.paper51.com
OPC = OP ÅE[OP]K copyright paper51.com 5个128位的输出OUT1, OUT2, OUT3, OUT4,OUT5用表达式可如下表示: copyright paper51.com
OUT1 =E[TEMP Å rot(IN1 Å OPC, r1) Å c1]K Å OPC 内容来自论文无忧网 www.paper51.com OUT2 = E[rot(TEMPÅ OPC, r2) Å c2]K Å OPC 内容来自论文无忧网 www.paper51.com OUT3 = E[rot(TEMPÅ OPC, r3) Å c3]K Å OPC copyright paper51.com OUT4 = E[rot(TEMPÅ OPC, r4) Å c4]K Å OPC 内容来自论文无忧网 www.paper51.com
则有: copyright paper51.com
f1-f5各个函数的输出定义如下: 内容来自www.paper51.com Output of f1 = MAC-A,where MAC-A[0] .. MAC-A[63] = OUT1[0] .. OUT1[63] paper51.com Output of f2 = RES,where RES[0] .. RES[63] = OUT2[64] .. OUT2[127] copyright paper51.com
Output of f3 = CK,where CK[0] .. CK[127] = OUT3[0] .. OUT3[127] 内容来自论文无忧网 www.paper51.com
Output of f4 = IK,where IK[0] .. IK[127] = OUT4[0] .. OUT4[127] http://www.paper51.com Output of f5 = AK,where AK[0] .. AK[47] = OUT2[0] .. OUT2[47] 内容来自论文无忧网 www.paper51.com 关于OP与的OPC说明: paper51.com
一个128位的值OP,可以理解为,不同的运营商使用不同的OP。无论OP是否公开,算法都是安全的。如果运营者保密OP的值则更好。它是由运营者自己指定的 paper51.com
3.2 f1-f5的C语言代码实现 paper51.com
² 算法 f1主要代码: 内容来自www.paper51.com 计算网络认证代码mac_a。4个输入: 密钥K, 任意随机询问数rand、顺序编号SQN 和认证管理域AMF http://www.paper51.com
paper51.com 图10 f1程序流程图 内容来自www.paper51.com void f1 ( u8 k[16], u8 rand[16], u8sqn[6], u8 amf[2], u8 mac_a[8] ) paper51.com { u8 temp[16]; paper51.com u8 in1[16]; 内容来自www.paper51.com
u8 rijndaelInput[i16]; http://www.paper51.com
RijndaelKeySchedule( k ); 内容来自www.paper51.com ComputeOPc( op_c );/*产生op_c*/ http://www.paper51.com for (i=0; i<16; i++) 内容来自论文无忧网 www.paper51.com rijndaelInput[i] = rand[i] ^ op_c[i]; http://www.paper51.com
RijndaelEncrypt(rijndaelInput, temp );/*产生temp数组*/ 内容来自论文无忧网 www.paper51.com
/*将sqn和amf赋值给数组in1中*/ http://www.paper51.com for(i=0; i<16; i++) copyright paper51.com rijndaelInput[(i+8) % 16] =in1[i] ^ op_c[i]; 内容来自www.paper51.com for (i=0; i<16; i++) paper51.com rijndaelInput[i]^= temp[i]; 内容来自论文无忧网 www.paper51.com
/*将in1和op_c异或后,循环左移64位后,与temp数组异或,产生rijndaelInput*/ copyright paper51.com
RijndaelEncrypt( rijndaelInput, out1 ); paper51.com for (i=0; i<16; i++) paper51.com out1[i] ^= op_c[i]; 内容来自www.paper51.com for (i=0; i<8; i++) paper51.com mac_a[i]= out1[i]; paper51.com /* 将rijndaelInput 作为输入产生out1,并将out1与op_c异或后,取其前64位做为f1输出 */ http://www.paper51.com return; 内容来自www.paper51.com } http://www.paper51.com |