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 等套件) |