指南

什麼係雙重認證?淺白指南

雙重認證(2FA)係一種登入方式,要求你提供兩種唔同類型嘅證明,證明你就係你所講嘅人。典型嘅組合係:你知道嘅嘢,例如密碼;加上你擁有嘅嘢,例如你嘅手機或者安全金鑰。如果有人偷到或者估中咗你嘅密碼,佢冇第二重證明都係入唔到。呢個係保護重要帳戶最簡單嘅方法之一。

用 AI 建構時點解雙重認證重要

當你問 AI 建構工具要「登入」功能,通常會得到電郵同密碼嘅組合。呢個係好嘅起點,但密碼會被重複使用、被釣魚,亦會外洩。如果你嘅 App 持有任何有價值嘅嘢,例如客戶紀錄、發票、管理控制或者付款設定,一個被盜嘅密碼就可能令全部資料外洩。

2FA 亦會影響一啲你起初可能唔會諗到嘅決定:

  • 邊個必須使用。 所有人都選用、管理員必須使用,定係所有人都必須使用?
  • 支援邊啲方法。 認證應用程式嘅驗證碼、短訊、通行密鑰、安全金鑰。
  • 用戶被鎖出之後點算。 遺失手機係任何有 2FA 嘅 App 最常見嘅支援要求。
  • 喺邊度強制執行。 檢查必須喺伺服器上進行。如果 2FA 畫面只係喺瀏覽器入面隱藏頁面,就可以被繞過。

你唔需要自己寫加密技術,成熟嘅函式庫同認證服務商會處理。但你要知道應該要求乜嘢。

日常比喻

諗吓銀行嘅保險箱。要打開佢,你要出示身份證明(銀行核實嘅係你是或者知道嘅嘢),同時要有實體鎖匙(你擁有嘅嘢)。一個偷咗你簽名嘅賊,仍然冇鎖匙;一個扒咗鎖匙嘅賊,又過唔到身份核實。

2FA 嘅運作都係咁。密碼好似簽名,手機或者安全金鑰就好似實體鎖匙。單獨一樣都唔夠。

三類證明

安全標準,例如美國國家標準與技術研究院(NIST)嘅數碼身份指引,將證明分成三類:

證明類別例子
你知道嘅嘢密碼、PIN
你擁有嘅嘢裝有認證應用程式嘅手機、安全金鑰、儲存咗通行密鑰嘅裝置
你係嘅人指紋、人臉,通常用嚟解鎖裝置,再由裝置完成真正嘅核實

關鍵字係「不同」。密碼加安全問題,兩樣都係你知道嘅嘢,所以唔算真正嘅雙重認證。如果同一次外洩就可以兩樣都攞到,咁只算一重。

常見 2FA 方法比較

方法運作方式穩陣程度備註
短訊驗證碼驗證碼以短訊發送到你嘅手機號碼最弱容易受 SIM 卡調包同釣魚影響,但仍然遠勝冇 2FA
電郵驗證碼驗證碼以電郵發送俾你弱安全程度只取決於電郵帳戶
認證應用程式(TOTP)例如 Google Authenticator 之類嘅應用程式,通常每 30 秒生成一組新嘅 6 位數字驗證碼好離線都可以用;但如果假網站要求你輸入驗證碼,仍然可能被釣魚
推送確認應用程式問「係你嗎?」,你點一下批准好留意「批准疲勞」,即用戶因為提示太多而不假思索咁一律按同意
通行密鑰或安全金鑰裝置上嘅加密金鑰證明你身處真正嘅網站最強唔會回應冒牌網域,所以能抵抗釣魚

NIST 嘅指引將需要打驗證碼嘅方法(短訊、電郵、認證應用程式)視為唔能抵抗釣魚,並將經電話網絡發送驗證碼列為「受限制」。而基於 WebAuthn/FIDO2 標準嘅通行密鑰同硬件安全金鑰,則被視為能抵抗釣魚。

實際結論:認證應用程式對大部分 App 嚟講係一個強大而又容易設定嘅預設選擇;如果你嘅用戶願意用,提供通行密鑰亦都值得。

實際例子:客戶入口網站嘅 2FA

假設你建咗一個入口網站,讓一間小型會計師樓同客戶分享稅務文件。以下係一個合理嘅 2FA 設定,逐步解說。

