周 瑋,雒江濤
(重慶郵電大學 通信網與測試技術重點實驗室,重慶 400065)
IMS被認為是下一代網絡的核心技術[1],也是解決移動與固網融合,引入語音、數據、視頻三重播放等差異化業(yè)務的重要方式,而IMS客戶端逐漸成為開發(fā)和研究的熱點。作為相對獨立的安全體系,IMS要求所有的用戶在使用IMS服務之前都必須進行鑒權,協商建立安全的接入通道。IMS終端需要包括IMS網絡鑒權中包含的參數(如身份識別、用戶授權和終端設置數據等),并存儲共享密鑰和相應的AKA算法。筆者通過對IMS客戶端認證的研究與實現,為更好地開發(fā)客戶端提供基礎。
3GPP TS 33.203定義了IMS接入網絡的安全機制,在IMS的安全體系中,從終端到網絡的各個實體 (PCSCF,S-CSCF,HSS)都涉及到了接入和核心網部分的安全概念。其安全結構如圖1所示[2]。
由圖1可以看出,IMS的接入安全體系結構包括5個層面:1)提供用戶和網絡之間的雙向認證。HSS產生認證數據,并且委托S-CSCF執(zhí)行用戶認證,認證基于保存在HSS中的密鑰和函數;2)為終端和P-CSCF間的通信提供1個安全連接;3)提供網絡域內CSCF和HSS間的安全;4)為不同網絡間的CSCF提供安全;5)為網絡內部的CSCF提供安全。
圖1 IMS安全體系結構
IMS接入安全是由安全層面1)和安全層面2)的部分組成。筆者主要研究安全層面1)中終端和HSS之間的用戶認證部分,該認證采用的是AKA機制。
IMS的鑒權機制采用3GPP AKA機制的原理和核心算法,因此被稱為IMS AKA,該機制是基于SIP協議來實現的。RFC3310中定義的3GPP AKA參數映射到HTTP摘要認證中,AKA作為摘要式認證的一次性密鑰產生機制,以支持終端對網絡的認證[3]。
由于IMS中的認證過程[4]與SIP消息的注冊過程直接結合在一起,以IMS終端的注冊過程(見圖2)分析其AKA的認證機制。
圖2 IMS終端注冊流程圖
IMS終端在使用IMS網絡之前需要先注冊用戶,這就需要在發(fā)送注冊請求的時候攜帶用戶的認證信息。比如用戶的私有身份(IMPI)、共享密鑰等。首先終端發(fā)送注冊請求到P-CSCF,P-CSCF將這個注冊信息轉發(fā)給ICSCF,然后I-CSCF聯系HSS,以獲取S-CSCF的地址。根據IMPI,S-CSCF從HSS下載適合的認證向量AV。圖3是HSS生成AV的過程:AKA參數核心算法由3GPP TS35.206[5]提供。
圖3 認證向量產生過程
S-CSCF保存XRES值,發(fā)送401響應到P-CSCF。終端收到401響應后進行鑒權。根據接收到的Nonce值通過解碼得到隨機數RAND,根據RAND計算出匿名密鑰AK,然后利用AK恢復出序列號SQN。根據RAND,SQN和用戶保存的認證管理域AMF,利用圖4所示的算法計算出期待的鑒權值XMAC、隨機數的響應RES、加密密鑰CK、完整性校驗密鑰IK。終端比較MAC和XMAC,如果相同,則驗證接收到的SQN是否在正確的范圍內,若不在,則向S-CSCF發(fā)送一個同步失敗的信息,并中止認證流程,如果在,則將RES發(fā)送給S-CSCF。
圖4 終端產生AV的過程
在終端實現認證主要是對服務器返回的401響應中SIP消息頭的解析[6],它是通過SIP協議棧與服務器之間的管道返回帶有鑒權信息的消息頭。其算法的實現流程如圖5所示。
圖5 AKA算法流程圖
當服務器返回401響應時,通過底層的SIP協議棧,把帶有鑒權信息的SIP消息傳送到應用層,也就是終端。終端收到這個響應后,開始鑒權。首先提取SIP消息頭中的鑒權信息。鑒權信息中最主要的參數是Nonce值,它是由服務器端根據RAND和AUTN串接后進行BASE64編碼得到的。另外還可以從解析出的消息中得到Algorithm值,用來指示服務器采用的認證機制,客戶端則應該用同樣的認證機制去匹配服務器。提取關鍵信息后,終端開始調用AKA處理方法,計算出終端鑒權所需要的RES,以及為以后安全傳送信息而使用的CK和IK。并且把計算出的XMAC與從AUTN中解析出的MAC進行匹配。若相同,則用戶認證網絡身份通過。終端繼續(xù)比較SQN,通過隨機數RAND計算出匿名密鑰AK,然后使用AK來恢復序列號SQN。若SQN在正確的范圍內,向服務器發(fā)送攜帶RES的SIP消息到服務器,等待服務器端的認證。
OSIP2協議棧是對OSIP協議棧的升級,其整體結構和功能同OSIP一樣。OSIP是根據RFC3261(SIP)和RFC2327(SDP)標準,使用標準C語言編寫的1個SIP協議棧,主要是提供SIP/SDP消息解析的API接口。OSIP主要由狀態(tài)機模塊、解析器模塊和工具模塊3部分組成。其中解析器模塊主要是對SIP消息、SDP消息、URL的解析以及SIP消息頭域的解析處理。筆者對AKA認證的實現,主要是通過解析器模塊中對SIP消息頭中攜帶WWW-Authenticate參數的頭域解析函數的調用,實現其認證信息的獲取。
eXosip是對OSIP2協議棧的封裝和調用。它使用UDP socket套接字實現底層SIP協議的接收/發(fā)送。并且封裝了SIP消息的解析器。eXosip使用jevent消息管道通知上層調用程序底層發(fā)生的事件,調用程序只需讀取該消息管道,獲得相應的事件,進行相關的處理。本文中的AKA認證實現采用eXosip中jevent消息管道傳輸服務器返回的響應,獲取需要的認證信息,并作相應的處理。
根據上述對AKA算法的設計以及對OSIP2協議棧中SIP消息頭域函數的調用,獲取SIP消息鑒權信息,完成了對AKA認證的實現。終端發(fā)送用戶的注冊信息,服務器收到用戶注冊請求后,發(fā)送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進行比較,結果一致,則繼續(xù)對SQN進行判斷,其值在規(guī)定的范圍內,則終端認證結束,上傳RES。
IMS終端用戶注冊Openims網絡時抓取的數據表明這是一次成功的用戶注冊。下面是實測的一條終端發(fā)送的第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。
在IMS時代,終端是IMS產業(yè)鏈的重要組成部分。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].北京:機械工業(yè)出版社,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].趙鵬,周勝,望玉梅,等,譯.北京:機械工業(yè)出版社,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.