AKA認證初探
近期工作中遇到了有關SIP AKA認證的相應協議規範,目前在IMS中已得到應用支援,本文主要是希望探索一下AKA認證的具體機制,以及相應演算法。為簡便起見,暫時先拋開IMS內部架構,從引數著手分析AKA認證。
AKA認證主要還是基於DIGEST認證方式,在此基礎上加入了對稱加密機制。先簡單看一下AKA的流程圖與信令:
如圖所示,AKA認證流程與DIGEST認證流程一致,引數MS新增了RAND和AUTN,加下來看一下具體的信令:
1) Initial request
REGISTER sip:home.mobile.biz SIP/2.0
2)Response containing a challenge
SIP/2.0 401 Unauthorized
WWW-Authenticate: Digest
realm="RoamingUsers@mobile.biz",
nonce="CjPk9mRqNuT25eRkajM09uTl9nM09uTl9nMz5OX25PZz==",
qop="auth,auth-int",
opaque="5ccc069c403ebaf9f0171e9517f40e41",
algorithm=AKAv1-MD5
3)REGISTER sip:home.mobile.biz SIP/2.0
Authorization: Digest
username="jon.dough@mobile.biz",
realm="RoamingUsers@mobile.biz",
nonce="CjPk9mRqNuT25eRkajM09uTl9nM09uTl9nMz5OX25PZz==",
uri="sip:home.mobile.biz",
qop=auth-int,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
4)SIP/2.0 200 OK
Authentication-Info:
qop=auth-int,
rspauth="6629fae49393a05397450978507c4ef1",
cnonce="0a4f113b",
nc=00000001
熟悉SIP DIGEST的會發現,參數列面上看,除了algorithm指定為AKAv1-MD5之外,沒有什麼區別,那RAND和AUTN引數跑哪兒去了呢?AKA認證耍了個花招,儘量相容DIGEST,他將RAND(128位)和AUTN(128位)引數進行BASE64編碼後放置在了nonce引數中進行傳遞,如下圖所示:
RAND為伺服器端生成的128位隨機值,AUTN的生成演算法如下圖所示:
AUTN的解析演算法如下:
至於f1-f5演算法通常採用Milenage演算法,具體不在此贅述,此處解析之後,終端將會得到RES引數,然而此RES引數並非DIGEST認證中Authorization頭域的response引數,而是使用RES作為DIGEST認證時的金鑰,從而生成最終的response引數。
至此,AKA認證流程基本完成,CK和IK引數是作為IPSec SA的加密金鑰以及完整性金鑰,有興趣的可以翻閱相應的IMS文件。總的說來AKA認證較DIGEST認證更為安全可靠:
- 實現了雙向認證:伺服器對UE的認證是通過RES實現的:如果UE合法,它能夠正確地計算出RES,且RES等於XRES;UE對伺服器的認證是通過MAC實現的:UE計算期望的訊息認證碼(XMAC),如果MAC和XMAC一致,則認證成功;
- 每次使用的MAC是由不斷遞增的SQN作為輸入變數之一,從而確保了金鑰的新鮮性,有效地防止了重放攻擊;
- 這種機制更利於將伺服器分離成認證伺服器與鑑權伺服器,認證伺服器收到請求後,請求鑑權伺服器生成AUTN、RAND等健全資訊從而進行認證,而鑑權伺服器也無需將密碼等資訊透露給認證伺服器。
相關文章
- 初探驗證碼識別
- 認證授權方案之JwtBearer認證JWT
- HTTP認證之基本認證——Basic(一)HTTP
- HTTP認證之基本認證——Basic(二)HTTP
- HTTP認證之摘要認證——Digest(一)HTTP
- WHQL認證2019年3月 認證流程
- 無線上網認證之Portal認證
- 增強版實名認證介面-Java身份證實名認證介面程式碼-身份認證Java
- Passport 認證Passport
- 本地認證
- CB認證
- Java身份證實名認證介面解鎖認證新速度Java
- adobe認證證書含金量
- 使用OpenSSH證書認證
- adobe photoshop 認證證書
- Basic認證和Bearer Token認證的區別
- 關於HttpClient繞過SSL認證以及NTLM認證HTTPclient
- 關於os認證和口令檔案認證(轉)
- C++身份證二要素實名認證api、實名認證介面C++API
- Http基本認證HTTP
- Harmony_認證
- CB認證流程
- OSPF 安全認證
- Laravel Web 認證LaravelWeb
- JWT 多表認證JWT
- SpringSecurity之認證SpringGse
- 認證授權
- SpringSecurity認證流程SpringGse
- Java身份證實名認證、身份證識別介面讓您認證任性的“懶”Java
- DRF內建認證元件之自定義認證系統元件
- 7628 EDCCA認證暫存器修改(認證自適應)
- Go gRPC進階-TLS認證+自定義方法認證(七)GoRPCTLS
- 【認證與授權】Spring Security系列之認證流程解析Spring
- 【認證與授權】2、基於session的認證方式Session
- Kubernetes客戶端認證——基於CA證書的雙向認證方式客戶端
- 數字證書認證(CA)中心
- 如何獲得PMP認證證書
- Adobe認證證書怎麼考?