1. 程式人生 > >使用USB Key(加密狗)實現身份認證

使用USB Key(加密狗)實現身份認證

首先你需要去買一個加密狗裝置,加密狗是外形酷似U盤的一種硬體裝置! 這裡我使用的堅石誠信公司的ET99產品

公司專案需要實現一個功能,就是客戶使用加密狗登入, 客戶不想輸入任何密碼之類的東西,只需要插上類似U盤的加密狗就驗證身份登入! (當然如果U盤掉了,也就不安全了哦), 當時這個分配給我的時候,就給了我個ET99裝置(類似於U盤那東西),和官方網站! 去官方下載資料(API & DEMO & DOC ),當時我自己心裡也沒有底,只有先試試吧! 正好今天“試”出來了,和大家分享一下!

ET99的安全性:

  1. 登入使用者必須先輸入自己的USER PIN進行驗證後才有許可權完成計算。
  2. USER PIN有最大重試次數限制,連續輸入錯誤會鎖死。從而防止硬體丟失後,被不合法的使用者反覆重試。
  3. 儲存在ET99多功能鎖中的金鑰不能被任何人獲取。
  4. 使用者登入時必須具備硬體和保護硬體的USER PIN雙重因子時才能登入。有硬體,不知道USER PIN或者知道USER PIN,沒有硬體,都是沒有辦法登入的。比傳統的使用者名稱和密碼方式大大增加的登入使用者的安全性。(類似於銀行的U盾)
  5. 保障了系統開發商的利益。使用硬體登入,不存在使用者名稱密碼共享的問題

ET99的認證方式

在整個認證過程中,ET99採用衝擊響應的認證方式。當需要在網路上驗證使用者身份時,先由客戶端向伺服器發出一個驗證請求。伺服器接到此請求後生成一個隨機數並通過網路傳輸給客戶端(此為衝擊)。客戶端將收到的隨機數提供給ET99,由ET99使用該隨機數與儲存在ET99中的金鑰進行HMAC-MD5運算並得到一個結果作為認證證據傳給伺服器(此為響應)。與此同時,伺服器也使用該隨機數與儲存在伺服器資料庫中的該客戶金鑰進行HMAC-MD5運算,如果伺服器的運算結果與客戶端傳回的響應結果相同,則認為客戶端是一個合法使用者。

test

如何開始:

1、在執行ET99全功能Active控制元件和ET99網頁安全Active控制元件之前,請把FT_ET99_API.dll、ET99_MOD.dll和ET99_FULL.dll拷貝到系統目錄下(一般位於windows系統中的system32目錄下),然後註冊全功能Active控制元件和網頁Active控制元件,命令列命令如下:regsvr32 ET99_MOD.dll和 regsvr32 ET99_FULL.dll.

2. 初始化裝置:

setsoPin 
  

setpid

changuserPin

到這一步還沒有結束呢 , 我操作的時候就以為結束了,部署官方的et99_sample_csharp_bs示例程式 , 怎麼也登入不進去! 因為這裡還沒有寫入Key!

INIT

而就是寫入Key到資料庫和ET99裝置中這裡需要我們來開發! (之前不清楚AspInit幹什麼,一頭霧水)!

1. 實現AspInit頁面功能, 把key和使用者名稱寫入到ET99和資料庫中

i

2.第一步實現了就可以去登入試試了

l

3. 前面不是說PIN為16位嗎? 怎麼這裡你才輸入4位呢? 這樣的話,那個客戶願意記住16位的PIN呢? 就需要自己寫個修改PIN頁面了! 第一次修改的時候,你還得輸入16位PIN碼,以後就不用了!

d

4. 現在總是大功告成了吧,還沒呢?不是說要自動登入嗎?怎麼還要我點選登入呢?這個這個,好像不行吧!其他網站也是隻有記住使用者名稱和密碼啊?好像還是需要去點選一下登入按鈕吧! 老大說: "就先這樣吧!"。還好今天早上,突然想到了思路, 使用者第一次成功登入後,把PID,PIN寫入Cookie裡面,當下次登入的時候直接在Cookie裡面獲取,在使用JS呼叫登入按鈕的click()事件即可! 可是很多人說cookie不安全啊,呵呵,就算別人獲取到cookie裡面的值又想怎麼, ET99裝置他總沒有! 必須擁有PID+PIN+ET99裝置才可以成功登入! 有個小插曲,做自動登入的時候,因為onload事件呼叫登入按鈕的click()事件形成了死迴圈,一直在onload一直在click()!最後在前臺JS宣告個count計數變數,後臺登入成功之後在把count值修改一下即可! 到此基本結束! 
結語:
這一週基本都在做這個!其中也遇到過很多錯誤! 很感謝http://www.cnblogs.com/novawu/archive/2010/02/05/1664444.html這位大哥寫的ET99Tools,個人覺得比官方的還好!特別是異常處理那塊!(當然我程式中異常處理也是直接copy他的程式碼過去 ET99_API.cs), 官方的文件也要仔細的看,當時我就是由於走馬觀的看了看,程式丟擲的異常都不知道什麼情況,比如執行有些函式必須的前置條件,結果前置條件都沒有執行,當然程式會出錯! 另:winform程式是引用ET99_MOD.dll,而asp.net程式則是引用ET99_FULL.dll,之前也是DLL引用錯了,一直在錯!