HOTP 與 TOTP:一次性密碼的原理與差異
隨著網路服務的普及與駭客攻擊的增長,使用者帳號的安全性變得至關重要。除了傳統的帳號密碼登入方式,一次性密碼(OTP, One-Time Password) 也是目前廣泛應用的身份驗證技術,能有效防範密碼竊取與重放攻擊。
HOTP 與 TOTP:一次性密碼的原理與差異
Photo by Agê Barros on Unsplash
隨著網路服務的普及與駭客攻擊的增長,使用者帳號的安全性變得至關重要。除了傳統的帳號密碼登入方式,一次性密碼(OTP, One-Time Password) 也是目前廣泛應用的身份驗證技術,能有效防範密碼竊取與重放攻擊。
一次性密碼主要分為兩種常見標準:
- HOTP(HMAC-Based One-Time Password) — — 基於計數器的一次性密碼
- TOTP(Time-Based One-Time Password) — — 基於時間的一次性密碼
這兩者在許多應用(如 Google Authenticator、Microsoft Authenticator、銀行 OTP 登入等)中被廣泛使用,但它們的運作原理與安全性略有不同。本文將介紹 HOTP 與 TOTP 的運作方式,並分析它們的優缺點與應用場景。
1. HOTP(HMAC-Based One-Time Password) — — 基於計數器的一次性密碼
(1) HOTP 的運作原理
HOTP 是基於 HMAC-SHA1 演算法的動態密碼產生機制,密碼的變化是根據「計數器值(Counter)」來決定,而非時間。HOTP 產生密碼的公式如下:
HOTP(K,C)=Truncate(HMAC−SHA1(K,C))HOTP(K, C) = Truncate(HMAC-SHA1(K, C))
其中:
- K:共享的密鑰(Secret Key),用於計算 OTP。
- C:計數器值,每次驗證後 +1。
- HMAC-SHA1:使用 HMAC(Hashed Message Authentication Code)來產生加密雜湊值。
- Truncate:將 HMAC 雜湊值轉換為 6–8 位數字 OTP。
當使用者登入時,伺服器會檢查輸入的 OTP 是否與當前的 HOTP(K, C) 相符,若相符則驗證通過,並將計數器值 C+1。
(2) HOTP 的特性與優缺點
優點:
- 不受時間同步影響:HOTP 只依賴計數器,而不需要考慮時間的同步問題。
- 可離線使用:由於 HOTP 只需要計數器,不需要網路連線即可運作。
缺點:
- 可能產生同步問題:若用戶產生 OTP 但未使用,計數器會與伺服器不同步,導致驗證失敗。
- 安全性稍低於 TOTP:如果 OTP 被竊取,駭客可重放攻擊,直到計數器更新為止。
(3) HOTP 的應用場景
HOTP 主要適用於硬體安全設備(如銀行硬體 OTP 產生器),或離線環境(如無網路的企業 VPN 登入)。
2. TOTP(Time-Based One-Time Password) — — 基於時間的一次性密碼
(1) TOTP 的運作原理
TOTP 與 HOTP 相似,但它的 OTP 產生方式是基於「時間戳記(Timestamp)」而非計數器。TOTP 產生密碼的公式如下:
TOTP(K,T)=Truncate(HMAC−SHA1(K,T))TOTP(K, T) = Truncate(HMAC-SHA1(K, T))
其中:
- K:共享的密鑰(Secret Key)。
- T:時間戳記(通常為當前時間的 Unix Timestamp 除以一個時間間隔,如 30 秒)。
- HMAC-SHA1:與 HOTP 相同,使用 HMAC 演算法。
- Truncate:將 HMAC 雜湊值轉換為 6–8 位數 OTP。
每 30 秒 或 60 秒,TOTP 會重新計算一次密碼,使用者必須在該時間內輸入正確的 OTP 才能通過驗證。
(2) TOTP 的特性與優缺點
優點:
- 提高安全性:OTP 在短時間內有效,即使被竊取也無法重複使用。
- 無需計數器同步:不需要伺服器與客戶端的計數器保持一致,減少同步問題。
缺點:
- 需要時間同步:如果使用者設備與伺服器時間不同步,可能導致 OTP 無法通過驗證。
- 無法離線驗證:需要確保設備的時間正確,部分應用可能需要網路校時。
(3) TOTP 的應用場景
TOTP 廣泛應用於 二步驟驗證(2FA, Two-Factor Authentication),如:
- Google Authenticator(Google 服務登入)
- Microsoft Authenticator(微軟帳戶保護)
- GitHub、Facebook、Twitter(社群媒體帳號保護)
- 金融與交易所安全驗證(如 Binance、Coinbase 交易所的登入驗證)
3. HOTP 與 TOTP 的主要差異比較
HOTP 依據計數器變更 OTP,而 TOTP 則依據時間變更 OTP。HOTP 產生的 OTP 沒有時間限制,直到下一個 OTP 產生前都可使用,而 TOTP 則在短時間內有效,通常為 30 秒或 60 秒。相較之下,TOTP 的安全性更高,因為 OTP 過期後即無法重用,降低被駭客利用的風險。
HOTP 需要伺服器與客戶端同步計數器,否則可能發生 OTP 無法驗證的情況,而 TOTP 則需要確保時間同步,否則 OTP 也可能失效。HOTP 適用於離線環境,例如銀行的硬體 OTP 產生器,而 TOTP 則適用於需要較高安全性的線上應用,例如 Google Authenticator 或企業登入系統的二步驟驗證。
4. 結論:應該選擇 HOTP 還是 TOTP?
在選擇 OTP 方法時,可以根據應用場景來決定:
- 若需要離線環境驗證(如銀行硬體 OTP 產生器),HOTP 可能更合適,因為它不受時間同步影響。
- 若需要較高安全性與短時效的 OTP(如線上服務登入),TOTP 是更好的選擇,因為 OTP 會定期變更,降低密碼被重放的風險。
目前大多數 二步驟驗證(2FA) 應用,如 Google Authenticator、Microsoft Authenticator、銀行 App 等,都是基於 TOTP 標準,因為它在安全性與使用便利性之間達到了良好的平衡。
總結來說,HOTP 適用於計數型驗證,TOTP 適用於時間型驗證,企業與開發者可以根據需求選擇適合的 OTP 驗證方式,以確保帳戶與系統的安全性。
메타데이터
- post_id
- b907fbbcd7e8
- slug
- hotp-與-totp-一次性密碼的原理與差異-b907fbbcd7e8
- url
- https://medium.com/@service_85012/hotp-%E8%88%87-totp-%E4%B8%80%E6%AC%A1%E6%80%A7%E5%AF%86%E7%A2%BC%E7%9A%84%E5%8E%9F%E7%90%86%E8%88%87%E5%B7%AE%E7%95%B0-b907fbbcd7e8
- canonical_url
- https://medium.com/@service_85012/hotp-%E8%88%87-totp-%E4%B8%80%E6%AC%A1%E6%80%A7%E5%AF%86%E7%A2%BC%E7%9A%84%E5%8E%9F%E7%90%86%E8%88%87%E5%B7%AE%E7%95%B0-b907fbbcd7e8
- author_url
- https://medium.com/@service_85012
- status
- ok
- fetched_at
- 2026-07-21 03:11:18