先貼圖:
在對外網開放的后台管理系統中,使用靜態口令進行身份驗證可能會存在如下問題:
(1) 為了便於記憶,用戶多選擇有特征作為密碼,所有靜態口令相比動態口令而言,容易被猜測和破解;
(2) 黑客可以從網上或電話線上截獲靜態密碼,如果是非加密方式傳輸,用戶認證信息可被輕易獲取;
(3) 內部工作人員可通過合法授權取得用戶密碼而非法使用;
靜態口令根本上不能確定用戶的身份,其結果是,個人可以輕松地偽造一個假身份或者盜用一個已有使用者的身份,給企業造成巨大的經濟和聲譽損失。本文主要介紹並實現了一種動態口令(OTP)的實現方式。
動態口令(OTP,One-Time Password)又稱一次性密碼,是使用密碼技術實現的在客戶端和服務器之間通過共享秘密的一種認證技術,是一種強認證技術,是增強目前靜態口令認證的一種非常方便技術手段,是一種重要的雙因素認證技術,動態口令認證技術包括客戶端用於生成口令產生器的,動態令牌,是一個硬件設備,和用於管理令牌及口令認證的后台動態口令認證系統組成。
otp從技術來分有三種形式, 時間同步、事件同步、挑戰/應答。
(1) 時間同步
原理是基於 動態令牌和 動態口令驗證服務器的時間比對,基於 時間同步的 令牌,一般每60秒產生一個新口令,要求服務器能夠十分精確的保持正確的時鍾,同時對其令牌的晶振頻率有嚴格的要求,這種技術對應的終端是硬件令牌。
(2)事件同步
基於事件同步的令牌,其原理是通過某一特定的事件次序及相同的種子值作為輸入,通過HASH算法中運算出一致的密碼。
(3)挑戰/應答
常用於的網上業務,在網站/應答上輸入 服務端下發的 挑戰碼, 動態令牌輸入該挑戰碼,通過內置的算法上生成一個6/8位的隨機數字,口令一次有效,這種技術目前應用最為普遍,包括刮刮卡、短信密碼、動態令牌也有挑戰/應答形式。
兩步驗證的流程:
如上圖,是一種基於時間同步的OTP計算方式,是通過客戶端和服務器持有相同的密鑰並基於時間基數,服務端和客戶端采用相同的Hash算法,計算出長度為六位的校驗碼。當客戶端和服務端計算出的校驗碼相同是,那么驗證通過。
由於客戶端需要存儲密鑰和計算校驗碼的載體,阿里雲的身份寶(或者Google 的Authenticator)提供了手機端的APP進行密鑰存儲和校驗碼計算。下面我們以這兩款客戶端為例,實現在應用采用OTP進行權限驗證,主要流程如下圖: