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_宋月:IMS鉴权过程中各参数的用途的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell实现论坛灌水机
- 下一篇: 测试工作绝不仅限于点点点