网学网为需要其他类别的朋友们搜集整理了基于GSM/GPRS服务网络端实现相关资料,希望对各位网友有所帮助!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 f1,f2,f3,f4,f5算法的研究 1.1 f1-f5的介绍 3G的认证使用5参数的认证向量AV(RAND□XRES□CK□IK□AUTN),执行AKA(Authen-tiCAtion and Key Agreement)认证和密钥协商协议, HE/HLR表示用户归属区的用户归属寄存器;AV表示认证向量;AUTN表示认证令牌;RES和XRES分别表示用户域的应答信息和服务网的应答信息;RAND表示生成的随机数;CK和IK分别表示数据保密密钥和数据完整性密钥。AKA用于USIM、访问位置寄存器(VLR)、归属位置寄存器(HLR)间的双向认证及密钥分配,3G系统为实现完备的安全功能定义了12个算法(f0,f1, f1*,.f2…f5,f5*,f6…f9)。其具体定义如下图所示: 图14 f1-f5算法图 RAND 128位的随机询问数,f1, f1*, f2, f3, f4, f5 and f5*的输入 OP 128位的运算变量,f1, f1*, f2, f3, f4, f5 and f5*的成分 RES 至多128位至少32位 OPC 从OP和K得到的128值 SQN 48位的序列值,f1and f1*的输入 SQNMS 同SQN中,指用在f1* AMF 16位的认证管理域,f1 and f1*.的输入 AMF 认证管理域码AMF(用于支持多种认证算法和设置密钥生命期) 第一组的输入: IN1[0] .. IN1[47] = SQN[0] .. SQN[47] IN1[48] .. IN1[63] = AMF[0] .. AMF[15] IN1[64] .. IN1[111] = SQN[0] .. SQN[47] IN1[112] .. IN1[127] = AMF[0] .. AMF[15] SQN ||AMF|| SQN|| AMF:长度为128位。 OPC = OP Å E[OP]K c1,c2,c3,c4,c5的定义如下: c1[i] = 0 for 0 £ i £ 127 c2[i] = 0 for 0 £ i £ 127, except that c2[127] = 1 c3[i] = 0 for 0 £ i £ 127, except that c3[126] = 1 c4[i] = 0 for 0 £ i £ 127, except that c4[125] = 1 c5[i] = 0 for 0 £ i £ 127, except that c5[124] = 1 r1, r2, r3, r4, r5定义如下: r1 = 64; r2 = 0; r3 = 32; r4 = 64; r5 = 96 移位方法是循环左移 5个128位的输出OUT1, OUT2, OUT3, OUT4, OUT5用表达式可如下表示: OUT1 = E[TEMPÅrot(IN1 Å OPC, r1) Å c1]K Å OPC OUT2 = E[rot(TEMPÅ OPC, r2) Å c2]K Å OPC OUT3 = E[rot(TEMPÅ OPC, r3) Å c3]K Å OPC OUT4 = E[rot(TEMPÅ OPC, r4) Å c4]K Å OPC OUT5 = E[rot(TEMPÅ OPC, r5) Å c5]K Å OPC 各个不同函数f1-f5的输出定义如下: Output of f1 = MAC_A, where MAC-A[0] .. MAC-A[63] = OUT1[0] .. OUT1[63] Output of f2 = RES, where RES[0] .. RES[63] = OUT2[64] .. OUT2[127] Output of f3 = CK, where CK[0] .. CK[127] = OUT3[0] .. OUT3[127] Output of f4 = IK, where IK[0] .. IK[127] = OUT4[0] .. OUT4[127] Output of f5 = AK, where AK[0] .. AK[47] = OUT2[0] .. OUT2[47] 关于OP与的OPC说明: 一个128位的值OP,可以理解为,不同的运营商使用不同的OP。无论OP是否公开,算法都是安全的。如果运营者保密OP的值则更好。它是由运营者自己指定的。 1.2 f1,f2,f3,f4,f5的实现 /*------------------------------------------------------------------- * 算法 f1 *------------------------------------------------------------------- * 计算网络认证代码mac-a 密钥K,任意随机询问数rand、顺序编号sqn 和认证管理域amf *-----------------------------------------------------------------*/ f1的程序流程图:
图15 f1的程序流程图 void f1 ( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2], u8 mac_a[8] ) { u8 op_c[16]; u8 temp[16]; u8 in1[16]; u8 out1[16]; u8 rijndaelInput[16]; u8 i; RijndaelKeySchedule( k ); ComputeOPc( op_c ); for (i=0; i<16; i++) rijndaelInput[i] = rand[i] ^ op_c[i]; RijndaelEncrypt( rijndaelInput, temp ); for (i=0; i<6; i++) { in1[i] = sqn[i]; in1[i+8] = sqn[i]; } for (i=0; i<2; i++) { in1[i+6] = amf[i]; in1[i+14] = amf[i]; } /*在常数c1的128位全为0时,循环左移64位后,op_c和in1进行异或运算 */ for (i=0; i<16; i++) rijndaelInput[(i+8) % 16] = in1[i] ^ op_c[i]; for (i=0; i<16; i++) rijndaelInput[i] ^= temp[i]; RijndaelEncrypt( rijndaelInput, out1 ); for (i=0; i<16; i++) out1[i] ^= op_c[i]; for (i=0; i<8; i++) mac_a[i] = out1[i]; /* 64位的f1输出 */ return; } /* f1结束 */ /*------------------------------------------------------------------- * 算法 f2-f5 *------------------------------------------------------------------- * f2-f5的实现均在这个函数里,即res,ck,ik,ak *-----------------------------------------------------------------*/ f2-f5的产生算法示意图: 图16 f2-f5的产生算法示意图 void f2345 ( u8 k[16], u8 rand[16], u8 res[8], u8 ck[16], u8 ik[16], u8 ak[6] ) { u8 op_c[16]; u8 temp[16]; u8 out[16]; u8 rijndaelInput[16]; u8 i; RijndaelKeySchedule( k ); ComputeOPc( op_c ); for (i=0; i<16; i++) rijndaelInput[i] = rand[i] ^ op_c[i]; RijndaelEncrypt( rijndaelInput, temp ); /* temp与opc的异或 */ * 循环左移r2=0位, 然后与常数c2异或(c2的128位只有最后一位为1,其余全为0). */ for (i=0; i<16; i++) rijndaelInput[i] = temp[i] ^ op_c[i]; rijndaelInput[15] ^= 1; RijndaelEncrypt( rijndaelInput, out ); for (i=0; i<16; i++) out[i] ^= op_c[i]; for (i=0; i<8; i++) res[i] = out[i+8]; /*64位的f2输出*/ for (i=0; i<6; i++) ak[i] = out[i]; /*48位的f5输出*/ /*.循环左移r3=32位, 然后与常数c3异或(c3的128位只有倒数第二位为1,其余全为0*/ for (i=0; i<16; i++) rijndaelInput[(i+12) % 16] = temp[i] ^ op_c[i]; rijndaelInput[15] ^= 2; RijndaelEncrypt( rijndaelInput, out ); for (i=0; i<16; i++) out[i] ^= op_c[i]; for (i=0; i<16; i++) ck[i] = out[i]; /*128位的f3输出*/ /*循环左移r4=64位, 然后与常数c4异或(c4的128位只有倒数第三位为1,其余全为0 */ for (i=0; i<16; i++) rijndaelInput[(i+8) % 16] = temp[i] ^ op_c[i]; rijndaelInput[15] ^= 4; RijndaelEncrypt( rijndaelInput, out ); for (i=0; i<16; i++) out[i] ^= op_c[i]; for (i=0; i<16; i++) ik[i] = out[i];/* 128位的f4输出*/ return; } /*f2-f5的实现结束 */ 2 测试结果 代码运行结果: 图17 运用结果图 3GPP中的测试案例: 表1 案例表
表2 案例表
表3 案例表
表4 案例表
表5 案例表
结 论 通过对AKA协议中f1-f5以及高级加密标准AES的Rijdael算法的理论和实现进行研究和分析,加深了我对这些知识的认识和理解,我对第三代移动通信有了更进一步的认识,也对Rijdael算法有了更深层次的理解和认识。 AES算法自身运算单元结构比较复杂,再加上算法设计上的紧凑性使得算法本身没有足够的空间来隐藏陷门,在研究的过程中主要侧重于算法的执行速度。 论文首先对算法的理论基础知识作了总结和归纳,介绍了Rijndael算法在变换过程中涉及到的数学基知识,为论文在下面的讨论提供数学依据。承接算法的理论基础,详细的描述了算法所遵循的设计准则和设计原理,对算法轮变换过程,即SubByte变换、ShiftRows变换、MixColumns变换和AddRoundKey变换组成进行了详细的说明和图例解释。然后对AKA协议中的f1-f5作了介绍和分析。其实f1-f5的算法实现的精髓就在于Rijndael算法的实现。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本文选自计算机毕业设计http://myeducs.cn |