摘要:IP多媒体子系统(IMS)作为3G网络的核心控制平台,其安全问题正面临着严峻的挑战。IMS的接入认证机制的实现作为整个IMS安全方案实施的第一步,是保证IMS系统安全的关键。基于认证和密钥协商(AKA)的IMS接入认证机制是由因特网工程任务组(IETF)制定,并被3GPP采用,广泛应用于3G无线网络的鉴权机制。此机制基于“提问/回答”模式实现对用户的认证和会话密钥的分发,由携带AKA参数的SIP消息在用户设备(UE)和IMS网络认证实体之间进行交互,按照AKA机制进行传输和协商,从而实现用户和网络之间的双向认证,并协商出后续通信所需的安全性密钥对。 

移动通信的安全问题正越来越多地受到关注。2G网络主要传输语音业务,采用的是单向的用户认证方案,即网络能够验证用户身份是否合法,而用户无法确认其所连接的网络服务是否可靠。然而,3G网络将会演变成一个覆盖全球的集有线、蜂窝和卫星通信于一体的全网,不仅支持传统的语音和数据业务,还支持交互式和分布式的业务,如多媒体业务、电子商务、网上银行等。随着各种信息服务的蓬勃开展,各种机密性、敏感性、隐私性的数据的传输会大大增加,这对网络的安全性提出了更高的要求。 
  IP多媒体子系统(IMS)是3G网络的核心控制平台,具有基于会话初始协议(SIP)的全IP架构,IP协议固有的缺陷和安全漏洞使IMS很容易遭受攻击。另外,IMS对开放性接入的支持也对其网络安全提出挑战。如何保证用户安全地接入网络,保证IMS网络的可靠部署进而走向商用,成为了重中之重的问题。因此,研究IMS网络的安全接入认证机制有着十分重要的现实意义。 
  3GPP已经成立了专门的工作组SA WG3负责3G网络安全方面的标准化工作,已经发布的IMS安全标准主要有:3GPP TS33.102: 3G网络安全架构、3GPP TS33.203: IMS接入网络的安全机制、3GPP TS33.210: IMS核心网络的安全机制。 
   
1 IMS的安全体系结构 
   
  作为相对独立的安全体系,IMS要求所有的用户在使用IMS服务之前都必须进行鉴权(认证和授权),协商建立安全的接入通道。用户和网络实体之间以及网络实体之间的通信必须时刻处于安全保护之中。IMS安全体系的整体思想是使用因特网协议安全(IPSec)的安全特性为IMS系统提供安全保护。IMS安全体系架构如图1所示,分为5个安全层面。 
  IMS安全架构的5个安全层面应用于IMS安全保护中不同的需求: 
  安全层面1提供用户和网络之间的双向身份认证。归属用户服务器(HSS)负责产生认证数据,并且委托服务呼叫会话控制功能(S-CSCF)执行用户认证的操作。认证基于由IP多媒体服务身份模块(ISIM)和HSS共享的密钥和算法。 
  安全层面2为用户设备(UE)和代理呼叫会话控制功能(P-CSCF)之间的通信提供安全关联,包括加密和完整性保护,并通过IPSec提供接入安全保护。 

安全层面3提供网络域内呼叫会话控制功能(CSCF)和HSS之间的安全关联。 
  安全层面4为不同网络间的CSCF提供安全保护,适合于P-CSCF位于访问网络的情况。 
  安全层面5在网络内部的不同CSCF间提供安全保护,适合于P-CSCF位于归属网络的情况。 
  图1中的安全层面1和安全层面2属于IMS接入安全机制。IMS的接入安全机制承担着两大任务:一是对接入用户的鉴权;二是在鉴权结束之后,在UE和P-CSCF之间建立IPSec安全关联(IPSec SA),为后续SIP信令的交互提供安全保护。本文主要对基于认证和密钥协商(AKA)机制的IMS安全接入认证机制进行研究。 
   
