IMS终端AKA认证过程的研究与实现*

2010-08-10 07:47雒江涛
电视技术 2010年2期
关键词:鉴权调用密钥

周 玮,雒江涛

(重庆邮电大学 通信网与测试技术重点实验室,重庆 400065)

1 引言

IMS被认为是下一代网络的核心技术[1],也是解决移动与固网融合,引入语音、数据、视频三重播放等差异化业务的重要方式,而IMS客户端逐渐成为开发和研究的热点。作为相对独立的安全体系,IMS要求所有的用户在使用IMS服务之前都必须进行鉴权,协商建立安全的接入通道。IMS终端需要包括IMS网络鉴权中包含的参数(如身份识别、用户授权和终端设置数据等),并存储共享密钥和相应的AKA算法。笔者通过对IMS客户端认证的研究与实现,为更好地开发客户端提供基础。

2 IMS安全体系

3GPP TS 33.203定义了IMS接入网络的安全机制,在IMS的安全体系中,从终端到网络的各个实体 (PCSCF,S-CSCF,HSS)都涉及到了接入和核心网部分的安全概念。其安全结构如图1所示[2]。

由图1可以看出,IMS的接入安全体系结构包括5个层面:1)提供用户和网络之间的双向认证。HSS产生认证数据,并且委托S-CSCF执行用户认证,认证基于保存在HSS中的密钥和函数;2)为终端和P-CSCF间的通信提供1个安全连接;3)提供网络域内CSCF和HSS间的安全;4)为不同网络间的CSCF提供安全;5)为网络内部的CSCF提供安全。

图1 IMS安全体系结构

IMS接入安全是由安全层面1)和安全层面2)的部分组成。笔者主要研究安全层面1)中终端和HSS之间的用户认证部分,该认证采用的是AKA机制。

3 AKA鉴权原理

IMS的鉴权机制采用3GPP AKA机制的原理和核心算法,因此被称为IMS AKA,该机制是基于SIP协议来实现的。RFC3310中定义的3GPP AKA参数映射到HTTP摘要认证中,AKA作为摘要式认证的一次性密钥产生机制,以支持终端对网络的认证[3]。

由于IMS中的认证过程[4]与SIP消息的注册过程直接结合在一起,以IMS终端的注册过程(见图2)分析其AKA的认证机制。

图2 IMS终端注册流程图

IMS终端在使用IMS网络之前需要先注册用户,这就需要在发送注册请求的时候携带用户的认证信息。比如用户的私有身份(IMPI)、共享密钥等。首先终端发送注册请求到P-CSCF,P-CSCF将这个注册信息转发给ICSCF,然后I-CSCF联系HSS,以获取S-CSCF的地址。根据IMPI,S-CSCF从HSS下载适合的认证向量AV。图3是HSS生成AV的过程:AKA参数核心算法由3GPP TS35.206[5]提供。

图3 认证向量产生过程

S-CSCF保存XRES值,发送401响应到P-CSCF。终端收到401响应后进行鉴权。根据接收到的Nonce值通过解码得到随机数RAND,根据RAND计算出匿名密钥AK,然后利用AK恢复出序列号SQN。根据RAND,SQN和用户保存的认证管理域AMF,利用图4所示的算法计算出期待的鉴权值XMAC、随机数的响应RES、加密密钥CK、完整性校验密钥IK。终端比较MAC和XMAC,如果相同,则验证接收到的SQN是否在正确的范围内,若不在,则向S-CSCF发送一个同步失败的信息,并中止认证流程,如果在,则将RES发送给S-CSCF。

图4 终端产生AV的过程

4 IMS终端AKA认证过程的实现

4.1 AKA认证流程设计

在终端实现认证主要是对服务器返回的401响应中SIP消息头的解析[6],它是通过SIP协议栈与服务器之间的管道返回带有鉴权信息的消息头。其算法的实现流程如图5所示。

图5 AKA算法流程图

