呂 良 李 瑞
(1.公安部第三研究所 上海 201204)
(2.華北電力大學(xué) 北京 102206)
近年來,黑客技術(shù)的發(fā)展使得信息化建設(shè)日益深入各類企業(yè)深陷網(wǎng)絡(luò)安全的風(fēng)險(xiǎn)之中,據(jù)統(tǒng)計(jì)絕大多數(shù)的安全事件都是由終端設(shè)備的非法接入內(nèi)網(wǎng)引起。另一方面,軍工產(chǎn)業(yè)、政府部門、金融等領(lǐng)域相對系統(tǒng)復(fù)雜,保密性強(qiáng),對內(nèi)部網(wǎng)絡(luò)安全可靠性有著嚴(yán)格需求。為了保障網(wǎng)絡(luò)內(nèi)部的安全可信,落實(shí)信息安全等級保護(hù)安全建設(shè),終端安全接入技術(shù)應(yīng)運(yùn)而生。企業(yè)在應(yīng)對網(wǎng)絡(luò)安全風(fēng)險(xiǎn)和安全威脅時(shí),不僅需要自上而下的信息安全管理體系,還需要自下而上的保證終端用戶安全接入的認(rèn)證協(xié)議,使接入企業(yè)內(nèi)部網(wǎng)絡(luò)的終端成為一個(gè)可信終端。
本文針對目前終端接入面臨的安全風(fēng)險(xiǎn)和安全接入需求,提出一種基于SM2的雙向認(rèn)證密鑰協(xié)商協(xié)議,分析其安全性,采用BAN邏輯進(jìn)行形式化分析,最后給出安全性分析結(jié)果。
數(shù)字簽名是指發(fā)送方用自己的私鑰對數(shù)字指紋進(jìn)行加密后所得的數(shù)據(jù),其中包括非對稱密鑰加密和數(shù)字簽名兩個(gè)過程,在可以給數(shù)據(jù)加密的同時(shí),也可用于接收方驗(yàn)證發(fā)送方身份的合法性。采用數(shù)字簽名時(shí),接收方需要使用發(fā)送方的公鑰才能解開數(shù)字簽名得到數(shù)字指紋。
數(shù)字指紋又稱為信息摘要,是指發(fā)送方通過HASH算法對明文信息計(jì)算后得出的數(shù)據(jù)。采用數(shù)字指紋時(shí),發(fā)送方會(huì)對明文進(jìn)行哈希運(yùn)算后生成的數(shù)字指紋(還要經(jīng)過數(shù)字簽名),以及采用對端公鑰對明文進(jìn)行加密后生成的密文一起發(fā)送給接收方,接收方用同樣的HASH算法對明文計(jì)算生成的數(shù)據(jù)指紋,與收到的數(shù)字指紋進(jìn)行匹配,如果一致,便可確定明文信息沒有被篡改。從以上數(shù)字簽名的加/解密過程中可以看出,數(shù)字簽名技術(shù)不但證明了信息未被篡改,還證明了發(fā)送方的身份。
國家密碼管理局在2010年12月份公布了《SM2橢圓曲線公鑰密碼算法》,SM2算法屬于橢圓曲線算法(ECC)當(dāng)中的一種?!禨M2橢圓曲線公鑰密碼算法》說明了簽名驗(yàn)簽、加密解密和密鑰交換算法的具體步驟。本論文參照《SM2橢圓曲線公鑰密碼算法》第三部分中的密鑰交換協(xié)議。考慮到終端設(shè)備的內(nèi)存空間和性能的限制性,本文在應(yīng)用SM2密鑰協(xié)商時(shí)省略了算法中的可選步驟,并與基于數(shù)字證書的雙向身份認(rèn)證相結(jié)合,其安全性不會(huì)降低。
本文利用數(shù)字簽名技術(shù),在SM2密鑰協(xié)商過程中實(shí)現(xiàn)了用戶A和用戶B的雙向身份認(rèn)證,認(rèn)證通過后得到雙方的會(huì)話密鑰。該協(xié)議適用于智能終端安全接入通信系統(tǒng)。用戶A和用戶B之間的認(rèn)證協(xié)商過程如圖1所示。以下用到的符號做以下說明,如表1所示。
表1 認(rèn)證協(xié)商通信符號說明
設(shè)用戶B和用戶A之間通過密鑰協(xié)商獲得的密鑰長度為LK,用戶A作為發(fā)起者,去連接用戶B,用戶B作為響應(yīng)者。
用戶A:
步驟1:隨機(jī)產(chǎn)生隨機(jī)數(shù)rA,本次會(huì)話唯一標(biāo)識rB,身份唯一標(biāo)識IDA。
用戶B:
步驟2:隨機(jī)產(chǎn)生隨機(jī)數(shù)rB,身份唯一標(biāo)識IDB。
用戶A:
用戶B:
步驟4:計(jì)算H(rA||Se||IDA),計(jì)算,如果得到結(jié)果為true,用戶B認(rèn)證用戶A成功,到步驟5,如果得到結(jié)果為false,用戶B立即中斷與用戶A的連接。
用戶A:
步驟7:計(jì)算H(rB||Se||IDB),計(jì)算,如果得到結(jié)果為true,用戶A認(rèn)證用戶B成功,至此用戶B和用戶A完成雙向認(rèn)證,如果得到結(jié)果為false,用戶B立即中斷與用戶A的連接。
用戶B和用戶A完成雙向認(rèn)證之后,進(jìn)行以下密鑰協(xié)商過程。
用戶A:
步驟8:選擇橢圓曲線上一點(diǎn)A=(xA,yA),點(diǎn)A滿足橢圓曲線方程,是非無窮遠(yuǎn)點(diǎn)。
用戶B:
步驟9:選擇橢圓曲線上一點(diǎn)B=(xB,yB),點(diǎn)B滿足橢圓曲線方程,是非無窮遠(yuǎn)點(diǎn)。
步驟10:取出點(diǎn)B中的域元素,將其數(shù)據(jù)類型轉(zhuǎn)化為整數(shù)型,并計(jì)算,其中
圖1 認(rèn)證協(xié)商過程圖
步驟12:取出點(diǎn)A中的域元素,將其數(shù)據(jù)類型轉(zhuǎn)化為整數(shù)型,并計(jì)算,其中
步驟14:計(jì)算KB=KDF(xV||yV||ZA||ZB||rA||rB,Lk)
用戶A:
步驟15:取出點(diǎn)A中的域元素,將其數(shù)據(jù)類型轉(zhuǎn)化為整數(shù)型,并計(jì)算,其中
步驟17:取出點(diǎn)B中的域元素,將其數(shù)據(jù)類型轉(zhuǎn)化為整數(shù)型,并計(jì)算,其中
步驟19:KA=KDF(xU||yU||ZA||ZB||rA||rB,Lk)。
步驟20:計(jì)算RA=rA?rB,將RA發(fā)送給用戶B。
用戶B:
步驟21:計(jì)算RB=rA?rB,計(jì)算,如果結(jié)果為false,協(xié)商失敗,立即中斷與用戶A的通信連接,如果結(jié)果為true,至此用戶A和用戶B密鑰協(xié)商成功,雙方分別得到接下來進(jìn)行數(shù)據(jù)傳輸?shù)臅?huì)話密鑰KB=KA。
BAN邏輯語法具體說明如下:
1)P|≡X:P相信X,主體P相信X是真的。
2)P|:X:P曾說過X,主體P在某個(gè)時(shí)刻傳送X。
3)P<X:P曾看到過X,有主體曾發(fā)送過來包含X的信息,主體P可以讀出X。
4)#(X):X是新鮮的。
5){X}K:用密鑰K加密X得到的密文。
BAN主要推理規(guī)則如下。
1)消息含義規(guī)則
2)臨時(shí)值驗(yàn)證規(guī)則
3)新鮮性規(guī)則
4)會(huì)話密鑰規(guī)則
使用BAN邏輯證明本文設(shè)計(jì)協(xié)議的安全性,形式化說明協(xié)議能夠達(dá)到預(yù)期安全目標(biāo)。先根據(jù)BAN邏輯需求對協(xié)議步驟進(jìn)行表示如下。
假設(shè):A|≡#(rB),A|≡#(IDB),B|≡#(rA),B|≡#(IDA) ;需證明:1)A|≡#(K);2)B|≡#(K);3)A|≡
證明過程如下:
1)因A|≡#(rB),A|≡#(IDB),結(jié)合新鮮性規(guī)則,可得A|≡#(H(rB,Se,IDB)),再可得A|≡#{rB,Se,IDB},再可得A|≡#K。
2)因B≡#(rA),B|≡#(IDA),結(jié)合新鮮性規(guī)則,可得B|≡#(H(rA,Se,IDA)),再可得B|≡#{rA,Se,IDA},再可得B|≡#K。
因A|≡ #(H(rB,Se,IDB))?A|≡B|~(H(rB,Se,IDB)),結(jié)合臨時(shí)值校驗(yàn)規(guī)則,可得A|≡B|≡(H(rB,Se,IDB))。
因A|≡#K?A|≡B|≡(H(rB,Se,IDB)),結(jié)合會(huì)話密鑰規(guī)則,可得A|≡
因B|≡ #(H(rA,Se,IDA))?B|≡A|~(H(rA,Se,IDA)),結(jié)合臨時(shí)值校驗(yàn)規(guī)則,可得B|≡A|≡(H(rA,Se,IDA))。
因B|≡#K?B|≡A|≡(H(rA,Se,IDA)),結(jié)合會(huì)話密鑰規(guī)則,可得
綜上,可證明本文方案可以到達(dá)預(yù)期認(rèn)證協(xié)商目標(biāo),本文協(xié)議是安全的。
在所提出的方案中,用戶的私鑰由用戶持有的安全芯片內(nèi)的隨機(jī)數(shù)發(fā)生器生成。它存儲(chǔ)在安全芯片的存儲(chǔ)單元中,無法導(dǎo)出。受信任的第三方CA通過PKI技術(shù)發(fā)布用戶的簽名證書。證書包括用戶的公鑰。,只有合法用戶才能擁有與簽名公鑰對應(yīng)的正確簽名私鑰。用戶A確定(rA||Se||IDA),發(fā)送給用戶B。用戶B通過驗(yàn)證認(rèn)證用戶A的身份,其中用戶B的運(yùn)算涉及用戶A的公鑰。如果返回的結(jié)果為true,則表明消息的確由持有私鑰dA的合法用戶A發(fā)送的。同樣地,用戶A通過計(jì)算認(rèn)證用戶B。因此,用戶A和用戶B之間實(shí)現(xiàn)了雙向身份認(rèn)證。
用戶A發(fā)送給用戶B的認(rèn)證請求中包含隨機(jī)數(shù)rA,其消息為即由密文傳輸。因此,如果攻擊者δ重放一條之前來自于用戶A的消息給用戶B,用戶B能夠通過計(jì)算驗(yàn)證隨機(jī)數(shù)rA的新鮮性。因此,即使攻擊者δ發(fā)送相同的消息給B,通過B驗(yàn)證隨機(jī)數(shù)的新鮮性確定其為非法用戶。因此提出的協(xié)議可以防止重放攻擊。
雙方用戶不僅可以相互進(jìn)行雙向身份認(rèn)證,也能確認(rèn)其消息的發(fā)送者。在提出的協(xié)議中,用戶B會(huì)驗(yàn)證,如果驗(yàn)證計(jì)算返回結(jié)果為true,消息被確認(rèn)為由合法用戶A發(fā)送的。否則,則可能發(fā)生了假冒攻擊。由于安全模型提出CA是可信的第三方,僅有合法用戶才能得到數(shù)字簽名公鑰。因此攻擊者δ無法利用假冒攻擊通過所提出協(xié)議的認(rèn)證階段。
我們提出的協(xié)議在密鑰協(xié)商和認(rèn)證之后,在雙方之間發(fā)送的傳輸數(shù)據(jù)上提供加密信道。只有達(dá)到身份驗(yàn)證和密鑰協(xié)議的用戶才知道會(huì)話密鑰。攻擊者δ無法獲取共享會(huì)話密鑰。由于無法使用共享會(huì)話密鑰無法正確解密網(wǎng)絡(luò)數(shù)據(jù)包,因此無法注入惡意信息。如果發(fā)送由用戶A或用戶B加密的惡意數(shù)據(jù),用戶B或用戶A將無法使用正確的共享會(huì)話密鑰正確解密惡意數(shù)據(jù),并且丟棄錯(cuò)誤數(shù)據(jù)。
攻擊者δ截取來自用戶A的消息。由于攻擊者δ無法得到用戶B的私鑰,所以即使截獲此消息也無法獲得(rA||Se||IDA),即不能對用戶B做出正確的回應(yīng)消息。同樣,攻擊者δ也無法對用戶A做出正確的回應(yīng)。因此,提出的協(xié)議可以抵抗中間人攻擊。
假設(shè)攻擊者δ執(zhí)行暴力攻擊或離線字典攻擊以破解共享會(huì)話密鑰。由于相互認(rèn)證的粒度,密鑰協(xié)議發(fā)生在每個(gè)TCP連接上。該協(xié)議在每次通信結(jié)束后判斷連接是否超時(shí)。超時(shí)的話,重新啟動(dòng)密鑰協(xié)議和相互身份驗(yàn)證以獲取新的共享會(huì)話密鑰。由于共享會(huì)話密鑰在短時(shí)間內(nèi)更新,攻擊者δ無法獲得新的會(huì)話密鑰。因此一旦共享會(huì)話密鑰生效,攻擊者就無法在使用所提出的協(xié)議的通信雙方之間的會(huì)話上長時(shí)間竊聽。
用于生成密鑰的元素一次更改一個(gè),并且不能生成其他密鑰,一個(gè)密鑰被破解,不會(huì)影響其他密鑰的安全性,提出的協(xié)議具有的這種特性,稱為完全前向保密(PFS)。認(rèn)證協(xié)商協(xié)議將根據(jù)雙方提供的隨機(jī)數(shù)定期創(chuàng)建新密鑰。由于雙方都提供了只有在密鑰協(xié)議時(shí)才知道的隨機(jī)值,因此生成的每個(gè)新密鑰與先前創(chuàng)建的密鑰不同。即使對手截獲密鑰,它也不能長時(shí)間使用攔截的密鑰。此外,由于未通過密鑰協(xié)議獲得新密鑰,因此必須啟動(dòng)新的暴力計(jì)算以獲取正在使用的密鑰。因此,攻擊者獲得會(huì)話密鑰很困難。
針對現(xiàn)有企業(yè)終端接入內(nèi)網(wǎng)面臨的主要安全問題,本文結(jié)合數(shù)字簽名和SM2算法,設(shè)計(jì)了一種基于數(shù)字簽名和SM2的雙向認(rèn)證協(xié)商協(xié)議,并給出了正確性證明。最后經(jīng)過安全性分析,證明本文協(xié)議在抵抗消息注入攻擊、重放攻擊、中間人攻擊、竊聽攻擊、假冒攻擊等攻擊手段方面具有優(yōu)勢。