任塨曄
(西安電子工程研究所 西安 710100)
移動自組織網(wǎng)絡(luò)(Mobile Ad hoc Networks)[1-3]是一種無需基礎(chǔ)設(shè)施的網(wǎng)絡(luò)。在自組網(wǎng)中,節(jié)點通過自組織方式組建并管理網(wǎng)絡(luò),網(wǎng)內(nèi)節(jié)點兼具主機和路由器的功能,并可自由移動。這種無需固定基礎(chǔ)設(shè)施的網(wǎng)絡(luò)形態(tài)在車載自組網(wǎng)、應(yīng)急救災(zāi)、傳感器網(wǎng)絡(luò)等領(lǐng)域有著廣泛的應(yīng)用。
為保證自組網(wǎng)內(nèi)節(jié)點間信息傳輸?shù)陌踩?新節(jié)點加入自組網(wǎng)時需進行身份認證。與具有基礎(chǔ)設(shè)施的有線網(wǎng)絡(luò)不同,自組網(wǎng)中缺乏固定的、可信的權(quán)威實體來鑒別新節(jié)點的身份。隨著各種形態(tài)的自組網(wǎng)的廣泛應(yīng)用,針對自組網(wǎng)身份認證的研究成為熱點。文獻[4]將基于公鑰密碼體制的認證機制分為三類:集中式、分布式和自組織式。在集中式的認證機制中,證書中心(Certificate Authority,CA)負責證書的頒發(fā)、更新和撤銷,并且負責驗證新入網(wǎng)節(jié)點的身份。由于需要固定的CA,集中式的認證機制主要用于有線網(wǎng)絡(luò)。分布式認證機制采用門限密碼技術(shù),用多個實體共同行使CA的功能。自組織式認證機制采用證書鏈代替CA的功能,基于認證雙方的證書庫實現(xiàn)認證功能。文獻[5]提出了一種自組織的公鑰管理方式,各節(jié)點可生成自己的公鑰和私鑰,無需CA實體。文獻[6]提出了一種分布式的認證方式,其中多個鄰居節(jié)點共同驗證新節(jié)點的身份,避免了單點失效的問題。文獻[7]設(shè)計了一種自組織網(wǎng)絡(luò)的節(jié)點認證和密鑰分發(fā)協(xié)議,通過引入可信管控平臺保障節(jié)點公鑰的有效性。文獻[8]提出了基于安全域的身份認證方法,采用實時協(xié)商隨機數(shù)和復(fù)雜函數(shù)計算相結(jié)合的方式完成自組網(wǎng)節(jié)點的身份驗證。文獻[9]提出了一種基于輕量級可移交CA的移動自組網(wǎng)認證體系,在不使用門限機制的情況下具備一定的容侵能力。文獻[10]提出了一種基于身份的匿名認證方案,能夠?qū)崿F(xiàn)車輛與路邊單元以及車輛之間的身份認證。文獻[11]設(shè)計了一種基于Diffie-Hellman協(xié)議的隨機密鑰圖結(jié)構(gòu),在空間自組織網(wǎng)絡(luò)中實現(xiàn)了區(qū)域自治的身份認證。
在多數(shù)自組網(wǎng)認證協(xié)議的研究中,自組網(wǎng)內(nèi)的某個節(jié)點或某些節(jié)點行使CA的功能。節(jié)點的移動和動態(tài)加入退出使得CA需頻繁在節(jié)點間轉(zhuǎn)移,從而增大了認證時延。此外,CA節(jié)點的自組織選舉也是需考慮的問題。由于自組網(wǎng)中沒有固定的節(jié)點執(zhí)行CA的功能,攻擊者容易冒充CA破壞自組網(wǎng)認證體系。不同于一般的無線網(wǎng)絡(luò),自組網(wǎng)通常由特定的組織機構(gòu)管理,屬于同一組織的節(jié)點在特定場景下組建自組網(wǎng)。在上述場景中,同一組織的節(jié)點可離線從CA獲得證書,在進行身份驗證只需驗證證書的有效性和證書與身份的匹配。在線的身份認證無需CA參與。
基于對自組網(wǎng)認證協(xié)議的研究現(xiàn)狀分析和自組網(wǎng)的特性,本文提出一種自組網(wǎng)中基于離線證書的雙向認證協(xié)議。在該協(xié)議中,自組網(wǎng)內(nèi)沒有節(jié)點執(zhí)行CA的功能,證書頒發(fā)以離線方式執(zhí)行。通過三個認證包的交互,認證雙方相互驗證對方證書并且基于對方提供的證書執(zhí)行“挑戰(zhàn)/應(yīng)答”方式的身份認證。 已被認證的節(jié)點自動形成一個可信集, 可信集內(nèi)的任一節(jié)點都可代表該網(wǎng)絡(luò)與網(wǎng)外節(jié)點執(zhí)行認證流程。新入網(wǎng)節(jié)點的公鑰通過安全方式在網(wǎng)內(nèi)廣播,其他節(jié)點收到新入網(wǎng)節(jié)點的公鑰即可認為該節(jié)點已加入可信集,從而無需再與其執(zhí)行認證流程。本文設(shè)計的自組網(wǎng)認證協(xié)議符合自組網(wǎng)無中心、扁平化的特性,可推廣到其他具有相似特性的網(wǎng)絡(luò)。
本文第1節(jié)介紹離線證書頒發(fā)機制;第2節(jié)詳述基于離線證書的雙向認證協(xié)議,并且給出了認證雙方的狀態(tài)機描述;第3節(jié)介紹基于可信集的分布式認證機制;第4節(jié)分析所提認證協(xié)議的安全性;第5節(jié)總結(jié)全文。
自組網(wǎng)中不存在固定的CA實體,節(jié)點證書的頒發(fā)和驗證無法以安全的方式在線執(zhí)行。針對這一問題,本文設(shè)計了離線的證書頒發(fā)機制,每個節(jié)點保存自己的證書,在需要認證時通過交互證書實現(xiàn)雙向認證。
節(jié)點在啟用前向CA申請證書。節(jié)點向CA發(fā)送自己的身份信息和公鑰,CA向節(jié)點發(fā)送生成的證書。節(jié)點與CA之間的數(shù)據(jù)傳輸以有線、安全的方式進行。證書的結(jié)構(gòu)包含三部分:身份信息、公鑰和數(shù)字簽名,分別記為Id、PK和DS。數(shù)字簽名由CA產(chǎn)生。CA首先基于哈希算法計算身份信息與公鑰兩部分的消息摘要,再用自己的私鑰加密生成數(shù)字簽名,該過程可記為DS=SKCA(Hash(Id+PK)),其中Hash(·)表示哈希算法,SKCA表示CA的私鑰,對應(yīng)的公鑰記為PKCA,SKCA(·)表示私鑰加密過程。每個節(jié)點本地保存CA頒發(fā)的證書。CA的公鑰公開,所有節(jié)點可通過CA的公鑰驗證證書的有效性。證書的頒發(fā)是一次性的,節(jié)點的認證過程不再涉及CA,因此該過程被稱為離線證書頒發(fā)機制。
網(wǎng)內(nèi)節(jié)點和網(wǎng)外節(jié)點通過三個認證包的交互相互驗證對方的身份。網(wǎng)內(nèi)節(jié)點作為認證的發(fā)起方,網(wǎng)外節(jié)點作為認證的響應(yīng)方,它們之間的認證包的交互如圖1所示。該過程可分為四個步驟:
圖1 認證雙方的包交互流程
1)當認證發(fā)起方(以下用A表示)收到認證響應(yīng)方(以下用B表示)的入網(wǎng)申請后,它向認證響應(yīng)方發(fā)送認證包1。認證包1包含認證序號、A生成的挑戰(zhàn)序列tA和加密后的證書E(CA),其格式如圖2所示。認證序號用于區(qū)分不同的認證會話。為提升抵抗重放攻擊的能力,認證發(fā)起方在短時間內(nèi)不能使用重復(fù)的挑戰(zhàn)序列。A采用對稱加密算法加密證書CA得到E(CA)。假設(shè)所有合法節(jié)點都維護相同的對稱密鑰庫,認證包1的包頭記錄加密證書所用的對稱密鑰索引,B可基于該索引得到解密密鑰。
圖2 認證包1的格式
2)B收到認證包1后,解密E(CA)獲得A的證書CA。B通過CA的公鑰驗證CA,并提取A的公鑰PKA。B生成另一挑戰(zhàn)序列tB,用PKA加密tB得到PKA(tB)。此外,B用自己的私鑰SKB加密tA得到SKB(tA)。B將PKA(tB)、SKB(tA)和加密后的證書E(CB)組成認證包2,并發(fā)送給A。認證包2的格式如圖3所示。
圖3 認證包2的格式
3)A收到認證包2后,解密獲得B的證書CB。A通過CA的公鑰驗證CB,并提取B的公鑰PKB。A用PKB解密SKB(tA),獲得dA=PKB(SKB(tA))。如果dA與tA相等,則表明B的公鑰與私鑰匹配,從而A能夠驗證B的合法身份。此外,A用自己的私鑰SKA解密PKA(tB),得到dB=SKA(PKA(tB))。A通過認證包3將dB發(fā)送給B,其格式如圖4所示。
圖4 認證包3的格式
4)B收到認證包3后,比較dB與tB。如果dB與tB相等,表明A的公鑰與私鑰匹配,從而B能夠驗證A的合法身份。至此,A和B相互驗證了對方的身份,即可相互通信。
認證發(fā)起方和認證響應(yīng)方在認證過程中需維持各自的認證狀態(tài)機,從而決定在特定事件發(fā)生時執(zhí)行的動作。以下分別描述認證雙方的狀態(tài)機。
認證發(fā)起方A是已被認證的網(wǎng)內(nèi)節(jié)點,它可能同時維持與多個網(wǎng)外節(jié)點的認證狀態(tài)。對于特定認證響應(yīng)方B,A維持的認證狀態(tài)機如圖5所示。
圖5 認證發(fā)起方的認證狀態(tài)機
當A收到B的入網(wǎng)申請后,隨即建立對應(yīng)的狀態(tài)機。當A發(fā)送認證包1后,啟動定時器TA2(表示A等待認證包2的定時器),等待接收認證包2。如果定時器歸零前未收到有效的認證包2并且嘗試次數(shù)未達到最大門限,則A重新發(fā)送認證包1,并且遞增認證序號。如果A收到的B發(fā)送的認證包2的序號與A本地保存的序號一致,則認為該認證包2有效,否則該認證包2無效。當A收到有效的認證包2時,執(zhí)行如圖6所示的處理流程以驗證B的證書及身份。圖6中①、②、③三個步驟是驗證B的身份的關(guān)鍵步驟,下面分別討論。
圖6 認證發(fā)起方收到認證包2時的處理流程圖
① A驗證B的證書的步驟如下。A首先應(yīng)用相同的哈希算法計算得到B的證書中身份信息和公鑰兩部分的哈希值,記為H1=Hash(IdB+PKB)。A再用CA的公鑰解密B的證書中的數(shù)字簽名,得到H2=PKCA(DSB)。A比較H1和H2,如果H1與H2相等,則證書驗證成功。如果H1與H2不相等,則證書驗證失敗。這里A僅僅驗證了B的證書的有效性,并未驗證B的身份與B的證書是否匹配。
② A從B的證書中獲得B的公鑰PKB,執(zhí)行公鑰解密流程dA=PKB(SKB(tA))。如果dA與tA相等,表明從B的證書中獲得的公鑰與加密tA所使用的私鑰匹配。由于A已驗證了B的證書,從而A可確定認證包2就是合法節(jié)點B發(fā)送的,A成功驗證了B的身份。如果dA與tA不相等,表明從B的證書中獲得的公鑰與加密tA所使用的私鑰不匹配,該認證包2可能是其他節(jié)點冒充B發(fā)送的,A無法驗證B的身份。
③ A用自己的私鑰SKA執(zhí)行私鑰解密流程dB=SKA(PKA(tB))。A將dB發(fā)送給B,用于B驗證A的身份。
認證響應(yīng)方B是等待認證的網(wǎng)外節(jié)點。當它發(fā)送入網(wǎng)申請給網(wǎng)內(nèi)節(jié)點A之后,即建立如圖7所示的認證狀態(tài)機。認證響應(yīng)方至多只能維持一個認證狀態(tài)機。
圖7 認證響應(yīng)方的認證狀態(tài)機
當B向A發(fā)送入網(wǎng)申請后,等待接收認證包1。當B收到A發(fā)送的認證包1時,執(zhí)行如圖8所示的處理流程。如果B成功驗證了A的證書,B構(gòu)造并發(fā)送認證包2給A,等待接收認證包3。B收到有效的認證包3時,比較dB與tB是否相等。如果相等,B成功驗證了A的身份。當B收到認證包3時,需確定該包是A發(fā)送的并且其中的序號與本地保存的序號一致。如果滿足上述條件,B判定該認證包3有效。
在自組網(wǎng)中,每個節(jié)點可能與多個網(wǎng)內(nèi)節(jié)點通信。如果在通信前都執(zhí)行雙向認證協(xié)議,則開銷過大,并且多跳傳輸也增加了信息被竊聽或被篡改的風險。為了降低認證開銷同時保證安全性,本文設(shè)計了一種基于可信集的分布式認證機制。已經(jīng)相互認證的在網(wǎng)節(jié)點自動形成一個可信集,集合內(nèi)節(jié)點在通信前無需再次執(zhí)行認證過程,只需獲得對方的公鑰即可。
可信集是一個節(jié)點的集合,集合內(nèi)的節(jié)點滿足三個條件:
1)節(jié)點的證書有效;
2)節(jié)點的公鑰與私鑰匹配;
3)節(jié)點處于在網(wǎng)狀態(tài)。
如第2節(jié)所述,對于參與認證的雙方節(jié)點,當它們的認證狀態(tài)機進入“認證成功”狀態(tài)時,即表示它們確認對方節(jié)點滿足上述三個條件。
基于可信集的定義,當兩個未入網(wǎng)的節(jié)點A和B執(zhí)行雙向認證協(xié)議并且認證成功時,它們自動組成一個可信集。當B與另外的未入網(wǎng)節(jié)點C執(zhí)行雙向認證協(xié)議并且認證成功時,C自動進入該可信集。雖然A和C并沒有執(zhí)行認證流程,但是它們都屬于合法節(jié)點,因此不必再進行認證流程。隨著可信集內(nèi)的節(jié)點與未入網(wǎng)節(jié)點的相互認證,可信集逐漸擴大,如圖9所示。
在基于可信集的分布式認證機制中,每個集合內(nèi)節(jié)點可代表該集合與集合外節(jié)點相互認證,吸納新的節(jié)點入網(wǎng)。每當一個集合內(nèi)節(jié)點完成對網(wǎng)外節(jié)點的身份認證時,它需將新入網(wǎng)節(jié)點的公鑰通過加密方式發(fā)送給集合內(nèi)的其他節(jié)點。如圖9所示,A在完成對G的身份認證后將G的公鑰發(fā)送給可信集內(nèi)的其他節(jié)點。公鑰的分發(fā)需滿足三個要求:機密性、完整性和可溯源性。當集合內(nèi)其他節(jié)點通過安全方式收到G的公鑰后,可確認G已入網(wǎng)并且身份已被認證,它們即可與G進行通信。此外,A也向G發(fā)送它保存的集合內(nèi)節(jié)點的公鑰。
本文提出的雙向認證協(xié)議的安全性與所使用的公鑰加密算法、哈希算法和偽隨機數(shù)生成算法有關(guān)。本協(xié)議使用對稱加密算法加密證書,其目的是保護證書內(nèi)的身份信息。由于雙向認證協(xié)議可驗證公鑰與私鑰的匹配性,即使證書以明文傳輸,仍可確保協(xié)議的安全性。本節(jié)在假設(shè)上述算法未被破解的前提下在以下三種場景中分析所提雙向認證協(xié)議的安全性。
非法節(jié)點C冒充合法節(jié)點誘騙合法節(jié)點B入網(wǎng)。由于C是非法節(jié)點,它沒有有效的證書,或者它冒用合法節(jié)點A的證書來冒充A。下面分情況討論。
1)非法節(jié)點C沒有有效證書:按照第2節(jié)所述的協(xié)議流程,C需向B發(fā)送已加密的C的證書。由于C的證書未經(jīng)過CA簽名,B驗證C的證書失敗,B的認證過程終止。
2)非法節(jié)點C冒用合法節(jié)點A的證書:C將A的證書發(fā)送給B,B成功驗證了A的證書,并用其中包含的A的公鑰PKA加密tB得到PKA(tB)。C收到B發(fā)送的認證包2后,需向B發(fā)送解密得到的dB。由于C不知道A的私鑰SKA,因此它無法還原正確的挑戰(zhàn)序列dB。C將錯誤的dB發(fā)送給B,B判定dB與tB不相等,B的認證過程終止。當然,C隨機生成的dB會以極小的概率等于tB。為降低這種可能性,挑戰(zhàn)序列的長度可適當增長。
當非法節(jié)點C作為認證響應(yīng)方試圖與合法節(jié)點A認證時,同樣存在兩種情況。
1)非法節(jié)點C沒有有效證書:當C收到A發(fā)送的認證包1后,需回復(fù)加密的證書。由于C的證書未經(jīng)過CA簽名,A無法驗證C的證書,A的認證過程終止。
2)非法節(jié)點C冒用合法節(jié)點B的證書:C將B的證書發(fā)送給A,但是C不知道B的私鑰,它加密tA所使用的私鑰與B的證書中包含的公鑰不匹配。假設(shè)C用私鑰SKC加密tA得到SKC(tA)。A用B的公鑰PKB解密SKC(tA),得到的dA與tA不相等,A無法驗證C的身份,A的認證過程終止。
非法節(jié)點C竊聽并保存合法節(jié)點A(作為認證發(fā)起方)和B(作為認證響應(yīng)方)之間的認證包交互,它可發(fā)起兩種重放攻擊,如下所述。
1)非法節(jié)點作為認證發(fā)起方的重放攻擊
非法節(jié)點C將保存的認證包1發(fā)送給合法節(jié)點D。D構(gòu)造并回復(fù)認證包2給C。D生成的挑戰(zhàn)序列tD幾乎不可能與C保存的認證包3中的挑戰(zhàn)序列dB(該挑戰(zhàn)序列由B生成和加密,并由A解密)相同。C將保存的認證包3發(fā)送給D,D檢驗其中的dB與tD不相等,D的認證過程終止。
2)非法節(jié)點作為認證響應(yīng)方的重放攻擊
假設(shè)C冒充B向A發(fā)起入網(wǎng)申請。A向C發(fā)送認證包1,C以保存的認證包2回復(fù)。因為A與B認證時生成的tA和A與C認證時生成的tA幾乎不可能相等,C回復(fù)了錯誤的dA,A對C的認證過程終止。
針對傳統(tǒng)自組網(wǎng)認證協(xié)議依賴在線CA的問題,基于自組網(wǎng)無中心、扁平化的特性,本文提出了一種自組網(wǎng)中基于離線證書的雙向認證協(xié)議。在該協(xié)議中,沒有節(jié)點在線執(zhí)行CA的功能,因此無需考慮CA的選舉和轉(zhuǎn)移的問題。安全性分析表明,該協(xié)議可實現(xiàn)網(wǎng)內(nèi)節(jié)點和網(wǎng)外節(jié)點的雙向認證,可識別非法入侵和身份冒充,并可抵御重放攻擊。此外,基于可信集的分布式認證機制能夠降低自組網(wǎng)內(nèi)的認證開銷。本文設(shè)計的基于離線證書的雙向認證協(xié)議對公鑰加密算法、哈希算法和偽隨機數(shù)生成算法無特別要求,可根據(jù)實際應(yīng)用需求和設(shè)備特性選用合適的算法。