什麼是 OTP?三種產生機制一次看懂
OTP(One-Time Password) 是每次認證後即刻失效的動態密碼,從根本上杜絕重放攻擊(Replay Attack)。依產生機制,OTP 分為三類:TOTP(時間同步)、HOTP(計數同步)、以及非同步挑戰回應。
TOTP(RFC 6238) 以當前 Unix 時間戳為輸入,每 30 秒產生一組新密碼,Google Authenticator 即採此標準。HOTP(RFC 4226) 則以遞增計數器為輸入,密碼不隨時間失效,而是在每次成功驗證後計數器才往前推進,適合離線裝置。非同步挑戰回應由伺服器下發隨機挑戰值(Challenge),用戶端以金鑰運算後回傳,不需要時間或計數同步,安全性最高但實作較複雜。
OTP 如何強化多因子認證(MFA)
MFA 要求使用者同時提供「知識(密碼)」、「持有(裝置)」、「生物特徵」三要素中的兩項以上。OTP 作為「持有」要素,即使靜態密碼遭洩漏,攻擊者仍無法在有效時間窗口內偽造動態碼,顯著降低帳戶接管風險。
TOTP 的核心演算法為 HMAC-SHA1:以共享金鑰(Secret Key)與時間步長(Time Step)作為 HMAC 輸入,再截取 6-8 位數字輸出。伺服器端只需保存同一把 Secret Key,即可離線驗算用戶端提交的 OTP,無需任何網路往返,驗證延遲極低。實際部署時,建議允許前後一個時間步長的容錯(Clock Skew Tolerance),以因應用戶端時鐘偏移。
import pyotp
secret = pyotp.random_base32() # 產生共享金鑰
totp = pyotp.TOTP(secret) # 建立 TOTP 實例
print(totp.now()) # 取得當前 6 位 OTP
print(totp.verify("123456")) # 驗證用戶輸入
💡 重點整理
- TOTP 每 30 秒更新,適合行動裝置 App(如 Google Authenticator)。
- HOTP 依計數器驅動,適合無時鐘的硬體 Token。
- 挑戰回應 由伺服器主導,最能抵禦中間人攻擊(MITM)。
- OTP 作為 MFA 的持有要素,可有效阻擋憑證填充(Credential Stuffing)攻擊。
選擇 OTP 機制時,優先評估裝置是否具備穩定時鐘;有時鐘選 TOTP,無時鐘選 HOTP,高安全場景則採挑戰回應。三者皆能大幅強化帳戶安全,是現代身份驗證架構不可或缺的基石。
留言
張貼留言