2 IMS的接入安全机制 
2.1 IMS AKA机制概述 

  AKA机制是由因特网工程任务组(IETF)制定、并被3GPP采用,广泛应用于3G无线网络的鉴权机制。IMS的鉴权机制沿用了这种机制的原理和核心算法,故称之为IMS AKA机制。 
  IMS AKA机制是对HTTP摘要认证机制的扩展,主要用于用户的认证和会话密钥的分发,它的实现基于一个长期共享密钥(Key)和一个序列号(SQN),它们仅在HSS的认证中心模块(AuC)和UE的ISIM中可见。由于HSS不与UE直接通信,而是由S-CSCF执行认证过程,因此它们不会将真实的Key暴露给外界。 
  IMS AKA机制使用“提问/回答”的模式实现用户和网络之间的双向认证,并通过协商产生的密码对(CK, IK)作为IPSec SA所需的密钥,为后续的通信提供安全保护。IMS AKA机制是基于SIP协议来实现的。AKA与SIP的结合在IETF RFC3310中定义。在IMS的注册过程中,携带AKA参数的SIP信令在UE和IMS网络认证实体之间进行交互,按照AKA机制来传输和协商AKA参数,从而实现接入认证和密钥协商的过程。

2.2 IMS接入认证的实现 
  通过IMS注册过程实现基于AKA机制的IMS接入认证的具体流程如图2所示。 
  (1) 用户发起注册请求 

    用户在使用IMS服务之前必须向IMS网络进行注册,注册的目的是将用户的私有身份(IMPI)与用户想要注册的公开身份(IMPU)绑定。每个用户只有一个IMPI,而可拥有多个IMPU,每个IMPU对应相应的服务配置。 
  UE在初始的注册请求SIP REGISTER消息中发送它的IMPI,该IMPI保存在ISIM应用中,只用于认证和注册过程。这个初始的REGISTER消息的主要头域和参数如图3所示。 


  由于3GPP AKA被映射到HTTP摘要机制,因此认证方案的值被设置为“Digest”,而“response”和“nonce”域的值在初始注册请求消息中都设置为空。P-CSCF将这个REGISTER消息转发给I-CSCF,I-CSCF联系HSS,以选择为用户提供服务的S-CSCF,然后将REGISTER请求消息转发给选定的S-CSCF。当S-CSCF收到REGISTER消息后,如果发现该用户还没有被认证,则S-CSCF向HSS发送多媒体认证请求(MAR)消息以请求认证数据。 
  (2) 计算认证向量 
  HSS收到MAR消息之后,运行AKA算法,为该用户计算认证向量(AV),计算过程如下:HSS中的AuC运行AKA机制,首先产生最新的序列号SQN和一个不可预测的随机提问数(RAND)。然后HSS将根据它与该UE之间的共享密钥Key,以及刚刚产生的SQN和RAND来计算其他的参数,其原理如图4所示,AKA参数核心算法由3GPP TS35.206提供。 


  其中,各个参数的计算公式如下( ?茌表示按位异或,|| 表示串接): 
  计算消息认证码(MAC):MAC = F1K(SQN || RAND || AMF) ; 
  计算期望的认证应答(XRES):XRES = F2K (RAND); 
  计算保密性密钥(CK):CK = F3K (RAND); 
  计算完整性密钥(IK):IK = F4K (RAND); 
  匿名密钥(AK):AK = F5K (RAND); 
  网络认证令牌(AUTN):AUTN = SQN?茌AK || AMF || MAC; 
  AV:AV=RAND||XRES||CK||IK||AUTN; 
  AK用来隐藏SQN,因为SQN可能会暴露用户的位置信息。如果不需要隐藏SQN,那么AK被设置为0。 

   (3) 网络向用户提问 
  HSS通过上述的计算过程得到了一组AV,其中每个AV都是一个五元组(RAND, XRES, AUTN, CK, IK),该认证五元组并不包括Key和SQN本身。然后,HSS将这些认证数据通过多媒体认证应答(MAA)消息发送给S-CSCF。 
  S-CSCF从HSS得到所需的安全相关的参数,即所谓的AV。这些参数使得S-CSCF可以在不需要知道共享密钥Key和SQN的情况下就可以执行认证过程。 
  S-CSCF将剔除XRES的AV包含在401 Unauthorized应答消息的WWW-Authenticate头域中向用户提问,401应答主要的头域和字段如图5所示。 


  其中,在nonce字段填入了将RAND和AUTN参数串接后进行Base64编码后的字符串。在ik和ck字段加入完整性密钥和保密性密钥。在algorithm字段放入值“AKAv1-MD5”,表示使用的是3GPP AKA认证机制。 
  当接收到S-CSCF返回的401应答消息后,P-CSCF在将其发往UE之前,将其中的完整性密钥IK和保密性密钥CK保存下来,并将它们从AV中删除掉(IK,CK这两个参数不能暴露,网络认证通过后,UE的ISIM会根据收到的AV,重新计算出来)。 
  (4) 用户认证网络身份 
  接收到网络返回的401应答消息后,UE将接收到的AKA参数传递给ISIM应用,由ISIM模块运行AKA算法,执行以下工作: 
  首先基于ISIM中存储的共享密钥Key来校验网络认证令牌AUTN,如果AUTN校验成功,网络就被认证通过(即确认认证数据是从归属网络中发来的)。ISIM计算AKA参数的过程如图6所示。UE中的认证服务模块通过随机数RAND计算出匿名密钥AK,然后使用匿名密钥AK来恢复序列号SQN,接着通过得到的序列号SQN、RAND和ISIM中保存的认证管理域AMF来计算期望的消息认证码XMAC。将计算得到的期望的消息认证码XMAC和从网络认证令牌AUTN中取得的由HSS计算的消息认证码MAC相比较。如果这两个参数一致,那么用户认证网络身份成功,接着进行下面的步骤;如果不一致,则用户认证网络身份失败,UE向网络发送不携带response字段的REGISTER消息,以此通知网络提问无效。 


  如果用户认证网络身份成功,UE将接着检查序列号SQN是否在正确的范围之内(比较这次提问的序列号SQN是否比上次提问时使用的SQNi大)。如果SQN在正确的范围之内(即SQN>SQNi,将SQNi更新为SQN,并保存,以备下次使用),UE将会计算认证应答(RES)。如果SQN不大于SQNi,则认为本次提问的AV是不新鲜的,UE与网络失同步,则UE计算重同步参数AUTS,使用携带该重同步参数的REGISTER消息重新发起注册请求。 
  如果UE确认SQN在正确的范围之内,则接着计算保密性密钥CK和完整性密钥IK。 
  至此,UE和S-CSCF都知道了密钥对CK和IK,可以用于进行下面的数据加密。UE将会保存CK和IK,直到下一次成功执行了AKA过程。 
  最后,UE在发往S-CSCF的第二个REGISTER请求中返回认证挑战应答RES。 
  (5) 网络认证用户身份 
  P-CSCF将这个携带认证应答的REGISTER消息转发给I-CSCF,I-CSCF重新查询HSS以发现S-CSCF,然后将REGISTER消息转发给S-CSCF。当S-CSCF接收到REGISTER消息之后,进行解析并从认证头域Authorization中取出相应的参数: 
  如果Authorization头域中的response字段为空,再检查重同步参数字段auts是否为空:如果AUTS参数不为空,说明UE检查出了SQN同步失败,S-CSCF使用这个重同步参数AUTS重新向HSS请求认证数据,当下载认证数据成功后,再用新的认证向量重新向UE提问。如果AUTS参数也为空,说明S-CSCF的提问无效,S-CSCF选择下一个认证向量,重新用401消息进行提问。如果S-CSCF用完了所有的认证向量后,用户仍然无法确认网络身份,S-CSCF认为本次认证失败,放弃本次认证过程,并发送403 Forbidden消息通知用户。 
  如果Authorization头域中的response字段不为空,则S-CSCF取出其中的认证应答RES参数,并将其和保存在S-CSCF中的认证应答XRES相比较。如果一致,S-CSCF就认为用户回答提问正确,认证用户身份成功,允许用户接入网络,同时向UE回送200 OK消息;如果不一致,S-CSCF就认为用户回答提问错误,认证用户身份失败,S-CSCF不允许用户接入网络,那么S-CSCF应该发送403 Forbidden应答消息给UE,通知认证失败,并且放弃本次认证过程。

