大家好,欢迎来到IT知识分享网。
AKA鉴权
目前IMS的鉴权的机制有“Sip Digest”、“AKA”、“CAVE-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),它们仅在HSS与UE中可见,由于HSS不与UE直接通信,而是由S-CSCF执行认证这程,因此它们不会将真实的KEY暴露给外界。
一、正常情况
- 用户发起注册请求
用户在使用IMS服务之前必须向IMS网络进行注册,注册的目的是将用户的私有标识(IMPI)与用户想要注册的公有标识(IMPU)绑定。每个用户只有一个IMPI,而可拥有多个IMPU,每个IMPU对应相应的服务配置。(参见《IMS标识》小节)。
UE在初始的注册请求SIP REGISTER消息中发送它的IMPI,该IMPI对应我们当前设备的鉴权用户的配置。这个初始的REGISTER消息的主要头域和参数如下所示。
REGISTER sip:open-ims.test SIP/2.0
Authorization:Digestusername=””,
realm=”open-ims.test”,
nonce=””,
uri=”sip:open-ims.test”,
response=””,
algorithm=AKAv1-MD5
- 由于3GPP AKA被映射到HTTP摘要机制,因此认证方案的值被设置为“Digest”
- username为用户的私有用户标识,将被S-CSCF和HSS用于识别用户并找到相应的AV
- “response”和“nonce”域的值在初始注册请求消息中都设置为空
- realmk 和uri设置为用户的归属域
P-CSCF将这个REGISTER消息转发给I-CSCF,I-CSCF联系HSS,以选择为用户提供服务的S-CSCF,然后将REGISTER请求消息转发给选定的S-CSCF。当S-CSCF收到REGISTER消息后,如果发现该用户还没有被认证,则S-CSCF向HSS发送多媒体认证请求(MAR)消息以请求认证数据。
- HSS计算认证向量
HSS收到MAR消息之后,运行AKA算法,为该用户计算认证向量(AV),计算过程如下:首先产生最新的序列号SQN和一个不可预测的随机提问数(RAND)。然后HSS将根据它与该UE之间的共享密钥Key,以及刚刚产生的SQN和RAND来计算其他的参数,其原理如下图所示。
其中,各个参数的计算公式如下(⊕按位异或,||表示串接):
- 计算消息认证码(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。
- 网络向用户提问
HSS通过上述的计算过程得到了一组AV,其中每个AV都是一个五元组(RAND, XRES, AUTN, CK, IK),该认证五元组并不包括Key和SQN本身。然后,HSS将这些认证数据通过多媒体认证应答(MAA)消息发送给S-CSCF。
S-CSCF从HSS得到所需的安全相关的参数。这些参数使得S-CSCF可以在不需要知道共享密钥Key和SQN的情况下就可以执行认证过程。S-CSCF基于AV中的数据,通过401响应返回WWW-Authenticate消息。
SIP/2.0 401Unauthorized
WWW-Authenticate:Digest realm=” open-ims.test”,
nonce=ABDFER+FBDF4GDF45GGDF,
algorithm=AKAv1-MD5,
ik=”5cbcvb”,
ck=”cvvcbvbv”
- 去除了XRES元素,S-CSCF保存在本地,用于后续终端把鉴权响应结果发送过来后,对比终端的合法性。
- 其中,在nonce字段填入了将RAND和AUTN参数串接后进行Base64编码后的字符串。
- 在ik和ck字段加入完整性密钥和保密性密钥。
- 在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
- 用户认证网络身份
UE接收到网络返回的401应答消息后,进行AKA算法,执行以下工作:
- 首先基于存储的共享密钥Key来校验网络认证令牌AUTN,如果AUTN校验成功,网络就被认证通过(即确认认证数据是从归属网络中发来的)。计算AKA参数的过程如下图片所示。UE中的认证服务模块通过随机数RAND计算出匿名密钥AK,然后使用匿名密钥AK来恢复序列号SQN,接着通过得到的序列号SQN、RAND和配置保存的认证管理域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消息重新发起注册请求(参见(SQN同步失败情况))。
- 如果UE确认SQN在正确的范围之内,则接着计算保密性密钥CK和完整性密钥IK,并将CK、IK进行保存,用于后继与P-CSCF之间实现安全机制的密钥使用,参见《安全机制协商》。
- 最后,UE在发往S-CSCF的第二个REGISTER请求中返回认证挑战应答RES。
REGISTER sip:open-ims.test SIP/2.0
Authorization:Digestusername=””,
realm=”open-ims.test”,
nonce=” ABDFER+FBDF4GDF45GGDF “,
uri=”sip:open-ims.test”,
response=”sfsdfrtygjghtyu”
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认为本次认证失败,放弃本次认证过程,并发送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步流程中,UE从S-CSCF发来的AUTN中恢复SQN,此时UE发现SQN同步校验失败,UE在进行第二个Register消息Authorization头域中增加AUTS属性,该属性值为正确的SQN序号。
Authorization:Digest username=” “,
realm=” open-ims.test “,
nonce=” ABDFER+FBDF4GDF45GGDF “,
uri=” sip:open-ims.test “,
qop=auth,
nc=00000001,
cnonce=”0a4f113b”,
response=” sfsdfrtygjghtyu “,
opaque=”5ccc069c403ebaf9f0171e9517f40e41″,
auts=”5PYxMuX2NOT2NeQ=”
在第18步流程中,S-CSCF发现Register消息包含有AUTS属性,则知道当前与终端网络同步出现问题,使用终端传来的新的SQN重新向HSS早请认证向量。
后续流程同正常AKA鉴权流程相同,这里不详细描述,可以参考《正常情况》小节。
《中国电信IMS网络SIP协议总体技术要求》
《基于AKA的IMS接入认证机制》
《IMS-移动领域的IP多媒体概念和服务》
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151122.html