何文才 趙菲 韓妍妍 孫錦慧 董昊聰
1 北京電子科技學(xué)院 北京 100070
2 西安電子科技大學(xué)通信工程學(xué)院 陜西 710071
SIP(Session Initiation Protocol,SIP)會(huì)話初始化協(xié)議是軟交換系統(tǒng)中的重要協(xié)議。由于軟交換中多媒體業(yè)務(wù)的會(huì)話應(yīng)用需求,SIP協(xié)議制定的主要目的是如何動(dòng)態(tài)、便捷地為會(huì)話參與者提供強(qiáng)大的、新型的服務(wù)功能,但是對(duì)于其安全性方面關(guān)注較少。SIP中關(guān)于身份認(rèn)證的安全機(jī)制有以下幾種:HTTP摘要認(rèn)證機(jī)制、S/MIME加密認(rèn)證機(jī)制、PGP認(rèn)證機(jī)制等。
(2, 2)秘密共享的思想是將秘密信息以適當(dāng)?shù)姆绞讲鸱殖蓛蓚€(gè)分享。從單個(gè)的分享中,攻擊者無法獲得秘密信息的任何信息,只有同時(shí)擁有兩個(gè)分享才能恢復(fù)出秘密信息。
文中需要分享的秘密信息是會(huì)話參與者的身份 ID,ID為一個(gè)32bit的字符串標(biāo)識(shí)。
具體設(shè)計(jì)原理如下。
ID用一個(gè)4×8的數(shù)組表示。針對(duì)數(shù)組中的每bit元素,隨機(jī)選擇3種分享方案擴(kuò)展成2×2的數(shù)組,隨后將每bit生成的數(shù)組1和2分別串聯(lián)成8×16的數(shù)組,即分享1和分享2。這樣生成的分享就擁有了足夠的隨機(jī)性,無法通過單個(gè)分享恢復(fù)秘密信息。
解密過程是將分享1和2中的數(shù)組元素做或運(yùn)算。當(dāng)或運(yùn)算后生成的2×2數(shù)組的元素均為1時(shí),解密為1,否則為0。
隨機(jī)生成的分享可以有效的保密 ID的信息,當(dāng)分享少于兩個(gè)時(shí),無法根據(jù)單獨(dú)的分享解密出ID。
即使攻擊者知道加密和解密的方案,由于分享方案的隨機(jī)選擇,只要攻擊者沒有獲得生成的兩個(gè)分享,也無法解密出秘密信息。
本文設(shè)計(jì)的身份認(rèn)證系統(tǒng)中對(duì)身份信息的確認(rèn)是依靠KDC發(fā)送給用戶的證書來認(rèn)證的。此證書就是用用戶的公鑰加密的分享。
根據(jù)對(duì)傳統(tǒng)的SIP身份認(rèn)證方式的分析,本文通過擴(kuò)展SIP的相關(guān)認(rèn)證算法,結(jié)合秘密共享的加密方式,借鑒HTTP的認(rèn)證思想,設(shè)計(jì)了一種新的SIP身份認(rèn)證措施。該措施不僅實(shí)現(xiàn)了通信雙方的身份認(rèn)證,也使得秘密信息可以保密傳遞,并且做到一次一密。
身份認(rèn)證,對(duì)于一個(gè)通信網(wǎng)絡(luò)中的每個(gè)SIP實(shí)體都很必要。SIP采用類似HTTP的協(xié)議風(fēng)格,實(shí)體間的通信方式都是用 Client/Sever的共組模式。因此,本文所述改進(jìn)的安全認(rèn)證方案也可用于所有SIP實(shí)體間的安全通信。如UAC與Proxy Server之間,Proxy Server與UAS之間,Proxy Server與Redirect Server之間等等。
在本方案中,身份認(rèn)證所選取的加密算法是(2,2)秘密共享加密方案。系統(tǒng)在初始化階段需要一個(gè)密鑰分發(fā)中心KDC(Key Distribution Center,KDC)為通信用戶分發(fā)分享,每一個(gè)合法設(shè)備,在發(fā)起會(huì)話時(shí),會(huì)主動(dòng)向 KDC申請(qǐng)一組身份信息的分享。KDC將這組分享以證書的形式分發(fā)給需要會(huì)話的雙方,并產(chǎn)生會(huì)話密鑰分發(fā)給會(huì)話雙方。
具體流程如圖1:
圖1 KDC、C和S交互過程
(1) C在會(huì)話發(fā)起之初,告知KDC要與S通話。
IDC,IDS表示C和S的身份信息。
C——KDC:IDC||IDS
(2) KDC根據(jù)時(shí)間戳 TK和(2,2)秘密共享加密方案隨機(jī)生成IDC和IDS的分享IDC1、IDC2、IDS1和IDS2。
EKC和 EKS分別表示消息使用C和S的公鑰加密,可用私鑰解密。加密算法為RSA加密算法。
KDC——C:EKC[IDS2||K||EKS[IDC1||TK]]
KDC——S: EKS[IDC2||K||EKC[IDS1||TK]]
(3) C收到EKC[IDS2||K||EKS[IDC1||TK]]后,用自己的私鑰解密后得到用于驗(yàn)證S身份的分享IDS2,會(huì)話密鑰K,以及KDC分發(fā)給C用于S驗(yàn)證其身份的證書EKS[IDC1||TK],并將其發(fā)送給S。
C——S:EKS[IDC1||TK]
(4) S收到KDC發(fā)給其的EKS[IDC2||K||EKC[IDS1||TK]],用自己的私鑰解密后得到用于驗(yàn)證S身份的分享IDC2,會(huì)話密鑰K,以及KDC分發(fā)給S用于C驗(yàn)證其身份的證書EKC[IDS1||TK]。
S收到EKS[IDC1||TK]后,用自己的私鑰解密出IDC1,用(2,2)秘密共享解密算法計(jì)算IDC1⊕IDC2是否等于IDC,如果一致,且TK還未過期,則驗(yàn)證C的身份。之后S發(fā)送認(rèn)證通過的信息給 C。并且用會(huì)話密鑰 K加密自己的身份證書EKC[IDS1||TK]給 C。
EK表示消息使用對(duì)稱加密算法DES加密,密鑰為K。
S——C:EK[EKC[IDS1||TK]]
(5) C收到EK[EKC[IDS1||TK]],用K和私鑰解密出IDS1,用(2,2)秘密共享解密算法計(jì)算IDS1⊕IDS2是否等于IDS,如果一致,且 TK還未過期,則驗(yàn)證 S的身份。此步驟中,C也可以確認(rèn)S收到了會(huì)話密鑰K,之后C發(fā)送EK[TK-1]確認(rèn)會(huì)話密鑰可以使用,雙方開始通話。
C——S:EK[TK-1]
以上過程從雙方信息交互的角度來說明認(rèn)證、密鑰分發(fā)和密鑰確認(rèn)的流程。下面,從SIP消息體的角度說明這個(gè)過程。
圖2 雙向身份認(rèn)證通信過程
C與S的SIP交互過程如圖2。
(1) 首先 Client向 Sever 發(fā)起請(qǐng)求。由Client呼叫方發(fā)起一次INVITE請(qǐng)求。該請(qǐng)求以純SIP消息模式發(fā)出。該消息可以是USC發(fā)給代理服務(wù)器,或代理服務(wù)器轉(zhuǎn)發(fā)給目的服務(wù)器,或USC或代理服務(wù)器發(fā)給注冊(cè)服務(wù)器的都有可能。該消息攜帶身份證書CNONCE=EKS[IDC1||TK]。
(2) Sever收到請(qǐng)求后,基于挑戰(zhàn)和響應(yīng)的認(rèn)證方式,Sever會(huì)發(fā)送一個(gè)錯(cuò)誤的響應(yīng)消息挑戰(zhàn)請(qǐng)求。S發(fā)送407/401錯(cuò)誤信號(hào)。其中攜帶 CNONCE的相關(guān)認(rèn)證信息,以及自己的身份證書NONCE= EK[EKC[IDS1||TK]]。
(3) C收到挑戰(zhàn)信息后,再次發(fā)送INVITE請(qǐng)求,說明收到挑戰(zhàn)。其中攜帶NONCE的相關(guān)認(rèn)證信息。
(4) S收到NONCE的相關(guān)認(rèn)證信息EK[TK-1]后,確認(rèn)可以通話。發(fā)送180、200信息。
(5) 之后C發(fā)送ACK消息,開始會(huì)話。
由上述認(rèn)證過程可以看出,第一、二步中通過將 RSA、DES和(2,2)秘密共享加密算法結(jié)合實(shí)現(xiàn)了雙向認(rèn)證。
SIP原本的認(rèn)證機(jī)制中,僅實(shí)現(xiàn)了服務(wù)器對(duì)用戶的單向身份認(rèn)證,本方案中,加入了客戶端對(duì)服務(wù)器的身份認(rèn)證,可以有效防止服務(wù)器偽裝攻擊。
在實(shí)際系統(tǒng)中,如果攻擊者攔截到上述認(rèn)證中(4)C發(fā)給S的身份認(rèn)證信息EKS[IDC1||TK],攻擊者可以冒充C將其發(fā)送給S。此時(shí)攻擊者可以通過S的身份認(rèn)證,但當(dāng)S返回給其S的身份信息和確認(rèn)密鑰是否可用的信息時(shí),攻擊者因無法得知會(huì)話密鑰K,所以無法正常通話。
如果攻擊者截獲認(rèn)證中(2)KDC發(fā)給 C的信息EKC[IDS2||K||EKS[IDC1||TK]]。并破解了RSA算法,此時(shí)攻擊者就既有了C的身份證書和會(huì)話密鑰,可以完全偽裝成C。但是由于時(shí)間戳TK的存在,如果攻擊者沒有在時(shí)間戳TK的時(shí)間內(nèi)完成破譯,那也不能成功攻擊。所以本方案在抵御身份偽裝攻擊上,安全性較高。
本方案中 KDC每次根據(jù)時(shí)間戳隨機(jī)生成用戶的身份證書,每次用于身份認(rèn)證的證書都帶有隨機(jī)性,只有合法用戶才能獲得證書。如果有攻擊者截獲證書,必須要破解RSA才能使用證書,安全性比較高。身份認(rèn)證的算法簡(jiǎn)單,認(rèn)證速率高。
本文主要從通信量、計(jì)算量和存儲(chǔ)量三個(gè)方面來分析認(rèn)證協(xié)議的性能。
(1) 通信量
本文所設(shè)計(jì)的認(rèn)證協(xié)議將身份認(rèn)證方案和密鑰確認(rèn)方案在一個(gè)通信過程中完成,通信雙方通過3次交互便可完成通信雙方身份認(rèn)證和共享會(huì)話密鑰,并且還能確認(rèn)會(huì)話密鑰是否可用。而傳統(tǒng)的基于證書的PKI體制,僅僅完成通信雙方的身份認(rèn)證就至少3次交互;此方案很大程度上減少了通信量。
(2) 計(jì)算量
本文所設(shè)計(jì)的身份認(rèn)證算法,只用到了或運(yùn)算,在數(shù)學(xué)算法支持上要求較低,計(jì)算量小。
但是由于使用了RSA和DES加密,所以在消息解密方面需要一定的開銷。
(3) 存儲(chǔ)量
本文所設(shè)計(jì)的認(rèn)證協(xié)議與傳統(tǒng)的基于證書的PKI體制相比,KDC不需要存儲(chǔ)證書,每個(gè)用戶只需在本次通信中存儲(chǔ)自己的身份證書(分享),很大程度上減少了存儲(chǔ)量,也便于系統(tǒng)增加新用戶擴(kuò)容。
本文方案實(shí)現(xiàn)了通信雙方的雙向身份認(rèn)證,身份認(rèn)證的基礎(chǔ)在于秘密共享加密方案。會(huì)話密鑰使用公鑰加密,保證了會(huì)話密鑰的安全性。
實(shí)際上本系統(tǒng)的身份認(rèn)證過程有兩次,一次是基于公鑰體制的KDC對(duì)C、S的身份認(rèn)證,因?yàn)橹挥杏脩粲盟借€才能解密和使用身份證書。另一次就是秘密共享加密方案的身份認(rèn)證。
此系統(tǒng)不能抵御DoS攻擊,攻擊者可以發(fā)送大量無意義的SIP消息,來浪費(fèi)資源。所以,如需抵御DoS攻擊,還需建立SIP的防火墻機(jī)制。
其次,此方案的安全性也嚴(yán)格依賴于RSA和DES的安全性。
[1] M.Girault. Self-certified public keys. Advances in Cryptology-EUROCRYPT’91.LNCS547,Berlin:Springer-Verlag.1991.
[2] 王偉志.IP視頻電話的安全策略研究與實(shí)現(xiàn).西安:西安電子科技大學(xué).2011.
[3] Law L,Menezes A,Qu M,etal.An efficient Protocol for AuthenticatedKeyAgreement.Designs,Codes and Cryptography. 2003.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2012年10期