TOTP 相關補充 - royal0721/secure-coding-demo-client GitHub Wiki

前言

我們在書中有提到 TOTP,以下是其他驗證碼的比較說明:

驗證碼類型比較表

類型 全名 基礎原理 是否與時間有關 是否一次性 是否需與伺服器同步 常見應用 優點 缺點
OTP One-Time Password 一次性密碼,通常由伺服器產生並發送 否(但可能有過期時間) Email、簡訊驗證碼 簡單、用戶熟悉 容易被攔截(例如 SMS)
TOTP Time-based One-Time Password 基於時間+密鑰產生密碼(RFC 6238) 是(預設每30秒變動) 是(需時間同步) 2FA App (Google Authenticator 等) 安全、不依賴網路傳輸 時間不同步會導致驗證失敗
HOTP HMAC-based One-Time Password 基於計數器與密鑰的 HMAC(RFC 4226) 是(需同步計數器) 一些硬體 Token 不依賴時間,適合無時鐘設備 同步計數器較麻煩
SMS Code - OTP + 傳送到手機的簡訊 (常設過期) 常見帳號登入驗證 使用簡單 有被劫持風險(SIM Swap)
Push Notification OTP - 用戶點擊通知驗證(如 Duo、Authy Push) 公司內部 2FA 系統 體驗好、安全性高 需 App + 網路連線
Email OTP - 發送到電子信箱的一次性密碼 忘記密碼、登入驗證 普及率高 易被駭客釣魚入侵信箱
Biometric OTP - 結合一次性密碼與生物辨識(指紋、臉部) 高安全性場景 雙重認證效果強 實作複雜、成本高

思考一下使用場景

想法 建議使用的驗證方式
想要高安全性、離線也能用 TOTP / HOTP
想快速整合、不寫 App SMS 或 Email OTP
想避免 OTP 遭攔截、體驗好 Push 通知 OTP(如 Duo)
想在企業內部強化控管 TOTP 搭配 MDM 或 OTP Token
想自建 2FA 系統 TOTP(配合 speakeasy、pyotp 等套件)
  • 以上感謝 GPT 幫忙整理