3 IMS AKA机制的安全性分析

3.1 IMS AKA机制实现的安全能力 
  从上述对基于AKA的IMS接入认证机制的原理和实现过程的分析可以看出,IMS AKA机制实现了以下安全目标。 
  (1) 用户和网络之间的双向认证 
  S-CSCF对UE的认证是通过RES实现的:如果UE合法,它能够正确地计算出RES,且RES等于XRES;UE对S-CSCF的认证是通过MAC实现的:UE收到S-CSCF转发的MAC后,计算期望的消息认证码(XMAC),如果MAC和XMAC一致,则认证成功。 
  (2) UE和P-CSCF之间的密钥协商分配 
  P-CSCF收到的来自HSS的AV中包含了保密性密钥(CKHSS)和完整性密钥(IKHSS)。合法的用户在收到正确的RAND之后,能正确地产生CKUE和IKUE,且CKHSS等于CKUE,IKHSS等于IKUE。CK和IK用于其后的保密通信,而CK和IK并没有在空中接口中传输,确保了密钥的安全性。 
  (3) UE与S-CSCF间密钥的新鲜性 
  由于每次通信前的认证选择了不同的AV,保证了每次通信采用的CK和IK都是由不同的RAND计算得到的。而每次使用的MAC是由不断递增的SQN作为输入变量之一,从而确保了密钥的新鲜性,有效地防止了重放攻击。 
  (4) 认证应答RES的安全 
  当UE计算出认证应答RES之后,使用名为“AKAv1-MD5”的摘要算法(实际上就是一个单向的哈希函数)来计算RES的摘要,然后将该摘要发送到S-CSCF。S-CSCF也使用同样的方法计算出期望的认证应答(XRES)的摘要值,通过比较这两个摘要值是否一致来认证用户的身份。通过这样的方法,即使攻击者窃听到RES的值,但是由于摘要算法是单向的哈希函数,根本无法反推出RES的值,因此不能危害网络安全。 
  由上面的分析,可以看到IMS AKA机制具有相当强大的安全能力来实现用户和服务网络之间的双向认证以及密钥协商,并且能够保证协商的保密性密钥和完整性密钥的新鲜性。因此,AKA机制在3G网络的接入认证机制的实现中得到了相当广泛的应用。 
