指南

什麼是雙因素驗證?白話指南

雙因素驗證(2FA)是一種登入方式,要求你提供兩種不同類型的證明,證明你就是你所說的那個人,通常是你知道的東西(例如密碼),加上你擁有的東西(例如手機或安全金鑰)。如果有人偷走或猜到你的密碼,沒有第二個因素,他們仍然無法登入。這是保護重要帳戶最簡單的方法之一。

為什麼用 AI 建置時要注意它

當你請 AI 建置工具做「登入」功能時,通常會得到電子郵件加密碼。這是不錯的起點,但密碼會被重複使用、被網路釣魚騙走或外洩。如果你的應用程式持有任何有價值的東西,例如客戶紀錄、發票、管理權限或付款設定,一個被盜的密碼就可能暴露所有資料。

2FA 也會影響一些你一開始可能沒想到的決定:

  • 誰必須使用它。 對所有人選用、只要求管理員,還是全部都要求?
  • 支援哪些方式。 驗證器應用程式的驗證碼、簡訊、通行密鑰、安全金鑰。
  • 使用者被鎖在外面時怎麼辦。 遺失手機是任何有 2FA 的應用程式中最常見的客服請求。
  • 在哪裡強制執行。 檢查必須在伺服器上進行。如果 2FA 畫面只是在瀏覽器中隱藏頁面,很容易被繞過。

你不必自己實作密碼學——成熟的函式庫和驗證服務會處理這些。但你需要知道該要求什麼。

日常比喻

想像銀行的保管箱。要打開它,你需要你的身分證件(銀行會核對你是誰或你知道的事)以及實體鑰匙(你擁有的東西)。偷走你簽名的小偷仍然拿不到鑰匙;偷到鑰匙的小偷也通過不了身分核對。

2FA 的運作方式相同。密碼就像簽名,手機或安全金鑰就是實體鑰匙。每一個單獨都不足以開啟。

三種因素

美國國家標準與技術研究院(NIST)的數位身分指南等資安標準,將因素分為三種:

因素例子
你知道的東西密碼、PIN 碼
你擁有的東西安裝驗證器應用程式的手機、安全金鑰、保存通行密鑰的裝置
你是誰指紋、臉部——通常用來解鎖裝置,再由裝置完成真正的驗證

關鍵字是不同。密碼加上安全問題,兩者都是你知道的東西,所以它不是真正的雙因素驗證。如果一次外洩就能同時揭露兩者,那就只算一個因素。

常見 2FA 方式比較

方式運作方式強度說明
簡訊驗證碼驗證碼以簡訊傳送到你的手機號碼最弱容易受到 SIM 卡置換和網路釣魚攻擊,但仍遠優於沒有 2FA
電子郵件驗證碼驗證碼寄到你的電子郵件弱安全性取決於電子郵件帳戶本身
驗證器應用程式(TOTP)像 Google Authenticator 這類應用程式,通常每 30 秒產生一組新的六位數驗證碼良好離線也能運作;但如果假網站索取驗證碼,仍可能被釣魚
推播核准應用程式詢問「是你嗎?」,你點選核准良好注意「核准疲勞」,即使用者為了停止重複提示而一律點選同意
通行密鑰或安全金鑰裝置上的加密金鑰證明你位於真正的網站最強能抵禦網路釣魚,因為它不會對仿冒的網域作出回應

NIST 的指引將需要輸入驗證碼的方式(簡訊、電子郵件、驗證器應用程式)視為不具抗網路釣魚能力,並將透過電話網路傳送驗證碼標為「受限」。基於 WebAuthn/FIDO2 標準的通行密鑰與硬體安全金鑰,才是它認定具抗網路釣魚能力的方式。

實用的結論是:驗證器應用程式對大多數應用程式來說是強大且容易的預設選項;如果你的使用者習慣使用通行密鑰,也值得提供。

實例:為客戶入口網站加入 2FA

假設你建置了一個入口網站,讓一間小型會計事務所與客戶分享稅務文件。以下是一套合理的 2FA 設定,一步步來看。

啟用(註冊)。 客戶 Priya 開啟「設定」並點選「啟用雙因素驗證」。應用程式會產生一組密鑰並以 QR 碼顯示。她用驗證器應用程式掃描它,應用程式便開始顯示六位數驗證碼。她把目前的驗證碼輸入回入口網站,以證明設定成功。應用程式接著顯示十組復原碼,並請她把它們妥善保存。

之後的登入。

  1. Priya 輸入電子郵件與密碼。伺服器會檢查它們。
  2. 伺服器並不會直接讓她登入,而是把工作階段標記為「密碼正確,等待第二因素」,並顯示驗證碼畫面。
  3. 她輸入驗證器應用程式上的驗證碼。伺服器會將它與她儲存的密鑰比對,並容許少許的時鐘誤差。
  4. 只有到這一步,伺服器才會建立完整的工作階段,讓她看到文件。

攻擊者會看到什麼。 如果 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 時顯示的一組短的一次性備用碼。沒有它們,通常只能由應用程式的擁有者進行人工身分確認,所以應在上線前就規劃好。

Mythex · Pricing · 用 AI 打造任何東西 · 網站與應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費的 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港)