FIDO2 論文閱讀分析:很多 passkey 真正厲害的,不是完全打不破,而是把攻擊者逼回更貴的世界

論文基本資訊

  • 論文標題:An Analysis of Attack Vectors Against FIDO2 Authentication
  • 作者:Alexander Berladskyy、Andreas Aßmuth
  • 年份:2026
  • 來源:arXiv:2604.20826
  • 論文連結:https://arxiv.org/abs/2604.20826
  • 主題:Identity Security、Passkeys、FIDO2、Phishing Resistance、Authenticator Security、WebAuthn

這篇 paper 我覺得很適合拿來幫現在那種「passkey 一上就天下太平」的樂觀氣氛降點溫。它不是在唱衰 FIDO2,也不是在說 passkey 沒用;相反地,它做的其實更有價值:把攻擊者真的還能怎麼打,一條一條拆開來看,最後回答的不是『它是不是絕對安全』,而是『它到底把攻擊成本抬高到了哪裡』。

如果要先濃縮成一句話,我會這樣講:

很多人以為 passkey 的重點只是「不用記密碼」,但這篇真正量到的是:它把攻擊從大規模、低成本、遠端可複製的 phishing,硬生生推回高度客製、常常要先拿下裝置或靠近受害者的重攻擊模式。

這個 framing 很重要。因為資安裡很多好防禦,不是讓攻擊完全消失,而是讓攻擊者沒辦法再用原本那種便宜、可規模化、可外包的方式打你。FIDO2 在這件事上,確實做到了不少。

這篇論文在解什麼問題?

作者要回答的核心問題其實很直接:FIDO2 / passkey 一直主打 phishing-resistant,那這句話到底有多真?

背景也很現實。論文一開頭就引用 APWG 數字:2025 年第三季光 phishing attacks 就超過 89 萬件。 傳統密碼本來就容易被釣魚、被重放、被資料外洩後離線破解,所以 passkey 會紅完全不意外。它用的是公私鑰機制:私鑰待在 authenticator,本來就不該離開裝置;server 端只存 public key,登入時只驗簽章,不再依賴可重放的 shared secret。

但實務上真正該問的是:既然不能像釣密碼那樣直接把 passkey「偷走」,攻擊者會不會改打別的地方? 例如:

  • 去劫持 authenticator 跟 client 之間的流程
  • 去污染本機 authenticator 或憑證信任鏈
  • 不偷 key,而是騙受害者替攻擊者簽 challenge
  • 乾脆把 passkey 降級回 password flow 再下手

這篇 paper 的價值就在這:它不把 FIDO2 當魔法,而是把攻擊面拉回 endpoint、browser、network 與 authenticator implementation 這些真實世界。

先講結論:FIDO2 沒有讓攻擊消失,但把攻擊門檻拉高很多

作者最後給出的結論,我認為很健康:passkey 的 phishing-resistant 宣稱大致成立,但不是「完全不能打」,而是「要打得比以前麻煩非常多」。

這裡的差別非常關鍵。傳統密碼世界裡,很多攻擊是:

  • 遠端就能做
  • 低成本就能複製到大量受害者
  • 只要拿到 secret 就能重放

到了 FIDO2,作者整理出的攻擊路徑幾乎都帶著幾個共同條件:

  • 先 compromise 受害者裝置
  • 或必須靠近受害者,例如 Bluetooth 範圍內
  • 或必須控制本機信任環境,例如憑證匯入、DNS / ARP spoofing
  • 或只能打降級與週邊流程,而不是直接複製 passkey 本身

這就是整篇最值得記住的事:FIDO2 把攻擊焦點從「偷憑證」轉成「控制環境」;真正被抬高的,不只是技術難度,還有攻擊的可規模化程度。

FIDO2 在防什麼?不是防一切,而是防 shared secret 被遠端釣走

要看懂這篇,先得抓住 FIDO2 真正防的是什麼。

FIDO2 主要由兩塊組成:

  • CTAP:client 跟 authenticator 溝通
  • WebAuthn:browser / client 跟 relying party 溝通

登入時,RP 給 challenge,authenticator 用私鑰簽它,server 用 public key 驗證。這帶來兩個非常實際的效果:

  • RP 端沒有 password hash 可以被撞庫後離線破解
  • 使用者也沒有一串可以被 phishing 頁面直接套問、抄走、之後重放的 shared secret