当服务器返回401响应时,通过底层的SIP协议栈,把带有鉴权信息的SIP消息传送到应用层,也就是终端。终端收到这个响应后,开始鉴权。首先提取SIP消息头中的鉴权信息。鉴权信息中最主要的参数是Nonce值,它是由服务器端根据RAND和AUTN串接后进行BASE64编码得到的。另外还可以从解析出的消息中得到Algorithm值,用来指示服务器采用的认证机制,客户端则应该用同样的认证机制去匹配服务器。提取关键信息后,终端开始调用AKA处理方法,计算出终端鉴权所需要的RES,以及为以后安全传送信息而使用的CK和IK。并且把计算出的XMAC与从AUTN中解析出的MAC进行匹配。若相同,则用户认证网络身份通过。终端继续比较SQN,通过随机数RAND计算出匿名密钥AK,然后使用AK来恢复序列号SQN。若SQN在正确的范围内,向服务器发送携带RES的SIP消息到服务器,等待服务器端的认证。

4.2 OSIP2和eXosip协议栈

OSIP2协议栈是对OSIP协议栈的升级,其整体结构和功能同OSIP一样。OSIP是根据RFC3261(SIP)和RFC2327(SDP)标准,使用标准C语言编写的1个SIP协议栈,主要是提供SIP/SDP消息解析的API接口。OSIP主要由状态机模块、解析器模块和工具模块3部分组成。其中解析器模块主要是对SIP消息、SDP消息、URL的解析以及SIP消息头域的解析处理。笔者对AKA认证的实现,主要是通过解析器模块中对SIP消息头中携带WWW-Authenticate参数的头域解析函数的调用,实现其认证信息的获取。

eXosip是对OSIP2协议栈的封装和调用。它使用UDP socket套接字实现底层SIP协议的接收/发送。并且封装了SIP消息的解析器。eXosip使用jevent消息管道通知上层调用程序底层发生的事件,调用程序只需读取该消息管道,获得相应的事件,进行相关的处理。本文中的AKA认证实现采用eXosip中jevent消息管道传输服务器返回的响应,获取需要的认证信息,并作相应的处理。

4.3 算法的实现

根据上述对AKA算法的设计以及对OSIP2协议栈中SIP消息头域函数的调用,获取SIP消息鉴权信息,完成了对AKA认证的实现。终端发送用户的注册信息,服务器收到用户注册请求后,发送401响应给用户。用户收到服务器返回的401响应时,开始处理鉴权。

1)步骤1

调用 void imsue_process_401(eXosip_event_t*je),对服务器返回的401消息进行解码。解码的结果保存在eXosip_event_t结构体变量中,je指向该结构体变量。

2)步骤2

调用osip_message_get_www_authenticate(je->response,0,&www_header),提取返回的401消息的头域信息,将该头域信息写入www_header内,其结构定义为:

3)步骤3

调用osip_www_authenticate_get_algorithm(www_head er),得到服务器返回的用户用来生成摘要的算法。然后调用 osip_www_authenticate_get_nonce (www_header),获取nonce64,该值是将128 bit的RAND、128 bit的AUTN和可选的服务器数据串连后进行Base64编码后得到的。

4)步骤4

调 用 base64_decode_string (nonce64.s,nonce64.len,&noncelen),对获得的nonce64进行解码,提取认证中重要的参数RAND和AUTN。调用AKA(int version,str nonce 64,str k),获得 RES,CK 和 IK。 其中 version 是终端将采用的AKA算法的版本,例如Algorithm为AKAv1-MD5,设置version为1。K是共享密钥,对于软终端来说是用户输入的密码。 其中比较重要的函数有 f2(),f3(),f4(),为Milenage算法[5]中的3个子算法:f2为消息鉴权函数,用于用户鉴权计算RES期望的响应值;f3为密钥生成函数,用于计算加密密钥CK;f4为密钥生成函数,用于计算消息完整性密钥IK。

5)步骤5

调用 f1star(u8 k[16],u8 rand[16],u8 sqn[6],u8 amf[2],u8 mac_s[8]),获取 XMAC。 f1()是 Milenage 算法[5,7]中的 1个子算法,用于计算网络鉴权时的XMAC。然后将从AUTN中提取的MAC,与XMAC进行比较,结果一致,则继续对SQN进行判断,其值在规定的范围内,则终端认证结束,上传RES。

