名詞解釋

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

一次性密碼(OTP)是只用一次、短時間內有效的驗證碼。從防禦視角說明 TOTP、HOTP 與簡訊驗證碼的差異,為何能防範密碼外洩,以及中間人釣魚仍可能攻破的限制。

發布於 2026-07-02 更新於 2026-10-06 閱讀時間 3 分鐘
本頁內容

一次性密碼(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
  • 根本原因=人能把驗證碼交給假網站(=它並未繫結在網域上)

送達方式如何改變風險

「一次性密碼」涵蓋好幾種方式,弱點取決於驗證碼在哪裡產生、以及如何送到你手上。

方式驗證碼在哪裡產生如何送到你手上主要弱點
驗證器 App(TOTP)你的手機上不經傳送(在裝置上計算)在假網站輸入、手機遺失後的復原
硬體權杖小型專用裝置不經傳送(顯示在其螢幕上)在假網站輸入、裝置遺失
簡訊服務的伺服器行動電話網路在假網站輸入、SIM 交換、簡訊攔截
電子郵件服務的伺服器電子郵件在假網站輸入、電子郵件帳號被盜

所有方式共同的弱點,是被輸入到假網站。美國國家標準與技術研究院(NIST)的認證指引 SP 800-63B(第 4 版,2025 年 8 月)指出,手動輸入的一次性密碼無法做到抗釣魚,並把簡訊等使用電話網路的方式列為「受限制」。美國網路安全暨基礎設施安全局(CISA)也在 2024 年 12 月建議不要把簡訊當作第二因素。

雙因素驗證、兩步驟驗證與通行金鑰這些用語的關係,整理在什麼是雙因素驗證的比較表中。

TOTP 的原理:QR 碼裡裝著祕密

設定驗證器 App 時掃描的 QR 碼,含有服務與 App 共用的祕密值。App 用這個值與目前時間計算驗證碼,服務也做同樣的計算,確認是否一致。

  • 標準(RFC 6238)建議的時間間隔是 30 秒
  • 為了容許網路延遲,服務常會一併接受前一個間隔的驗證碼(標準建議最多一個間隔)
  • 以計數為基礎的 HOTP(RFC 4226)則是每次(例如按一下按鈕)往前推進

由此可知,持有 QR 碼或祕密字串的人,就能產生相同的驗證碼。把設定畫面的截圖存在雲端或聊天中,等同於把密碼寫在紙上。

實際案例:網路銀行的未經授權轉帳

2023 年,日本的網路銀行未經授權轉帳急遽增加。根據日本金融廳的資料,2023 年 1 月至 11 月的損失達 5,147 件、約 80.1 億日圓(截至 12 月 8 日),件數與金額都創下歷史新高。金融廳描述的手法是:以假冒銀行的電子郵件或簡訊把使用者引導到假網站,竊取網路銀行的 ID、密碼、一次性密碼等資訊,再把錢轉走。

從這個案例可以得到兩點教訓:

  • 一旦把驗證碼輸入到假網站,一次性密碼就擋不住:不論驗證碼的有效期間多短,只要在你輸入的當下就被使用,時間就來得及
  • 要擋下它,關鍵在輸入之前:銀行表示不會透過電子郵件或簡訊要求提供 ID 或密碼。不在從電子郵件或簡訊連結開啟的頁面上輸入驗證碼,是使用者能採取的最可靠的一步

此後,日本的證券公司與銀行正朝著把通行金鑰等「在假網站上無法完成」的認證強制化的方向推進(什麼是通行金鑰)。

如何檢查自己的帳號與服務

1

把使用簡訊的帳號改用驗證器 App

打開電子郵件、密碼管理器、GitHub、雲端服務等重要帳號的雙因素驗證設定。如果使用的是簡訊,就新增驗證器 App(TOTP)並設為優先方式。如果可以使用通行金鑰,也一併新增。GitHub 請參考設定 GitHub 雙因素驗證。

2

為換手機或遺失手機做好準備

確認驗證器 App 可以轉移到另一台裝置(其備份或轉移功能)。把各服務的復原碼存放在手機以外的地方,例如密碼管理器中。

3

確認 QR 碼與祕密沒有到處散落

在照片、雲端儲存空間或聊天中,找出設定用 QR 碼或祕密字串的截圖,找到就刪除。

4

如果你是服務的開發者,檢視驗證規則

驗證驗證碼時限制失敗次數(否則 6 位數的驗證碼在現實中可以被暴力破解)。即使在有效期間內,同一個驗證碼也只接受一次。容許的時鐘偏移保持在一個間隔左右。為管理員帳號提供比一次性密碼更強的通行金鑰。

本站的觀點:OTP 是過渡階段,目標是通行金鑰

OTP 是脫離「只有密碼」的一個絕佳第一步。事實上,不論是簡訊還是 TOTP,光是開起來就能擋下大半的帳號被盜。但本站把 OTP 定位為過渡階段,而非最終目標。只要中間人釣魚仍是真實的威脅,目標就是簽章繫結在網域上、從結構上無法對假網站出示的通行金鑰(FIDO2)。

優先順序很清楚:先在所有帳戶開啟 OTP,再把最重要的帳戶(電子郵件、網域、支付)遷移到通行金鑰。重點是不要依賴「靠小心來識破假網站」。

出處(一手資料)

  • IETF RFC 6238「TOTP: Time-Based One-Time Password Algorithm」— rfc-editor.org(30 秒的時間間隔,為網路延遲最多容許一個間隔)
  • IETF RFC 4226「HOTP: An HMAC-Based One-Time Password Algorithm」— rfc-editor.org(以計數為基礎的一次性密碼、限制失敗次數)
  • NIST SP 800-63B-4(2025 年 8 月)— pages.nist.gov(手動輸入的 OTP 無法抗釣魚、電話網路方式受限制、同一 OTP 只接受一次、速率限制)
  • CISA「Mobile Communications Best Practice Guidance」(2024 年 12 月)— cisa.gov(PDF)(不要把簡訊當作第二因素)
  • 日本金融廳:關於釣魚相關網路銀行未經授權轉帳急增的警示(日文)— fsa.go.jp(2023 年 1~11 月的件數與損失、一次性密碼等資訊遭竊)

接下來閱讀

FAQ

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

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

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

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

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

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

Q如果在假網站輸入了一次性密碼,該怎麼辦?
A

請假設那個驗證碼已經被使用了。透過書籤或官方 App 登入(不要用電子郵件或簡訊裡的連結),並變更密碼。接著檢查已登入的裝置與工作階段清單,確認登錄的電子郵件、電話號碼與轉帳對象沒有被變更。如果是銀行或證券公司,請立即聯絡該公司。

Q為什麼驗證器 App 的驗證碼一直被拒絕?
A

常見的原因是手機的時間不準。TOTP 是用目前時間計算驗證碼,所以裝置的時鐘一旦偏移,就會產生和服務不同的驗證碼。請把手機的日期與時間設為自動,再試下一個顯示的驗證碼。

Q一次性密碼和通行金鑰,哪一個比較安全?
A

通行金鑰。一次性密碼是由人讀取並輸入驗證碼,所以在假網站輸入時,它可以原封不動地被中繼。NIST 也指出,手動輸入的一次性密碼無法做到抗釣魚。通行金鑰的簽章繫結在網站的網域上,因此在假網站上登入無法完成。