左志斌
(鄭州市惠濟(jì)區(qū)委辦公室,河南 鄭州 450044)
隨著互聯(lián)網(wǎng)的不斷發(fā)展,越來越多的人開始嘗試在線交易。然而病毒、黑客、網(wǎng)絡(luò)釣魚以及網(wǎng)頁仿冒詐騙等惡意威脅,給在線交易的安全性帶來了極大的挑戰(zhàn)。調(diào)查顯示,去年美國由于網(wǎng)絡(luò)詐騙事件,使得銀行和消費者遭受的直接損失總計達(dá)24億美元,平均每位受害者損失約1200美元。層出不窮的網(wǎng)絡(luò)犯罪,引起了人們對網(wǎng)絡(luò)安全的關(guān)注,如何構(gòu)建一種安全的通信系統(tǒng)成為目前迫切需要解決的問題。本文將介紹一種使用USBKey實現(xiàn)的基于數(shù)字證書的身份認(rèn)證方案。該方案使用USBKey實現(xiàn)基于數(shù)字證書的客戶端與服務(wù)器端的身份相互認(rèn)證,利用該身份認(rèn)證方案,可以同時完成客戶端與服務(wù)器端雙方會話密鑰的分配。最后,文章對該身份認(rèn)證方案的安全性和有效性進(jìn)行了分析。
1.1 數(shù)字證書
數(shù)字證書又稱為數(shù)字標(biāo)識(DigitalID),是標(biāo)志網(wǎng)絡(luò)用戶身份信息的一系列數(shù)據(jù)。它提供了一種在Internet上身份驗證的方式,是用來標(biāo)志和證明網(wǎng)絡(luò)通信雙方身份的數(shù)字信息文件。通俗地講,數(shù)字證書就是個人或單位在Internet上的身份證明。
數(shù)字證書是由CA中心簽發(fā)的,它本身就是用戶的身份和與之所持有的公鑰的結(jié)合。在結(jié)合之前,由一個可信任的認(rèn)證機(jī)構(gòu)(CA)來證實用戶的身份,然后由可信任的認(rèn)證機(jī)構(gòu)(CA)對該用戶身份及對應(yīng)的公鑰相結(jié)合的證書進(jìn)行數(shù)字簽名,用來證明證書的有效性。
一個數(shù)字證書的內(nèi)容主要包括以下幾部分:①所有者的公鑰;②所有者的名字;③公鑰的失效期;④發(fā)放機(jī)構(gòu)的名稱(發(fā)放數(shù)字證書的CA);⑤數(shù)字證書的序列號;⑥發(fā)放機(jī)構(gòu)的數(shù)字簽名。
數(shù)字證書采用公鑰密碼體制中的RSA體制,每個數(shù)字證書都擁有一對互相匹配的密鑰,即私有密鑰(私鑰)和公共密鑰(公鑰)。其中,私鑰僅為用戶本人所掌握,主要用于解密和數(shù)字簽名;而公鑰可以對外公開,主要用于加密和驗證簽名。數(shù)字證書的加密過程是一個不可逆的過程,即利用公鑰加密后的數(shù)據(jù)只能通過相應(yīng)的私鑰才能進(jìn)行解密。因此,在發(fā)送數(shù)據(jù)時,只要發(fā)送方利用接收方的公鑰對要發(fā)送的數(shù)據(jù)進(jìn)行加密,就可以確保數(shù)據(jù)的保密性,因為即使加密數(shù)據(jù)被第三方截獲,由于沒有相應(yīng)的私鑰,第三方也無法進(jìn)行解密。而第三方要破解出私鑰也是不現(xiàn)實的,即使在已知公鑰、明文、密文的條件下,要推導(dǎo)出目前使用的1024位RSA密鑰,也需要上千年的時間[1-2]。
1.2 USBKey
USBKey是一種USB接口的硬件設(shè)備。它內(nèi)置單片機(jī)或智能卡芯片,有一定的存儲空間,可以存儲用戶的私鑰以及數(shù)字證書。由于用戶私鑰保存在USBKey的密碼鎖中,理論上使用任何方式都無法讀取,因此保證了身份認(rèn)證中用戶私鑰的安全性。
每一個USBKey都具有硬件PIN碼保護(hù),PIN碼和硬件構(gòu)成了用戶使用USBKey的兩個必要因素,即所謂“雙因子認(rèn)證”。用戶只有同時取得了USBKey和用戶PIN碼,才可以登錄系統(tǒng)。即使用戶的PIN碼被泄漏,只要用戶持有的USBKey不被盜取,合法用戶的身份就不會被仿冒;而如果用戶的USBKey遺失,拾到者由于不知道用戶PIN碼,也無法仿冒合法用戶的身份[3]。
USBKey具有安全數(shù)據(jù)存儲空間,可以存儲數(shù)字證書、密鑰等秘密數(shù)據(jù),對該存儲空間的讀寫操作必須通過程序?qū)崿F(xiàn),用戶無法直接讀取,其中用戶密鑰是不可導(dǎo)出的,杜絕了復(fù)制用戶數(shù)字證書或身份信息的可能性。
USBKey內(nèi)置CPU,可以實現(xiàn)加解密和簽名的各種算法,加解密運算在USBKey內(nèi)進(jìn)行,保證了密鑰不會出現(xiàn)在計算機(jī)內(nèi)存中,從而杜絕了用戶密鑰被黑客截取的可能性[4]。
2.1 設(shè)計思想
該身份認(rèn)證方案的設(shè)計思想如下:在雙方進(jìn)行數(shù)據(jù)通信前,通信雙方相互認(rèn)證對方的身份。首先,客戶端使用自己的證書私鑰對隨機(jī)數(shù)進(jìn)行簽名發(fā)送給服務(wù)器端,服務(wù)器端驗證簽名來實現(xiàn)對客戶端的身份認(rèn)證。之后,服務(wù)器端使用自己的證書私鑰對自己產(chǎn)生的隨機(jī)數(shù)、客戶端發(fā)送過來的隨機(jī)數(shù)進(jìn)行簽名后發(fā)送給客戶端,客戶端通過驗證簽名來實現(xiàn)對服務(wù)器端的身份認(rèn)證。最后,客戶端將接收到的服務(wù)器端隨機(jī)數(shù)進(jìn)行簽名后發(fā)送回服務(wù)器端,服務(wù)器端通過比較該隨機(jī)數(shù)是否是自己發(fā)送的隨機(jī)數(shù)來實現(xiàn)身份認(rèn)證過程中的抗重放攻擊[5]。
2.2 身份認(rèn)證過程
過程1:實現(xiàn)服務(wù)器端對客戶端的身份認(rèn)證;
①客戶端調(diào)用自己的USBKey產(chǎn)生非重復(fù)的隨機(jī)數(shù)r1;
②客戶端使用存儲在USBKey中的證書私鑰(Ka私)對{隨機(jī)數(shù)r1+服務(wù)器端身份}進(jìn)行簽名獲得簽名信息Ma;
③客戶端將獲得的簽名信息Ma發(fā)送到服務(wù)器端;
④服務(wù)器端提取存儲的客戶端的證書公鑰(Ka公),使用該公鑰對簽名信息Ma進(jìn)行驗證簽名同時檢驗服務(wù)器身份,驗證通過則證明該信息是由客戶端A發(fā)送的,該信息是完整的,未經(jīng)篡改的;否則,拒絕該用戶;
過程2:實現(xiàn)客戶端對服務(wù)器端的身份認(rèn)證;
⑤服務(wù)器端產(chǎn)生非重復(fù)的隨機(jī)數(shù)r2;
⑥服務(wù)器端使用自己的證書私鑰(Kb私)對{隨機(jī)數(shù)r1+隨機(jī)數(shù)r2+客戶端身份}進(jìn)行簽名獲得簽名信息Mb;
⑦服務(wù)器將簽名信息Mb發(fā)送到客戶端;
⑧客戶端使用服務(wù)器端的證書公鑰(Kb公)驗證簽名信息Mb并驗證客戶端身份;驗證通過則證明了服務(wù)器端的身份,該信息是服務(wù)器端發(fā)送的,該信息是完整的,未經(jīng)篡改的;
⑨客戶端比較自己產(chǎn)生的隨機(jī)數(shù)r1與接收的隨機(jī)數(shù)r1以證明該次會話是自己請求的應(yīng)答;
過程3:實現(xiàn)身份認(rèn)證過程中的抗重放攻擊。
⑩客戶端使用自己的證書私鑰(Ka私)對{隨機(jī)數(shù)r2}進(jìn)行簽名獲得簽名信息Mc;
該次認(rèn)證的目的是通過服務(wù)器端檢查發(fā)送的隨機(jī)數(shù)與接收的隨機(jī)數(shù)是否相同來證明是否有重放攻擊,在通信雙方無法建立時鐘同步的情況下,該方法可以很好地解決重放攻擊的發(fā)生。
身份認(rèn)證過程流程圖如圖1所示。
3.1 在身份認(rèn)證過程的開始,需要驗證客戶端用戶的PIN碼,該步驟保證了登錄用戶必須是USBKey的合法持有者,否則即使持有USBKey,由于不知道用戶PIN碼,也無法進(jìn)行下一步操作;
3.2 基于該方案的身份認(rèn)證過程,是利用公鑰密碼技術(shù)實現(xiàn)的,它的安全性從根本上取決于所使用私鑰的安全性。服務(wù)器端私鑰可以在服務(wù)器端由專業(yè)的人員通過相關(guān)的安全策略和手段來管理,而客戶端私鑰由于由用戶掌握,安全性成為薄弱環(huán)節(jié)。在該身份認(rèn)證方案中,客戶端用戶私鑰是通過USBKey產(chǎn)生的,產(chǎn)生后即存放在USBKey中,用戶無法進(jìn)行讀取。同時,客戶端用戶私鑰的使用,包括對傳輸信息的簽名和驗證簽名都是在USBKey中進(jìn)行的,保證了用戶私鑰不會出現(xiàn)在計算機(jī)內(nèi)存中,從而杜絕了用戶密鑰被黑客截取的可能性,保證了認(rèn)證的安全性;
圖1 身份認(rèn)證流程圖
3.3 為了使用USBKey實現(xiàn)證書私鑰的數(shù)據(jù)簽名、驗證簽名以及其他各種加解密操作,可以使用CryptoAPI的開發(fā)模式。CryptoAPI是微軟提供的一套Win32環(huán)境下加解密和簽名認(rèn)證的編程接口,以供應(yīng)用程序開發(fā)人員調(diào)用。通過調(diào)用這套函數(shù)接口,應(yīng)用程序可以方便地操作USBKey來完成對數(shù)據(jù)的加解密和簽名驗證的功能;
3.4 在該方案中可以在身份認(rèn)證的過程中,添加會話密鑰的傳輸,以實現(xiàn)通信中的密鑰分配功能。
[1]楊波.現(xiàn)代密碼學(xué)(第3版)[M].北京:清華大學(xué)出版社,2015.
[2]王育民,劉建偉.通信網(wǎng)的安全理論與技術(shù)[M].西安:西安電子科技大學(xué)出版社,2002.
[3]關(guān)振勝.公鑰基礎(chǔ)設(shè)施PKI及其應(yīng)用[M].北京:電子工業(yè)出版社,2008.
[4]李濤.網(wǎng)絡(luò)安全概論[M].北京:電子工業(yè)出版社,2004.
[5]范紅,馮登國.安全協(xié)議理論與方法[M].北京:科學(xué)出版社,2003.