什麼是雙因素驗證?白話指南
雙因素驗證(2FA)是一種登入方式,要求你提供兩種不同類型的證明,證明你就是你所說的那個人,通常是你知道的東西(例如密碼),加上你擁有的東西(例如手機或安全金鑰)。如果有人偷走或猜到你的密碼,沒有第二個因素,他們仍然無法登入。這是保護重要帳戶最簡單的方法之一。
為什麼用 AI 建置時要注意它
當你請 AI 建置工具做「登入」功能時,通常會得到電子郵件加密碼。這是不錯的起點,但密碼會被重複使用、被網路釣魚騙走或外洩。如果你的應用程式持有任何有價值的東西,例如客戶紀錄、發票、管理權限或付款設定,一個被盜的密碼就可能暴露所有資料。
2FA 也會影響一些你一開始可能沒想到的決定:
- 誰必須使用它。 對所有人選用、只要求管理員,還是全部都要求?
- 支援哪些方式。 驗證器應用程式的驗證碼、簡訊、通行密鑰、安全金鑰。
- 使用者被鎖在外面時怎麼辦。 遺失手機是任何有 2FA 的應用程式中最常見的客服請求。
- 在哪裡強制執行。 檢查必須在伺服器上進行。如果 2FA 畫面只是在瀏覽器中隱藏頁面,很容易被繞過。
你不必自己實作密碼學——成熟的函式庫和驗證服務會處理這些。但你需要知道該要求什麼。
日常比喻
想像銀行的保管箱。要打開它,你需要你的身分證件(銀行會核對你是誰或你知道的事)以及實體鑰匙(你擁有的東西)。偷走你簽名的小偷仍然拿不到鑰匙;偷到鑰匙的小偷也通過不了身分核對。
2FA 的運作方式相同。密碼就像簽名,手機或安全金鑰就是實體鑰匙。每一個單獨都不足以開啟。
三種因素
美國國家標準與技術研究院(NIST)的數位身分指南等資安標準,將因素分為三種:
| 因素 | 例子 |
|---|---|
| 你知道的東西 | 密碼、PIN 碼 |
| 你擁有的東西 | 安裝驗證器應用程式的手機、安全金鑰、保存通行密鑰的裝置 |
| 你是誰 | 指紋、臉部——通常用來解鎖裝置,再由裝置完成真正的驗證 |
關鍵字是不同。密碼加上安全問題,兩者都是你知道的東西,所以它不是真正的雙因素驗證。如果一次外洩就能同時揭露兩者,那就只算一個因素。
常見 2FA 方式比較
| 方式 | 運作方式 | 強度 | 說明 |
|---|---|---|---|
| 簡訊驗證碼 | 驗證碼以簡訊傳送到你的手機號碼 | 最弱 | 容易受到 SIM 卡置換和網路釣魚攻擊,但仍遠優於沒有 2FA |
| 電子郵件驗證碼 | 驗證碼寄到你的電子郵件 | 弱 | 安全性取決於電子郵件帳戶本身 |
| 驗證器應用程式(TOTP) | 像 Google Authenticator 這類應用程式,通常每 30 秒產生一組新的六位數驗證碼 | 良好 | 離線也能運作;但如果假網站索取驗證碼,仍可能被釣魚 |
| 推播核准 | 應用程式詢問「是你嗎?」,你點選核准 | 良好 | 注意「核准疲勞」,即使用者為了停止重複提示而一律點選同意 |
| 通行密鑰或安全金鑰 | 裝置上的加密金鑰證明你位於真正的網站 | 最強 | 能抵禦網路釣魚,因為它不會對仿冒的網域作出回應 |
NIST 的指引將需要輸入驗證碼的方式(簡訊、電子郵件、驗證器應用程式)視為不具抗網路釣魚能力,並將透過電話網路傳送驗證碼標為「受限」。基於 WebAuthn/FIDO2 標準的通行密鑰與硬體安全金鑰,才是它認定具抗網路釣魚能力的方式。
實用的結論是:驗證器應用程式對大多數應用程式來說是強大且容易的預設選項;如果你的使用者習慣使用通行密鑰,也值得提供。
實例:為客戶入口網站加入 2FA
假設你建置了一個入口網站,讓一間小型會計事務所與客戶分享稅務文件。以下是一套合理的 2FA 設定,一步步來看。
啟用(註冊)。 客戶 Priya 開啟「設定」並點選「啟用雙因素驗證」。應用程式會產生一組密鑰並以 QR 碼顯示。她用驗證器應用程式掃描它,應用程式便開始顯示六位數驗證碼。她把目前的驗證碼輸入回入口網站,以證明設定成功。應用程式接著顯示十組復原碼,並請她把它們妥善保存。
之後的登入。
- Priya 輸入電子郵件與密碼。伺服器會檢查它們。
- 伺服器並不會直接讓她登入,而是把工作階段標記為「密碼正確,等待第二因素」,並顯示驗證碼畫面。
- 她輸入驗證器應用程式上的驗證碼。伺服器會將它與她儲存的密鑰比對,並容許少許的時鐘誤差。
- 只有到這一步,伺服器才會建立完整的工作階段,讓她看到文件。
攻擊者會看到什麼。 如果 Priya 的密碼是從其他網站外洩的,攻擊者會卡在第 3 步。每次錯誤的驗證碼嘗試都會被計數,多次錯誤後帳戶會暫時鎖定,Priya 也會收到一封電子郵件。
遺失手機。 Priya 使用一組復原碼登入,關閉再重新啟用 2FA(使用她的新手機),並取得新的復原碼。已使用過的復原碼永遠無法再次使用。
對於員工。 事務所的會計師可以看到每位客戶的檔案,所以入口網站要求員工帳戶使用 2FA;未完成登錄前,他們無法進入儀表板。
常見術語說明
| 術語 | 意義 |
|---|---|
| 2FA / MFA | 雙因素/多因素驗證:以一種以上的證明登入。 |
| 因素(Factor) | 一種證明:你知道、擁有或是的東西。 |
| TOTP | 基於時間的一次性密碼——驗證器應用程式中不斷更新的驗證碼。 |
| 共用密鑰(Shared secret) | 透過 QR 碼設定的隱藏值,應用程式與你的手機都用它產生相符的驗證碼。 |
| 復原(備用)碼(Recovery / backup codes) | 在遺失第二因素時用來登入的一次性代碼。 |
| 通行密鑰(Passkey) | 儲存在你裝置上的登入憑證,使用公開金鑰加密,取代密碼。 |
| 安全金鑰(Security key) | 小型實體裝置(USB 或 NFC),功能與通行密鑰相同。 |
| SIM 卡置換(SIM swapping) | 欺騙電信業者把某人的號碼轉到新的 SIM 卡上,使簡訊落入攻擊者手中。 |
| 網路釣魚(Phishing) | 假網站或假訊息,誘使人交出密碼或驗證碼。 |
| 加強驗證(Step-up authentication) | 在執行敏感操作前(例如更改撥款帳戶)再次要求第二因素。 |
常見錯誤與迷思
- 「2FA 讓帳戶無法被駭。」 它讓帳戶難以被入侵得多,但網路釣魚網站仍能即時擷取你輸入的驗證碼,這也是通行密鑰存在的原因。
- 只在瀏覽器中檢查驗證碼。 如果伺服器在密碼通過後就發出完整的工作階段,驗證碼畫面就只是裝飾。伺服器必須在第二因素通過前拒絕存取。
- 對驗證碼猜測沒有限制。 六位數驗證碼有一百萬種可能。若沒有速率限制與帳戶鎖定,攻擊者只要不斷猜測即可。
- 忘記復原方式。 沒有復原碼,每次遺失手機都會變成客服單,或是讓客戶被鎖在外面。
- 隨意保存 TOTP 密鑰。 共用密鑰應在資料庫中加密,並且在設定完成後不再顯示。
- 讓使用者可以不經確認就關閉 2FA。 停用 2FA 或更改帳戶電子郵件時,應要求輸入密碼與目前的驗證碼。
- 密碼加安全問題算是 2FA。 不算,兩者都是你知道的東西。
向 AI 建置工具提出的要求
- 「加入選用的雙因素驗證,使用驗證器應用程式(TOTP),提供 QR 碼設定,並在啟用前要求確認驗證碼。」
- 「啟用 2FA 時顯示十組一次性復原碼。請以雜湊方式儲存,就像密碼一樣。」
- 「在伺服器端強制執行 2FA:在第二因素通過之前,不發出完整的工作階段。」
- 「限制驗證碼嘗試次數,並在多次失敗後將登入鎖定 15 分鐘。發生時寄電子郵件通知使用者。」
- 「管理員帳戶必須使用 2FA。」
- 「停用 2FA 或更改帳戶電子郵件前,要求輸入密碼與目前的驗證碼。」
- 「使用成熟的函式庫或我們驗證服務內建的 2FA,不要自己撰寫加密程式。」
- 「說明你使用的方式,以及密鑰儲存在哪裡。」
如果你使用託管的驗證服務,請確認它是否已提供 2FA 或通行密鑰;啟用內建功能通常比自訂程式碼更安全。逐步說明請參閱如何加入雙因素驗證,底層的登入基礎則在什麼是身分驗證中說明。
Mythex 中的雙因素驗證
Mythex 不包含供應用程式使用者使用的內建登入系統,因此 2FA 是你所選擇的驗證方式的一部分——可以是由專案資料庫支援的你自己的電子郵件與密碼登入,或是提供 2FA 的託管驗證服務。你可以在聊天中請代理程式加入它,而任何服務金鑰都應放在專案的機密設定中,而不是寫在聊天內容裡。為應用程式加入登入的文件中有可供修改的起始提示,而為你建置的應用程式設定安全性則說明了金鑰相關的良好習慣。上線前,請依照AI 建置應用程式的安全檢查清單逐項確認。
常見問題
用簡單的話來說,什麼是雙因素驗證?
雙因素驗證(2FA)表示登入時需要兩種不同類型的證明,通常是你的密碼加上手機上的驗證碼或安全金鑰。只偷走你密碼的人仍然無法登入。
2FA 和 MFA 一樣嗎?
幾乎一樣。多因素驗證(MFA)指兩種或以上的因素;雙因素驗證則是最常見、恰好有兩種因素的情況。在日常使用中,這兩個詞通常被交替使用。
簡訊驗證碼的雙因素驗證安全嗎?
它比只用密碼好得多,但卻是常見選項中最弱的一種。簡訊可能被攔截,或透過 SIM 卡置換被轉移;假的登入頁面也可能誘使人輸入驗證碼。驗證器應用程式較為安全,而通行密鑰或安全金鑰則更安全。
我的應用程式需要雙因素驗證嗎?
如果帳戶持有金錢、私人資料,或對其他使用者擁有管理權限,提供 2FA 是好主意,要求管理員使用也很常見。對於簡單的興趣型應用程式,它可以是選用的,或留待之後再說。
如果使用者遺失手機怎麼辦?
這正是復原碼的用途:在啟用 2FA 時顯示的一組短的一次性備用碼。沒有它們,通常只能由應用程式的擁有者進行人工身分確認,所以應在上線前就規劃好。