AKA鉴权


AKA鉴权

目前IMS的鉴权的机制有Sip DigestAKACAVE-based AKA三种。

 

在《中国电信IMS网络SIP协议总体技术要求》里对这三种方式的适用范围描述如下:

  • SIP Digest 鉴权适用于无ISIM 卡的移动和固定终端

  • AKA 鉴权适用于具有ISIM 卡的移动和固定终端

  • CAVE-based AKA 鉴权适用于具有R-UIM 卡的移动终端

     

    在《中国电信IMS网络SIP IAD设备技术要求》里仅要求必须支持Sip Digest,其它方式没有特别说明。

     

    Sip Digest机制目前我们已经实现了,考虑到设备已经开始支持插入SIM卡,所以当前需要实现AKA鉴权机制。

     

    AKA机制是由IETF制定、并被3GPP采用,广泛用于3G无线网络的鉴权机制。IMS的鉴权机制沿用了这种机制的原理和核心算法,故称之为IMS-AKA机制。

     

    IMS AKA 机制是对HTTP摘要认证机制的扩展,主要用于用户认证和会话密钥的分发,它的实现基于一个长期共享密钥(KEY)和一个序列号(SQN),它们仅在HSSUE中可见,由于HSS不与UE直接通信,而是由S-CSCF执行认证这程,因此它们不会将真实的KEY暴露给外界。

一、正常情况

 

  1. 用户发起注册请求

    用户在使用IMS服务之前必须向IMS网络进行注册,注册的目的是将用户的私有标识(IMPI)与用户想要注册的公有标识(IMPU)绑定。每个用户只有一个IMPI,而可拥有多个IMPU,每个IMPU对应相应的服务配置。(参见《IMS标识》小节)。

    UE在初始的注册请求SIP REGISTER消息中发送它的IMPI,该IMPI对应我们当前设备的鉴权用户的配置。这个初始的REGISTER消息的主要头域和参数如下所示。

    REGISTER        sip:open-ims.test SIP/2.0

    Authorization:Digestusername="[email protected]",

    realm="open-ims.test",

    nonce="",

    uri="sip:open-ims.test",

    response="",

    algorithm=AKAv1-MD5

     

  • 由于3GPP AKA被映射到HTTP摘要机制,因此认证方案的值被设置为Digest”

  • username为用户的私有用户标识,将被S-CSCFHSS用于识别用户并找到相应的AV

  • response”nonce”域的值在初始注册请求消息中都设置为空

  • realmk uri设置为用户的归属域

     

    P-CSCF将这个REGISTER消息转发给I-CSCFI-CSCF联系HSS,以选择为用户提供服务的S-CSCF,然后将REGISTER请求消息转发给选定的S-CSCF。当S-CSCF收到REGISTER消息后,如果发现该用户还没有被认证,则S-CSCFHSS发送多媒体认证请求(MAR)消息以请求认证数据。

     

  1. HSS计算认证向量

    HSS收到MAR消息之后,运行AKA算法,为该用户计算认证向量(AV),计算过程如下:首先产生最新的序列号SQN和一个不可预测的随机提问数(RAND)。然后HSS将根据它与该UE之间的共享密钥Key,以及刚刚产生的SQNRAND来计算其他的参数,其原理如下图所示。

     

    AKA鉴权_第1张图片

     

其中,各个参数的计算公式如下(按位异或,||表示串接)

  • 计算消息认证码(MAC)MAC = F1K(SQN || RAND || AMF)

  • 计算期望的认证应答(XRES)XRES = F2K (RAND)

  • 计算保密性密钥(CK)CK = F3K (RAND)

  • 计算完整性密钥(IK)IK = F4K (RAND)

  • 匿名密钥(AK)AK = F5K (RAND)

  • 网络认证令牌(AUTN)AUTN = (SQNAK )|| AMF || MAC

  • AVAV=RAND||XRES||CK||IK||AUTN

 

