跳至主要內容
>_ITDITD網站資安平台

名詞解釋

什麼是一次性密碼(OTP)— TOTP/HOTP/簡訊的差異與限制

一次性密碼(OTP)是一種只用一次、且只在短時間內有效的拋棄式驗證碼。本文從防禦視角,講解驗證器 App 的 TOTP、以計數為基礎的 HOTP、以及用簡訊送達的驗證碼三者的差異,說明它為何對密碼外洩有很強的防護,以及它的限制——中間人釣魚仍可能將它攻破,並刻意不寫攻擊手法。

發布於 2026-07-02 更新於 2026-07-02 閱讀時間 1 分鐘

只用一次、拋棄即丟——這就是一次性密碼(OTP)。本文整理各種類的差異,以及意外少有人知的限制(釣魚仍可能將它攻破)(不會寫出攻擊手法)。

種類:TOTP / HOTP / SMS-OTP

它們常被一律歸為「拋棄式驗證碼」,但依產生方式的不同,可分成三種。

TOTP(以時間為基礎)

由 App 從共用祕密+目前時間計算而得。大約每 30 秒切換一次。可離線運作。

HOTP(計數)

依「次數(計數)」而非時間前進。每按一次就給下一個驗證碼。硬體權杖等會使用。

SMS-OTP

用簡訊送出驗證碼。方便但易受 SIM 交換與中繼攻擊,是最脆弱的方式。

OTP 的三種主要方式。強度幾乎取決於『能不能交給假網站』。

它們都同樣具有「只用一次、短命」的性質,所以即使固定密碼外洩,那個驗證碼本身也很難被重複使用。特別是 TOTP,它不經過網路、在 App 內部計算,因此沒有像簡訊那樣的攔截路徑。

強項與限制:對釣魚仍然「交得出去」

OTP 補上了固定密碼的弱點,但它並非萬能。決定性的限制在於「由人來讀取並輸入驗證碼」這一點。

OTP 奏效的場景

  • 擋下因密碼外洩/重複使用造成的帳號被盜
  • 即使被偷看到,也會很快失效、難以被重複使用
  • 驗證器 App 的 TOTP 可離線運作,比簡訊更抗攔截

OTP 被攻破的場景

  • 中間人(AiTM)釣魚:假網站把 OTP 中繼給真網站並登入
  • SIM 交換:劫持手機號碼、抽走 SMS-OTP
  • 根本原因=人能把驗證碼交給假網站(=它並未繫結在網域上)

本站的觀點:OTP 是中途站,終點是通行金鑰

OTP 是脫離「只有密碼」的一個絕佳第一步。事實上,不論是簡訊還是 TOTP,光是開起來就能擋下大半的帳號被盜。但本站把 OTP 定位為中途站,而非終點。只要中間人釣魚仍是真實的威脅,最終形態就是簽章繫結在網域上、從結構上無法對假網站出示的通行金鑰(FIDO2)。優先順序很清楚:先在所有帳戶開啟 OTP,再從王國之鑰(電子郵件、網域、支付)開始依序提升到通行金鑰。重點是不要依賴「靠小心來識破假網站」

接下來閱讀

FAQ

Q一次性密碼和一般密碼有什麼不同?
A

一般密碼在你更改之前都保持不變(固定),所以一旦外洩,在你更換之前就會持續被濫用。一次性密碼(OTP)則是拋棄式的——只用一次、且只在短時間內有效——在被使用的那一刻就失效。因此即使被偷看到也很難被重複使用,能補上固定密碼的弱點(外洩與重複使用)。許多服務會把它當作在密碼之上的『另一個證明』,作為雙因素驗證的一種方式來使用。

Q用簡訊收取的一次性密碼安全嗎?
A

它確實比只有密碼強,但在 OTP 之中屬於最弱的一類。簡訊可能透過 SIM 交換(劫持你的手機號碼)被攔截,或被中間人釣魚在假網站中繼而抽走。可以的話,請往驗證器 App 的 TOTP 遷移,重要帳戶則進一步遷移到通行金鑰。

Q為什麼驗證器 App 的驗證碼每 30 秒左右就會變?
A

因為那是 TOTP(以時間為基礎的一次性密碼)。App 和服務會各自從共用的祕密(secret)與目前時間,以固定的間隔(多半是 30 秒)計算出相同的驗證碼。時間一到,舊的驗證碼就失效,換成新的。保持它短命,是為了盡量縮短被偷看到的驗證碼還能用的時間窗。