開啟(登記)。 客戶 Priya 打開設定,撳「開啟雙重認證」。App 會生成一個秘密金鑰,並以 QR 碼顯示。她用認證應用程式掃描,應用程式就開始顯示 6 位數字驗證碼。她將當前嘅驗證碼輸入入口網站,證明設定成功。App 會顯示十個恢復碼,並提示她將佢哋妥善保存。

之後登入。

  1. Priya 輸入電郵同密碼。伺服器核對佢哋。
  2. 伺服器唔會即刻讓她登入,而係將工作階段標記為「密碼正確,待第二重證明」,然後顯示驗證碼畫面。
  3. 她輸入認證應用程式嘅驗證碼。伺服器用佢儲存嘅秘密金鑰核對,並容許少少時鐘誤差。
  4. 只有到呢一步,伺服器先會建立完整嘅工作階段,讓她睇到文件。

攻擊者會見到乜。 如果 Priya 嘅密碼係由另一個網站外洩,攻擊者會卡喺第 3 步。每次驗證碼輸入錯誤都會被計算,連續多次錯誤之後,帳戶會被暫時鎖定,Priya 亦會收到電郵。

遺失手機。 Priya 可以用其中一個恢復碼登入,關閉再重新開啟 2FA(用新手機),並獲得新嘅恢復碼。已用過嘅恢復碼永遠唔可以再用。

對員工。 會計師樓嘅員工可以睇到每位客戶嘅所有文件,所以入口網站要求員工帳戶必須使用 2FA;未登記之前,佢哋連儀表板都入唔到。

常用詞語解釋

詞語意思
2FA/MFA雙重/多重認證:用多於一種證明方式登入。
證明因素(Factor)一種證明方式:你知道、擁有或者係嘅嘢。
TOTP基於時間嘅一次性密碼,即認證應用程式使用嘅輪換驗證碼。
共享秘密(Shared secret)透過 QR 碼設定嘅隱藏值,讓 App 同你嘅手機都可以生成相同嘅驗證碼。
恢復(後備)碼用於遺失第二重證明時登入嘅一次性代碼。
通行密鑰(Passkey)儲存喺你裝置上嘅登入憑證,用公開密鑰加密技術代替密碼。
安全金鑰一個細小嘅實體裝置(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 或者通行密鑰;開啟內建功能通常比自訂代碼更加穩陣。逐步教學可以睇 how to add two-factor authentication,而 what authentication is 就會講解背後嘅登入基礎。

Mythex 入面嘅雙重認證

Mythex 唔包括為你 App 用戶而設嘅內建登入系統,所以 2FA 會係你所揀認證方式嘅一部分:可以係你自己嘅電郵加密碼登入(由項目嘅資料庫支援),或者提供 2FA 嘅代管服務。你喺對話入面叫 agent 加入,任何服務商金鑰都會放喺項目機密入面,而唔係放喺對話裏。adding login to your app 嘅 docs 食譜有一個起始提示詞可以調整使用,而 security for apps you build 就講解有關金鑰嘅日常習慣。上線之前,請跟住 AI 建構 App 嘅安全清單 逐項檢查。

常見問題

簡單嚟講,什麼係雙重認證?

雙重認證(2FA)即係登入時要提供兩種唔同嘅證明,通常係你嘅密碼,加上你手機嘅驗證碼或者安全金鑰。淨係偷到你密碼嘅人,仍然入唔到你個帳戶。

2FA 同 MFA 係咪一樣?

差唔多係。多重認證(MFA)指兩種或以上嘅證明方式;雙重認證係最常見、剛好有兩種嘅情況。日常使用時,兩個詞語通常互相通用。

短訊驗證碼式嘅雙重認證安全嗎?

比單靠密碼好得多,但係係最弱嘅常見選項。短訊可能被截取,亦可能透過 SIM 卡調包被轉走;而假嘅登入頁面亦可以騙人輸入驗證碼。認證應用程式更加穩陣,通行密鑰或安全金鑰則更加穩陣。

我嘅 App 需唔需要雙重認證?

如果帳戶持有金錢、私人資料,或者對其他用戶有管理權限,提供 2FA 係好主意,而要求管理員使用亦好常見。如果只係簡單嘅興趣 App,可以設為選用,或者留待之後再加。

如果用戶唔見咗部手機點算?

咁就要靠恢復碼:喺開啟 2FA 時會顯示一個短清單,入面係一次性用嘅後備驗證碼。冇咗呢啲碼,通常要由 App 擁有者人手核實身份先可以恢復,所以要喺上線前計劃好。

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 简体中文 繁體中文(台灣)