資安觀念

雙重驗證 2FA:把第二道防線設計成可復原

比較驗證器、通行金鑰、簡訊與備援碼,整理兼顧防護強度與帳號復原能力的 2FA 設定方式。

雙重驗證 2FA:把第二道防線設計成可復原

2FA 的目標是讓密碼外洩後仍需要另一個獨立因素。設定品質取決於因素是否抗釣魚、能否被遠端攔截,以及裝置遺失時是否有受控復原;只打開簡訊驗證並把備援碼留在同一支手機,防護仍然脆弱。

01

依抗釣魚能力選擇第二因素

  • 通行金鑰/FIDO2 安全金鑰:綁定網站 origin,最能抵抗釣魚。
  • 驗證器 TOTP:離線可用,但使用者仍可能把六位碼輸入釣魚站。
  • 推播確認:方便,但需防止連續轟炸與錯誤批准。
  • 簡訊:受 SIM swap、攔截與轉接影響,適合作為低風險過渡或有限復原。
  • 電子郵件碼:若信箱本身也是復原核心,獨立性有限。
02

重要帳號至少註冊兩個獨立因素

建議主要使用通行金鑰或硬體金鑰,另保留第二把實體金鑰或可信裝置。兩個因素不要都綁在同一支手機、同一個雲端帳號或同一個包包裡。

新增因素時必須重新驗證目前密碼與既有因素,並寄送安全通知;不能只靠已登入 Cookie 靜默新增。

03

TOTP 要正確處理秘密與時間

TOTP seed 在註冊時只應顯示一次,伺服器需加密保存,日誌不得記錄 QR Code 或 otpauth URI。驗證時允許有限時間漂移,成功後避免同一時間片重複使用。

# 概念設定,不是真實秘密
issuer: Kaelith
algorithm: SHA1
period_seconds: 30
digits: 6
accepted_window: [-1, 0, 1]
replay_protection: true

伺服器與使用者裝置時間偏差過大會造成驗證失敗,因此基礎設施需同步可靠時間源。

04

推播驗證要顯示上下文並限制轟炸

確認畫面應顯示服務名稱、裝置、概略位置、時間與請求操作,並使用 number matching 或交易內容綁定。連續拒絕後暫停推播,改要求重新登入或聯絡支援。

使用者若收到未發起的驗證,不只按拒絕,還要檢查密碼是否外洩並撤銷工作階段。

05

復原流程不能比正常登入更弱

客服只憑姓名、生日或近期交易就停用 2FA,會讓攻擊者繞過第二因素。高風險復原應結合備援碼、已註冊裝置、延遲生效、人工覆核與通知。

管理員替使用者重設 2FA 時要有稽核記錄,並讓舊因素、備援碼與工作階段全部失效。

06

部署後測試完整生命週期

  1. 註冊第一與第二因素。
  2. 測試釣魚網域是否無法使用通行金鑰。
  3. 測試遺失單一裝置仍可安全復原。
  4. 測試移除因素需要重新驗證。
  5. 測試改密碼與帳號事件後因素是否保留或撤銷符合政策。
  6. 測試備援碼一次性、輪替與通知。

驗證成功條件

主要因素具抗釣魚能力、第二因素位於不同裝置或介質、復原流程經過測試,且任何重設都會通知帳號持有人。