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