5 结果验证与案例分析

IMS终端用户注册Openims网络时抓取的数据表明这是一次成功的用户注册。下面是实测的一条终端发送的第2次注册携带鉴权信息的SIP消息数据:41 75 74 68 6f 72 69 7a 61 74 69 6f 6e 3a 20 44 69 67 65 73 74 20 75 73 65 72 6e 61 6d 65 3d 22 61 6c 69 63 65 40 6f 70 65 6e 2d 69 6d 73 2e 74 65 73 74 22 2c 50 72 65 61 6c 6d 3d 22 6f 70 65 6e 2d 69 6d 73 2e 74 65 73 74 22 2c 20 6e 6f 6e 63 65 3d 22 55 78 4b 57 76 65 56 39 5a 59 47 50 64 62 77 63 41 78 47 46 78 30 71 62 64 4e 48 4b 73 67 41 41 76 33 78 6b 6d 43 66 4d 5a 4d 41 3d 22 2c 20 75 72 69 3d 22 73 69 70 3a 6f 70 65 6e 2d 69 6d 73 2e 74 65 73 74 22 2c 20 72 65 73 70 6f 6e 73 65 3d 22 62 38 37 32 30 37 35 39 62 34 39 62 31 35 36 31 38 31 63 34 33 32 35 63 35 35 32 30 64 66 37 36 22 2c 20 61 6c 67 6f 72 69 74 68 6d 3d 41 4b 41 76 31 2d 4d 44 35。

终端实现AKA算法后进行消息的解析,其解析结果在协议分析仪中实际解析出来的消息如图6所示。

图6 实测鉴权信息

从图6中可以看出,字段Digest Authentication Res ponse是通过AKA算法实现后得到的RES,其值为“b8720759b49b156181c4325c5520df76”,对应的数据是:22 62 38 37 32 30 37 35 39 62 34 39 62 31 35 36 31 38 31 63 34 33 32 35 63 35 35 32 30 64 66 37 36 22。

6 小结

在IMS时代,终端是IMS产业链的重要组成部分。IMS终端作为IMS网络最终的受益者,其如何更安全的介入IMS网络成为今后研究的重要课题。IMS接入安全的进一步研究,需要不断完善IMS的安全机制。IMS AKA的采用使得用户接入网络的安全性越来越高。本算法可以实现成功注册到IMS网络,具有很高的实用性。

[1]程剑斋.关于构建下一代网络问题的讨论[J].电视技术,2006(8):4-5.

[2]3GPP TS 33.203 V9.0.0,3rd generation partnership project;technical specification group services and system aspects; 3G security; access security for IP-based services (release 9)[S].2009.

[3]程宝平,梁守青.IMS原理与应用[M].北京:机械工业出版社,2007.

[4]RFC3310,Hypertext transfer protocol (HTTP)digest authentication using authentication and key agreement(AKA)[S].2002.

[5]3GPP TS 29.228v7.5.0,IP multimedia (IM)subsystem Cx and Dx interfaces signalling flows and message contents (Release 7)[S].2007.

[6]POIKSELKA M,MAYER G.IMS:移动领域的lP多媒体概念和服务[M].赵鹏,周胜,望玉梅,等,译.北京:机械工业出版社,2005.

[7]3GPP TS 35.206 V8.0.0,Specification of the MILENAGE algorithm set:an example algorithm set for the 3GPP authentication and key generation functions f1, f1*, f2, f3, f4, f5 and f5*;document 2:algorithm specification(release 8)[S].2008.

猜你喜欢
鉴权调用密钥
密码系统中密钥的状态与保护*
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
TPM 2.0密钥迁移协议研究
一种对称密钥的密钥管理方法及系统
基于系统调用的恶意软件检测技术研究
移动网络用户频繁鉴权问题的优化方案探讨
基于小型核心网的LTE鉴权的一种新实现
利用RFC技术实现SAP系统接口通信
电信增值业务运营中的认证鉴权控制方案研究