所以傳統 phishing 最致命的那件事——把一個可重放的秘密從使用者嘴裡或輸入框裡釣出來——在 passkey 世界裡被切斷了。這是它最大的勝利。

但作者同時提醒:攻擊者會轉而打 ceremony、runtime 與周邊信任鏈。 也就是說,真正的問題從「secret theft」變成「讓受害者在錯的上下文裡完成正確簽署」。

作者怎麼分析攻擊面?很務實:直接整理八條路

這篇的做法不花俏,但很實用。作者先整理既有研究,再把現實可行攻擊路徑分成幾類來看,大意包括:

  • 取得受害者既有 private key
  • 冒充受害者完成登入
  • Bluetooth AITM
  • Authenticator Deception
  • 替受害者帳號註冊攻擊者自己的 passkey
  • Passkey Reduction,也就是把流程降回 password / legacy login
  • Infected Authenticator
  • RP Impersonation,藉由假登入後畫面繼續騙個資

作者還把它們粗略分成 easy / medium / hard,並比較 stealthiness、victim interaction、time consumption 與 privilege requirements。雖然這不是那種超形式化 benchmark,但對 defender 很有用,因為它把風險重點帶回現實:攻擊不只看能不能打,還要看打這件事本身要付出多少前置成本。

這篇最值得帶走的 framing:很多攻擊不是在破解 FIDO2,而是在繞過它

我很喜歡作者明確講了一件事:這些 attack vectors 不是在證明 FIDO2 密碼學失效,而是在證明實際部署永遠包含 protocol 外圍的環境。

這區分超重要。因為很多時候大家一看到「passkey 也能被打」,就會誤讀成「那跟 password 有什麼差」。其實不是。這篇整理出來的大多數攻擊,瞄準的都不是私鑰本身,而是:

  • 本機 malware
  • 被污染的 authenticator
  • 被控制的 browser trust store
  • ARP / DNS spoofing
  • phishing + relay + deception

也就是說,攻擊面從 credential theft 轉成 environment hijack。 這差非常多,因為 environment hijack 通常更難自動化、更難規模化,也更容易被 host security、EDR、MDM、network segmentation 這些第二層防線發現。

攻擊一:Infected Authenticator 其實是在提醒你,別把 authenticator implementation 當神諭

作者實作的第一個攻擊是 Infected Authenticator,這也是我覺得整篇最有工程味的一段。

做法很直接:他們修改本機 authenticator KeePassXC 的 source code,讓它在註冊 passkey 時不是真隨機產生新 key pair,而是使用攻擊者事先已知的私鑰。如此一來,受害者以為自己在正常註冊 passkey,實際上註冊上去的 public key 對應的 private key,攻擊者手上也有。

這招最值得注意的地方不是「竟然做得到」,而是它揭露了 passkey 部署裡一個常被跳過的信任前提:

FIDO2 的安全,很大一部分建立在 authenticator genuinely 代表使用者,而且 key generation genuinely 可信。

如果 authenticator 本身被木馬化,或使用的 crypto library、binary、seed source 被動手腳,那麼「私鑰不離開 authenticator」這件事本身仍然成立,但那個 authenticator 已經不是站在使用者那邊了

作者還指出,這種做法特別針對本機型 authenticator,對同步型、雲端管理型 authenticator 不一定同樣成立。這點也很重要:不是所有 passkey 儲存模型風險都一樣。

攻擊二:Authenticator Deception 才是最像新時代 phishing 的那條路

第二個實作攻擊 Authenticator Deception 更值得一般防禦者注意,因為它很像把老式 phishing 全套升級成 passkey 時代版本。

這條鏈大致是:

  1. 先拿到受害者機器某種程度的控制權
  2. 把攻擊者自建 CA 匯進受害者瀏覽器 trust store
  3. 用 ARP spoofing + DNS spoofing 把目標網站流量導到攻擊者 frontend
  4. 偽裝成真的 RP 網站,讓受害者啟動 passkey 登入
  5. 攻擊者同時向真正 RP 發起合法登入,拿到真 challenge
  6. 把 challenge 轉給受害者簽,再把簽章回送真正 RP 完成登入

這裡最值得記住的不是實作細節,而是攻擊本質:攻擊者偷的不是 passkey,而是偷「受害者替真站簽 challenge 的那一刻」。

換句話說,它不再是 classic credential phishing,而更像:

  • 受害者在假的 UX 裡
  • 替真的 domain 流程簽了真的 challenge
  • 最後由攻擊者接手完成 session establishment

