跳到主要內容

發表文章

目前顯示的是有「OTP」標籤的文章

OTP 一次性密碼完全解析:TOTP、HOTP 與挑戰回應機制如何強化多因子認證安全

什麼是 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 依計數器驅動,適合無時鐘的硬體 To...