1、usb 內部包含內容
一般的 usbkey,其內部內置了一套加密算法,并提供了對應的開發(fā) sdk,對于用戶而言,其內部存儲的信息有:
1)usb PIN 碼,用于讀取 usb 信息;
2)usb 寫密碼,用于簽發(fā)者往 usbkey 中寫入賬號和密碼信息;
3)usb encrypt secret ,用于 usbkey 調用加密算法的秘鑰;
4)account,簽發(fā)者寫入的賬戶信息;
5)password,簽發(fā)者寫入的密碼信息。
PIN 碼和 usbkey 組成雙因子認證,任意一個丟失,都無法仿冒用戶身份。
2、基于沖擊-響應的雙因子認證
下面以基于沖擊-響應的雙因子認證來說明一般軟件加密狗的認證方式:

沖擊-響應雙因子認證流程
下面闡述一下 server 端校驗邏輯:
1.通過賬號 id 在數(shù)據(jù)庫中查詢對應的 user;
2.bcrypt(隨機字符串+salt(數(shù)據(jù)庫中記錄的 user 加密密鑰)== 隨機字符串加鹽 hash ?
3.賬戶密碼 == user.password ?
4.sdk加密算法(隨機字符串,user 加密密鑰) == 隨機字符串 usb 加密串?
user 表中存儲有:
user_read_secret: usb 的讀取 PIN 碼
user_write_secret: 簽發(fā)者對該用戶 usb 寫密碼
user_entrypt_sercret: 用戶加密密鑰