IMS鉴权过程中各参数的用途
发帖日期:2011-08-18 14:12:52
按照目前的国际规范,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,这是因为Digest鉴权过程中完整性保护的只有消息体,而REGISTER消息不会携带消息体,因此qop不会取值auth-int。
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
s parameter
nonce的计数器,用户每使用同一个nonce计算一次response就会将nonce-count增加(至于是否一定是递增1我还不确定,规范中似乎也没明确),由于nonce-count也参与response的计算,这也就降低了重放攻击的可能性。
nextnonce
在SIP Digest过程中,不一定每次认证(即使在同一会话中)都使用同样的nonce,此时网络侧可通过使用nextnonce来指定下一次鉴权使用的nonce值,终端下次发送消息直接使用nextnonce计算response从而省掉了一次challenge-response的过程。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。