技術交流

變動密碼更安全 - OTP 演算法

更新於

OTP(One Time Password),一次性密碼:就如同衛生碗筷,用完就丟、不能重複使用,並且有效期極短。下次要使用時就必須重新產生一組密碼來作驗證。由於密碼隨時變動,所以竊取、駭客難度提升不少。

OTP 架構

OTP 演算法

Event Base - OATH HOTP

OATH 在 2005 年訂出了一個基於 HMAC 的標準 HOTP 演算法,改良了舊式的 OTP 演算法,在輸入端由上一個 OTP 改為目前的 Counter 值(OTP 的產生次數)。再加強 OTP 位數的選擇方式(runcate),可以是 6~8 碼的 OTP。

公式:OTPc = HOTP(Key,Counter) = Truncate(HMAC-SHA1(Key,Counter))

Truncate 函式主要在將 Hash 函式處理完的資料轉換成 6~8 碼的 10 進位數字。當使用者及認證端用同一把金鑰,同步一樣的 counter 即可驗證該使用者所產生的動態密碼。

Time Base - OATH TOTP

另一種演算法將 OTP 的產生因子改成時間來計算,也就是將 HOTP 的 counter 參數改為 time 參數,此系統將根據時間的不同產生不一樣的 OTP。使用此類 OTP 前,必須先讓使用者端的時間,與認證端的時間能夠同步。

此演算法公式:OTPt = HOTP(Key,Time) = Truncate(HMAC− SHA1(Key,Time))

嚴格來說,此方式不算一次性密碼,因為在認可的時間內該密碼都有效,並無使用一次的限制,所以縮短有效期可提高安全性,當然也要顧及使用者操作的可能性。

MOTP 的應用

將 MOTP 作為除使用者帳號、密碼以外的第二重身分驗證,若釣魚網站或駭客側錄帳號、密碼及 MOTP 密碼,所側錄的 OMTP 僅在短短時間內有效,提升非法使用的難度。

閱讀更多