張小波,陳軍勝,白曉明,張俊,石吉寶
(成都市勘察測繪研究院,四川成都 610081)
USBKEY是一種USB接口的硬件設(shè)備,具有唯一編號(hào),它內(nèi)置單片機(jī)或智能卡芯片,有一定的存儲(chǔ)空間,可用于存儲(chǔ)用戶的密鑰及數(shù)字證書,利用USBKEY內(nèi)置的公鑰算法(如HMAC-MD5算法)可實(shí)現(xiàn)對(duì)用戶身份的認(rèn)證。由于用戶密鑰保存在USBKEY中,理論上使用任何方式都無法讀取,因此保證了用戶認(rèn)證的安全性。
USBKEY用于身份認(rèn)證,首先需要進(jìn)行USBKEY的注冊(cè),在USBKEY中寫入用戶名信息,并在數(shù)據(jù)庫中記錄用戶名、USBKEY的序列號(hào)等。
圖1 USBKEY驗(yàn)證過程
USBKEY的驗(yàn)證過程如下:服務(wù)器端產(chǎn)生一個(gè)隨機(jī)數(shù),將隨機(jī)數(shù)發(fā)送給客戶端,客戶端的USBKEY利用此隨機(jī)數(shù)和存儲(chǔ)的密鑰文件通過硬件加密引擎進(jìn)行計(jì)算,得到運(yùn)算結(jié)果并發(fā)送給服務(wù)器;服務(wù)器端根據(jù)用戶信息和隨機(jī)數(shù)用加密引擎進(jìn)行計(jì)算,得到運(yùn)算結(jié)果,與客戶端發(fā)送的結(jié)果進(jìn)行比較,若結(jié)果一致則通過驗(yàn)證。
下面是以北京飛天誠信的ePass1000ND制作的一個(gè)基于ASP.NET的網(wǎng)絡(luò)信息系統(tǒng)身份認(rèn)證演示。
系統(tǒng)部署后,首先需要進(jìn)行USBKEY注冊(cè),在客戶機(jī)插入 USBKEY,輸入一個(gè)密鑰,然后點(diǎn)擊“USBKEY授權(quán)”,將密鑰加密處理后寫入U(xiǎn)SBKEY。
在USBKEY驗(yàn)證時(shí),需要輸入待驗(yàn)證的密鑰,然后點(diǎn)擊“USBKEY驗(yàn)證”,若用戶輸入的密鑰正確,則驗(yàn)證成功,否則驗(yàn)證失敗。
圖2 USBKEY注冊(cè)及驗(yàn)證演示
客戶端讀寫USBKEY是利用USBKEY廠家提供的ACTIVEX控件進(jìn)行的,需要在ASPX頁面的<body>段添加一個(gè)ACTIVEX對(duì)象,對(duì)象名為“epass”:
USBKEY的注冊(cè)需要在用戶數(shù)據(jù)庫中寫入用戶賬號(hào)密碼信息及用戶名與USBKEY對(duì)應(yīng)關(guān)系,在USBKEY中寫入密鑰等,USBKEY寫入密鑰的核心代碼如下:
USBKEY驗(yàn)證的實(shí)質(zhì)是驗(yàn)證服務(wù)器端存儲(chǔ)的密鑰與USBKEY中存儲(chǔ)的密鑰是否一致,為安全起見,在驗(yàn)證時(shí)并不是直接用密鑰進(jìn)行比對(duì),而是分別將密鑰與一組隨機(jī)數(shù)進(jìn)行不可逆的哈希運(yùn)算,比較哈希運(yùn)算的結(jié)果是否一致即可。USBKEY驗(yàn)證需要服務(wù)器與客戶端交互,服務(wù)器端生成隨機(jī)數(shù),利用隨機(jī)數(shù)和密鑰進(jìn)行哈希運(yùn)算,得到結(jié)果1;客戶端的USBKEY利用此隨機(jī)數(shù)和內(nèi)部存儲(chǔ)的密鑰進(jìn)行哈希運(yùn)算,得到結(jié)果2;服務(wù)器端將結(jié)果1和結(jié)果2進(jìn)行對(duì)比,若一致則驗(yàn)證成果,否則失敗。
(1)生成隨機(jī)數(shù)
(3)服務(wù)器端哈希運(yùn)算及驗(yàn)證
以上是USBKEY用于網(wǎng)絡(luò)信息系統(tǒng)身份認(rèn)證的最簡演示,在實(shí)際運(yùn)用時(shí),可以采取以下一些方法,進(jìn)一步提高網(wǎng)絡(luò)系統(tǒng)身份認(rèn)證的安全性:
(1)用戶名與USBKEY的序列號(hào)綁定:由于每個(gè)USBKEY都有一個(gè)不可更改的唯一序列號(hào),因此實(shí)際上是將用戶名與USBKEY硬件綁定了,用戶只要保管好自己的USBKEY就可以防止他人以本人身份登錄;
(2)寫入U(xiǎn)SBKEY的密鑰二次加密:一般以用戶名或密碼作為密鑰,經(jīng)加密后寫入U(xiǎn)SBKEY。雖然密鑰文件在USBKEY中對(duì)用戶是不可見的,但是由于用戶名或者密碼本身仍然有泄露風(fēng)險(xiǎn),因此可以自定義特定算法,對(duì)密鑰進(jìn)行二次加密后再寫入U(xiǎn)SBKEY,這樣即使非法用戶盜取了用戶名、密碼仍然無法復(fù)制USBKEY;
(3)啟用USBKEY自身的權(quán)限系統(tǒng):在寫入密鑰散列計(jì)算后得到的兩個(gè)文件時(shí),可以對(duì)這兩個(gè)文件的權(quán)限設(shè)置為需要用戶PIN碼驗(yàn)證,由于用戶PIN碼是USBKEY的使用者自行設(shè)置的,只與USBKEY硬件有關(guān),與身份認(rèn)證系統(tǒng)無關(guān),且PIN碼累計(jì)輸錯(cuò)一定次數(shù)后USBKEY將會(huì)自動(dòng)鎖定無法使用,采用此種方法可以顯著提高安全性。
[1]周廣輝.USBKEY用戶認(rèn)證平臺(tái)的研究和實(shí)現(xiàn)[J].信息安全與通信保密,2009(9):113~118.
[2]馬偉強(qiáng).我國網(wǎng)上銀行身份認(rèn)證技術(shù)分析[J].計(jì)算機(jī)安全,2012(3):50~52.
[3]北京飛天誠信科技有限公司.ePass1000ND開發(fā)文檔[R].