3.2 IMS AKA机制的安全隐患及解决方案 
  在实际应用中,IMS AKA机制的一些安全漏洞渐渐暴露出来。下面将对IMS AKA机制在注册过程中存在的一些安全隐患及现有的解决方案进行介绍。 
  (1) 虽然UE和P-CSCF之间可以通过AKA机制协商的安全性密钥对SIP信令进行加密性和完整性保护,但是初始注册请求REGISTER消息却是在安全密钥尚未协商的时候发送的,故该消息没有受到任何安全保护而且是用明文发送的,攻击者可以轻而易举地获取用户的注册信息,从而造成用户隐私泄密。 
  SIP协议对此进行了安全扩展:对SIP消息取摘要值,并且由SIP消息携带这个摘要值一同发送。在接收端对收到的SIP消息计算摘要值,如果和原摘要值一致,说明这个SIP消息没有被修改过,受到了完整性保护。虽然即便是这样,还是不能杜绝攻击者窃听SIP消息,可是至少攻击者无法偷偷修改消息内容,这样对SIP消息的安全性能有一定程度的提高。 
  (2) 向IMS网络注册时,至少需要发送两次REGISTER请求,用户与网络之间的SIP交互过于繁琐,并且SIP消息携带的认证头域(如Authorization头域和WWW-Authenticate头域)带有众多AKA参数,导致SIP消息长度大幅增加。由于网络带宽的限制,传输延迟将会十分明显,用户通过注册接入网络的耗时将会比较长,影响用户的使用感受。可以采用压缩SIP消息[9]的方法来在一定程度上改善服务质量,特别是在无线环境下能大大缩短呼叫建立的时间。 
  (3) 在基于AKA的接入认证过程中,UE并没有对IMS核心网络的接入点P-CSCF进行身份认证,会给攻击者提供冒充中间人实施攻击的机会。参考文献[10]中提出的基于传输层安全协议(TLS)的IMS接入认证机制能对这一缺陷进行改进,但也仅仅是在理论阶段,还没有接受实际应用的考证。 
   