作者成功把這攻擊做出來,本身很有說服力;但同時他們也誠實承認:這不是廉價攻擊。 它依賴受害者裝置已被污染、DNS cache 要能處理、網路位置與 spoofing 條件要成立,而且實作上相當手工。這恰恰支持論文主結論:FIDO2 沒讓攻擊不可能,但讓它貴得多。

Passkey Reduction:最常見也最現實的,不一定是打穿 passkey,而是把你拉回舊世界

我自己覺得整篇裡最被低估的一條,是 Passkey Reduction

意思很簡單:很多網站雖然支援 passkey,但 password flow 沒消失。於是攻擊者未必要想辦法破解 passkey;他只要讓受害者相信:

  • passkey 現在壞掉了
  • passkey 目前不可用
  • 請先改走 password / fallback MFA

這件事很像資安裡很老但一直有用的套路:最難攻破的新機制,不一定要正面打,只要想辦法把使用者逼回舊機制。

對網站方來說,這其實是一個很實際的部署提醒:如果你把 passkey 當強安全主路徑,卻保留一條同樣高權限、但容易被 phishing 的老路,那整體抗 phishing 強度仍可能被最弱鏈條決定。

這篇論文其實也在提醒:同步型與本機型 authenticator 的風險模型不一樣

作者在分析時有一個很值得注意的點:本機 local authenticator 與雲端同步 authenticator 不應該被當成同一種東西看待。

像 infected authenticator 這種攻擊,更貼近 local key generation 的風險;而 cloud-synced passkeys 可能又把問題轉移到:

  • 帳號恢復流程
  • 同步端保護
  • 裝置間信任與雲端存取控管

這不表示哪個一定更安全,而是說:passkey 不是單一產品,而是一個協定家族 + 多種 authenticator 實作模型。 真正做風險評估時,不能只說「我們上 FIDO2 了」就收工,還得問:

  • 私鑰在哪裡生成?
  • 誰能更新 authenticator 軟體?
  • 信任鏈怎麼管理?
  • fallback flow 還剩多少?

我自己的看法:這篇真正有價值的地方,是把「phishing-resistant」翻成成本語言

很多安全宣稱一旦用 marketing 語氣講,就會失真。像 phishing-resistant 這種詞,如果被聽成「不可能被 phishing」,就很危險;因為一旦看到反例,大家又會反過來說「那根本沒差」。

這篇比較成熟的地方,是它把這句話翻回安全工程真正該用的語言:

passkey 的價值,不在於完全消滅攻擊,而在於把成功攻擊所需的前置條件、客製化程度與本機控制需求顯著提高。

換句話說,它讓攻擊者從大量撒網式 phishing,退回:

  • 更昂貴的端點入侵
  • 更難複製的 targeted deception
  • 更依賴 local trust-chain manipulation 的攻擊

這就是很典型的「把 attack economics 改壞掉」。而在實務世界裡,這種改變通常就已經非常值錢。

這篇的限制也很明顯:比較像攻擊面盤點 + PoC,不是大規模野外量測

當然,這篇也不是沒有侷限。

  • 它不是大樣本野外實測,而是攻擊面梳理加上兩個 PoC 展示。
  • 不少攻擊條件相當強,例如裝置先被 malware 感染、同網段 ARP spoofing、手動調整信任鏈等。
  • 難度分級偏工程判斷,不是形式化攻擊成本模型。

但我不覺得這些限制讓它失去價值。反而應該這樣看:這篇不是在說「FIDO2 很容易被破」,而是在說「如果連這麼費工的路都得走,剛好證明 FIDO2 真的把便宜攻擊擋掉了」。

Takeaway

如果要把整篇收成一句最值得記住的話,我會這樣寫:

很多人以為 passkey 的價值只是少一組密碼,但這篇真正證明的是:FIDO2 把攻擊從可規模化的遠端憑證釣取,推回必須先控制裝置、污染信任鏈、或高度客製化 relay 的高成本模式;它不是讓攻擊消失,而是讓原本最便宜、最好複製的那種攻擊失去經濟性。

如果你在做身分驗證、企業 SSO、consumer login、browser security 或 anti-phishing 架構,這篇很值得看。它不會告訴你 passkey 是銀彈,但它很清楚地告訴你:和 password 相比,攻擊者真的得辛苦得多。

本文由 AI 產生、整理與撰寫。

You may also like