AK用来隐藏SQN,因为SQN可能会暴露用户的位置信息。如果不需要隐藏SQN,那么AK被设置为0

  1. 网络向用户提问

    HSS通过上述的计算过程得到了一组AV,其中每个AV都是一个五元组(RAND, XRES, AUTN, CK, IK),该认证五元组并不包括KeySQN本身。然后,HSS将这些认证数据通过多媒体认证应答(MAA)消息发送给S-CSCF

     

    S-CSCFHSS得到所需的安全相关的参数。这些参数使得S-CSCF可以在不需要知道共享密钥KeySQN的情况下就可以执行认证过程。S-CSCF基于AV中的数据,通过401响应返回WWW-Authenticate消息。

     

    SIP/2.0 401Unauthorized

    WWW-Authenticate:Digest realm=” open-ims.test”,

             nonce=ABDFER+FBDF4GDF45GGDF,

             algorithm=AKAv1-MD5,

             ik=”345345345345cbcvb”,

             ck=”224234324cvvcbvbv”

     

  • 去除了XRES元素,S-CSCF保存在本地,用于后续终端把鉴权响应结果发送过来后,对比终端的合法性。

  • 其中,在nonce字段填入了将RANDAUTN参数串接后进行Base64编码后的字符串。

  • ikck字段加入完整性密钥和保密性密钥。

  • algorithm字段放入值AKAv1-MD5”,表示使用的是3GPP AKA认证机制。

     

    P-CSCF接收到S-CSCF返回的401应答消息后,在将其发往UE之前,将其中的完整性密钥IK和保密性密钥CK保存下来,并将它们从AV中删除掉(这两个元素属于AKA算法的附属产品,用于后期终端与P-CSCF之间实现安全机制的密钥使用,参见《安全机制协商》),然后将响应发往UE

     

    SIP/2.0 401Unauthorized

    WWW-Authenticate:Digest realm=” open-ims.test”,

             nonce=ABDFER+FBDF4GDF45GGDF,

             algorithm=AKAv1-MD5

     

  1. 用户认证网络身份

    UE接收到网络返回的401应答消息后,进行AKA算法,执行以下工作:

  • 首先基于存储的共享密钥Key来校验网络认证令牌AUTN,如果AUTN校验成功,网络就被认证通过(即确认认证数据是从归属网络中发来的)。计算AKA参数的过程如下图片所示。UE中的认证服务模块通过随机数RAND计算出匿名密钥AK,然后使用匿名密钥AK来恢复序列号SQN,接着通过得到的序列号SQNRAND和配置保存的认证管理域AMF来计算期望的消息认证码XMAC。将计算得到的期望的消息认证码XMAC和从网络认证令牌AUTN中取得的由HSS计算的消息认证码MAC相比较。如果这两个参数一致,那么用户认证网络身份成功,接着进行下面的步骤;如果不一致,则用户认证网络身份失败,UE向网络发送不携带response字段的REGISTER消息,以此通知网络提问无效。

     

    AKA鉴权_第2张图片

     

  • 如果用户认证网络身份成功,UE将接着检查序列号SQN是否在正确的范围之内(比较这次提问的序列号SQN是否比上次提问时使用的SQNi大)。如果SQN在正确的范围之内(即SQN > SQNi,将SQNi更新为SQN,并保存,以备下次使用),UE将会计算认证应答(RES)。如果SQN不大于SQNi,则认为本次提问的AV是不新鲜的,UE与网络失同步,则UE计算重同步参数AUTS,使用携带该重同步参数的REGISTER消息重新发起注册请求(参见(SQN同步失败情况))。

  • 如果UE确认SQN在正确的范围之内,则接着计算保密性密钥CK和完整性密钥IK,并将CKIK进行保存,用于后继与P-CSCF之间实现安全机制的密钥使用,参见《安全机制协商》。

  • 最后,UE在发往S-CSCF的第二个REGISTER请求中返回认证挑战应答RES

     

    REGISTER        sip:open-ims.test SIP/2.0

    Authorization:Digestusername="[email protected]",

    realm="open-ims.test",

    nonce=" ABDFER+FBDF4GDF45GGDF ",

    uri="sip:open-ims.test",

    response="sfsdfrty6567567gjghtyu"

     

    5) 网络认证用户身份

    P-CSCF将这个携带认证应答的REGISTER消息转发给I-CSCFI-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认为本次认证失败,放弃本次认证过程,并发送403Forbidden消息通知用户。《参见(SQN同步失败情况)》

  • 如果Authorization头域中的response字段不为空,则S-CSCF取出其中的认证应答RES参数,并将其和保存在S-CSCF中的认证应答XRES相比较。如果一致,S-CSCF就认为用户回答提问正确,认证用户身份成功,允许用户接入网络,同时向UE回送200 OK消息;如果不一致,S-CSCF就认为用户回答提问错误,认证用户身份失败,S-CSCF不允许用户接入网络,那么S-CSCF应该发送403 Forbidden应答消息给UE,通知认证失败,并且放弃本次认证过程。

二、SQN同步失败情况

每个终端为每一轮认证过程维护一个序列号,如果终端检测到超出了序列号码范围之外的认证请求,那么它就放弃该认证并向网络返回一个同步失败消息,一定程度上可以避免重放攻击。

 

完整AKA鉴权流程请参考上节《正常情况》,该小节仅描述涉及SQN同步失败情况下的一些关键处理点。

 

在第12步流程中,UES-CSCF发来的AUTN中恢复SQN,此时UE发现SQN同步校验失败,UE在进行第二个Register消息Authorization头域中增加AUTS属性,该属性值为正确的SQN序号。

Authorization:Digest username=" [email protected] ",

realm=" open-ims.test ",

nonce=" ABDFER+FBDF4GDF45GGDF ",

uri=" sip:open-ims.test ",

qop=auth,

nc=00000001,

cnonce="0a4f113b",

response=" sfsdfrty6567567gjghtyu ",

opaque="5ccc069c403ebaf9f0171e9517f40e41",

auts="5PYxMuX2NOT2NeQ="

 

在第18步流程中,S-CSCF发现Register消息包含有AUTS属性,则知道当前与终端网络同步出现问题,使用终端传来的新的SQN重新向HSS早请认证向量。

 

后续流程同正常AKA鉴权流程相同,这里不详细描述,可以参考《正常情况》小节。

 

参考资料

《中国电信IMS网络SIP协议总体技术要求》

《基于AKAIMS接入认证机制》

IMS-移动领域的IP多媒体概念和服务》

你可能感兴趣的:(IMS技术IAD终端实现分析)