4 结束语 
  IMS作为下一代网络的发展方向,作为移动网络和固定网络的融合平台,为用户提供端到端的IP多媒体业务,这种基于SIP的全IP的开放网络特性给IMS网络的安全带来了极大的挑战。如何保证用户安全地接入网络是整个IMS安全方案实施的第一步,只有实现安全的接入认证机制,才能保证IMS网络的可靠部署,进而走向商用。 
  IMS AKA机制虽然被广泛地应用,但正如没有任何一种技术是十全十美的道理一样,IMS AKA机制本身也存在一些不太合理的地方,目前也有许多的组织和个人对IMS AKA机制提出了许多增强和完善的建议,但除了SIP的安全扩展机制以外,还没有哪一种改进方案被标准化采用。但无疑正是这种不断的推陈出新,使得网络的安全性越来越高。IMS AKA机制中仍有一些有待改进的开放性问题,希望在以后的研究工作中能对其进行改进: 
  (1) 通过使用序列号,用户可以保证认证信息(如RAND和AUTN)是没有被攻击者或者是被服务网络使用过的。服务网络通过检验用户认证应答RES来判断用户是否知道他和网络之间的共享密钥,以此来认证用户身份。然而,用户却仅仅只能检测出认证向量是否由归属网络产生,也就是说,用户不能判断收到的认证向量是否是他请求服务的服务网络所申请的,因为任何服务网络都可以向归属网络请求认证向量。这种安全漏洞也会给攻击者提供机会。 
  (2) SQN重同步的过程也并不很合理,因为只要UE检查出来SQN不在正常的范围之内,它就会发起重同步过程,而不关心SQN同步失败的真实原因。但是事实上即使序列号不在正确的范围内,也并不代表HSS中的计数器SQN_HN发生了同步失败,有可能是恶意的攻击者重放提问引起的。UE不关心真实的原因,不断进行重同步过程,这必然会加大服务网络和归属网络之间的通信负荷,严重延迟用户接入网络的时间,甚至最后无法接入网络,严重影响用户的使用感受。但是这个问题的改进可能要涉及到对IMS AKA机制的改进。本文主要研究安全接入认证机制,当实现用户的安全接入之后,如何建立IPSec SC的过程暂不涉及,将在以后的工作中进一步研究。

作者简介:

周星,北京邮电大学网络与交换技术国家重点实验室在读硕士研究生。本科毕业论文获校级优秀论文奖,研究方向为下一代网络技术。 
   
卢美莲,北京邮电大学网络与交换技术国家重点实验室副教授,硕士生导师。主要研究方向为新一代网络和服务的体系结构、协议以及相关支撑技术,多媒体业务及各种新型增值业务技术等。已主持和参加20余项国家级和国际国内合作项目,获部级奖励3次。已发表论文近20篇,申请发明专利7项。 
   
陶徐,北京邮电大学网络与交换技术国家重点实验室在读硕士研究生,主要研究方向为下一代网络技术。