aka鉴权 ims_宋月:IMS鉴权过程中各参数的用途

按照目前的国际规范,IMS认证方式主要有IMS AKA、SIP Digest、NASS-IMS Bundled Authentication(NBA)以及GPRS-IMS Bundled Authentication(GBA)几种方式。其中NBA和GBA认证的主要思路是IMS核心网信任接入网络(NASS、GPRS)为用户分配的IP地址,因此不涉及鉴权参数的使用,本文仅根据个人理解列举了IMS AKA和SIP Digest过程中各参数的用途。

IMS AKA

username

即用户的IMPI。

K

IMS AKA认证过程中的根密钥,除RAND之外的其他鉴权参数计算过程中全部需要使用K。K分别存储在ISIM(或终端)以及HSS中,永远不会在网络上传输。

RAND

由HSS生成的随机数,HSS和ISIM(或终端)通过RAND和K可以计算IK/CK/RES/XRES。RAND在鉴权过程中会从HSS一直传递至终端。

XRES

XRES由HSS通过K和RAND计算得到,这个参数从HSS传递至S-CSCF,不会继续向下传输。S-CSCF通过比对从XRES和从终端得到的RES来对用户身份进行认证。

RES

RES由终端通过K和RAND计算得到,并在鉴权响应中携带该参数。该参数从终端传送至S-CSCF。

IK

完整性密钥。终端和HSS分别计算该参数,HSS计算的IK会一直传递至P-CSCF。终端与P-CSCF之间建立IPSec所使用的完整性密钥即为该参数。

CK

加密密钥。终端和HSS分别计算该参数,HSS计算的CK会一直传递至P-CSCF。终端与P-CSCF之间建立IPSec所使用的加密密钥即为该参数。

SQN

终端与HSS同步的序列号。这个序列号是计算AUTN的中间值。当网络与终端的SQN失配时,终端会从新发起REGISTER请求,携带auts参数,用于SQN同步。这个参数不会在网络上传输,分别由终端和HSS本地维护。

AUTN

用于终端对网络的认证。该参数从HSS一直传递至终端,终端收到鉴权挑战后,会根据SQN计算XAUTN,然后与收到的AUTN进行比对,以此来对网络进行认证。

SIP Digest

username

即用户的IMPI。

password

该参数的性质与IMS AKA中的K类似,即终端与网络之间共享的一个“秘密”,用于网络对终端的认证,这个参数同样不会在网络上传输。但是与K也有不同,password通常不会直接用于计算鉴权结果,而是使用对password的哈希结果,即通常所说的H(A1),HSS会在Cx查询时将H(A1)传递给S-CSCF。在终端与P-CSCF之间使用TLS时,建立TLS使用的密钥不一定根据这个password生成。

nonce

该参数与IMS AKA中的RAND类似,用于计算认证结果,与IMS AKA不同的是nonce值由S-CSCF生成,而不是从HSS得到。

response

该参数与IMS AKA中的RES类似,终端首先通过password计算得到H(A1),然后再结合nonce值计算得到response。这里需要注意一点,当需要进行完整性保护(见qop)时,计算response的输入需要增加消息体,也就是SIP消息的body部分(不包括Header)。

qop

也就是"quality of protection",可以取的值目前有auth和auth-int。当鉴权过程中包含了qop参数时,计算response的输入须加入cnonce和nonce-count。当qop取值为auth-int时,表示需要进行完整性保护(见response)。终端发出第一条REGISTER请求时不会携带qop,S-CSCF返回401响应时携带qop参数并在其中包含网络支持的qop能力,终端再次发起REGISTER请求时携带qop参数,由终端确定使用的qop能力。这里有个问题:在TS24.229的描述中,没有出现qop的auth-int取值,我最初的想法是P-CSCF会修改REGISTER消息(如加入via头),这样就破坏了消息的完整性从而导致鉴权失败,但是转念一想SIP Digest完整性保护的是SIP消息体而不会保护消息头,那么就是说P-CSCF有可能修改消息体,但是REGISTER消息中又不会携带消息体,为什么3GPP没有使用SIP Digest的完整性保护能力呢?这件事目前还没有想明白,望大侠指点。

cnonce

简单的理解就是client nonce,即终端产生的nonce。在RFC 2617的描述中,该参数主要有两个用途,一是供终端对网络进行认证;另一个是避免一种叫做"chosen plaintext"的攻击(不太清楚这种攻击的机理)。对于作用一,网络侧收到REGISTER消息应后,会通过cnonce计算rspauth参数并在200 OK中返回给终端,终端以此对网络进行认证(类似于IMS AKA中使用AUTN的方式)。对于作用二,RFC 2617是这样解释的:中间人攻击者可以随意生成nonce并让终端通过nonce计算response值,这样攻击者就可以比较方便地分析出用户的秘密,有了cnonce之后就可以避免遭受这种攻击。我个人理解是这样的:攻击者可以通过设计一组有特殊性质的nonce值,让终端分别计算response值,对于随机的一组nonce和response是不可能反算出password的,但是由于攻击者设计的一组nonce值具有特殊性质,那通过这组特殊的nonce和相应的response就有可能推算出password。在这种情况下,用户计算response时的输入添加了cnonce(见qop),那么就相当于破坏了攻击者设计的nonce之间的关联性,也就难以反算出password。当然,由于专业不是这方面的,这只是我的推测。

nonce-count

nonce的计数器,用户每使用同一个nonce计算一次response就会将nonce-count增加(至于是否一定是递增1我还不确定,规范中似乎也没明确),由于nonce-count也参与response的计算,这也就降低了重放攻击的可能性。

nextnonce

在SIP Digest过程中,不一定每次认证(即使在同一会话中)都使用同样的nonce,此时网络侧可通过使用nextnonce来指定下一次鉴权使用的nonce值,终端下次发送消息直接使用nextnonce计算response从而省掉了一次challenge-response的过程。

相关博文推荐:

更多精彩内容推荐:

你可能感兴趣的:(aka鉴权,ims)