How and Why Two Factor Authentication

為什麼需要雙重因子驗證(2FA)?

前言

隨著越來越多的軟體推廣與強制雙重因子驗證 2FA,我的手機也裝上了 Google Authenticator,但老實說,很長一段時間我只知道「打開 App → 輸入六位數字」,對於這組數字為什麼會一直變、伺服器又是怎麼驗證的,其實沒有真正了解過。直到最近在測試一些相關登入邏輯才回來補齊這塊知識。

資安當中的驗證因子

  • 你知道的東西 What you know:密碼、PIN code
  • 你擁有的東西 What you have:手機、實體金鑰、App 產生的驗證碼
  • 你是誰 What you are:指紋、臉部、虹膜

雙重因子驗證(2FA)

相較於傳統單一密碼:

  • 資料庫被駭密碼外洩
  • 使用者重複使用密碼、弱密碼、遺忘
  • 重放攻擊(Replay Attack)
  • 社交工程或釣魚網站

為了提高了安全性,雙重因子驗證要求兩種以上不同驗證因子,安全性通常來自於不同類型因子的組合,而不是同一類一直疊加,舉例:

  • 密碼 + SMS 驗證碼
  • 密碼 + Google Authenticator 驗證碼
  • 密碼 + 指紋

一次性密碼(OTP)

OTP 是一種只能使用一次、且通常具有時間或事件限制的密碼。即使攻擊者攔截了 OTP,也很難在有效期限內再次使用。OTP 並不是單一技術,而是一個概念,底下有多種實作方式有各自的優缺點:

OTP 類型說明優點缺點常見使用場景
簡訊 OTP (SMS OTP)伺服器產生隨機驗證碼,透過簡訊傳送到使用者手機實作簡單、使用者熟悉、不需額外 App易受 SIM Swap 攻擊、可能被攔截或延遲、有發送成本傳統網站登入、銀行低風險操作
電子郵件 OTP (Email OTP)將一次性驗證碼寄送至使用者 Email成本低、實作容易、不依賴手機Email 本身可能已被入侵、即時性差註冊驗證、忘記密碼流程
硬體 (Token OTP)使用實體裝置產生定期變化的 OTP不依賴網路、安全性高、難以遠端攻擊成本高、遺失需補發、不方便攜帶企業內部系統、金融機構
應用程式 OTP (TOTP)透過 App(如 Google Authenticator)根據時間產生 OTP不需網路、標準化、安全性高、成本低Secret 外洩即失效、可能遭即時釣魚主流 2FA、雲端服務
事件型 OTP (HOTP)每次使用後遞增計數器產生新 OTP不依賴時間、不受時鐘誤差影響容易不同步、實作較複雜特定硬體 Token

從安全性與實務角度來看 TOTP,是目前安全性、成本與使用體驗之間最平衡的 OTP 方案,也是現代 2FA 的主流選擇,也是 Google Authenticator🔗Microsoft Authenticator🔗Authy🔗 在做的事。

延伸閱讀