本章幫讀者做一個決定:確定要用使用者手上的某個實體來驗證身分之後,選哪一種載體,以及導入時要先把哪幾條路徑設計完。

它接在 7.31 認證方式選型 之後——那一章的判讀軸問可離線猜測的材料落在哪裡,而這一類憑證的材料不在任何可猜測的位置上,判讀因此要換一條軸。

本章涵蓋與不涵蓋

本章聚焦人類使用者持有的憑證載體:passkey、獨立的安全金鑰、企業與政府的智慧卡。要不要走這條路、以及它與密碼和委派身分之間的取捨在 7.31。機器持有的憑證走 7.34 機器憑證的機制選型,判讀軸不同——那一類的持有者是系統、盤點得出來、也不會遺失金鑰。單人自用工具的裝置層與連線層兩段式認證見 7.2 單人裝置認證模型,那個形態沒有中央帳號,失效模型與本章不同。憑證的簽發、續期與撤銷這套 PKI 生命週期在 7.5 傳輸信任與憑證生命週期,智慧卡形態要兩章合讀。

判讀軸:那把憑證能不能離開它的載體

7.31 的判讀軸問可離線猜測的材料落在哪裡,而這一類憑證的答案是「不在任何可猜測的位置上」——私鑰由機器產生,沒有人選它、也沒有人記得住它。判讀因此換成另一條:這把憑證能不能離開它原本所在的那個實體。

離不開時,一把憑證對應一個實體,複製不出第二份。攻擊者要用它就得拿到那個實體,於是純遠端的攻擊對這一種載體整個消失。代價全部壓在同一個地方——那個實體掉了、壞了、換了的時候怎麼辦。

離得開時(憑證隨平台帳號同步,或憑證檔案可以匯出匯入),使用者換裝置不痛,而憑證的實際保護水準等於守著那些副本的那一層。還有一項要一起看:副本存在幾份、在哪裡,這邊查不出來。伺服器看到的始終是同一把公鑰,它分不出對面是原本那台裝置還是同步過去的第三台。

這條線決定的是副本數量與攻擊形態,而實際的安全上限另由補發路徑決定,兩者要分開判——後面幾節依序處理:第一支從哪裡來、掉了之後走哪裡,以及企業與消費端為什麼在同一個決定上會選出不同的答案。

生物辨識在這條軸上是鎖,不是載體

把指紋或臉部辨識當成一種憑證是常見的分類錯誤,而它會讓整個判讀走偏。

實際的運作是這樣:生物特徵不離開裝置,也不會送到伺服器。它解鎖的是裝置上那把私鑰,而送到伺服器的是那把私鑰產生的簽章。所以「用指紋登入」的憑證是那把私鑰,判讀走「那把憑證能不能離開它的載體」那條軸;生物辨識決定的是另一個問題——別人拿到這台裝置時能不能用它。

分清楚之後兩件事各歸各位。感測器被騙過的風險落在裝置遺失之後的那一段,處置是裝置本身的鎖定與遠端抹除。憑證會不會被複製走與感測器無關。混在一起的系統會在錯的地方投資——例如要求更高的生物辨識等級,而那把憑證同步在一個只由密碼守著的平台帳號裡。

三種載體形態

綁在裝置的安全區:手機或電腦內建的安全晶片保管私鑰,程式無法擅自讀出。一台裝置一份,換裝置時憑證不會跟過去。這裡的「不可導出」是相對於程式擅自讀取,而不是相對於使用者主動搬遷——跨提供者的憑證匯出規格已經在標準化與出貨階段,寫作當下這一項的邊界正在鬆動,判讀時要回查現行狀態。這是消費端最強的那一種形態,代價是每台裝置都要各自註冊。

隨某個憑證提供者同步:憑證跟著使用者的作業系統平台帳號、或第三方密碼管理器走,新裝置登入那個帳號之後就有了。兩者的差別在企業管得到前者(裝置管理政策涵蓋 OS 帳號)而管不到後者。使用者體驗最好,而實際的安全水準等於那個平台帳號的安全水準——它自己多半仍由一組密碼加第二因子守著。這一種在 7.31 已經從「材料落在哪裡」的角度寫過,此處補的是它在載體這條線上的位置:憑證離得開原本的裝置,因此副本數量不可知。

獨立的實體:USB 或近場感應的安全金鑰、企業與政府的智慧卡。私鑰不可導出,而且與任何一台裝置解耦——同一支可以在多台電腦上用。這是唯一做得到「憑證跟著人走而不是跟著裝置走」的形態,代價是採購、配發與回收都是實體流程。

同一個服務上前兩種會同時存在,取決於使用者的作業系統與瀏覽器組合,而使用者分不出自己手上是哪一種。這件事對帳號回復設計的要求見 7.31 常見的四種組合把材料移到哪裡

第一支從哪裡來

導入這一類憑證最常斷掉的位置是註冊的起點,而斷掉的方式不明顯:註冊一支新憑證要先證明身分,而那個證明用的是什麼,決定了整條鏈的實際強度。

多數導入的做法是「使用者登入之後在設定頁新增一支」。登入若照舊可以用密碼,這支新憑證的強度上限就是那組密碼——攻擊者拿到密碼一樣註冊得出來。於是新機制沒有取代舊的,只是疊在上面。

這個結構有一個後果值得單獨寫:攻擊者用密碼登入之後可以替自己註冊一支憑證,從此他有一條看起來更強、而且不會因為使用者改密碼而失效的持久存取路徑。使用者這一側沒有任何徵兆,因為他自己的憑證照常可用。

處置有三項,彼此獨立。註冊事件要通知使用者,而且通知要寫清楚「這不是你做的話該去哪裡」。註冊要當成高風險操作,要求重新驗證或升級驗證強度,判讀見 step-up authentication舊路徑要有退場計畫——憑證覆蓋率到某個比例之後把密碼路徑關掉或降級,而這個觸發條件要在導入當下就寫下來。

企業形態的起點不同:第一支可以在報到當天由人核身之後當面配發,於是這個引導問題不存在。這是企業與消費端在同一個決定上會走不同路的第一個原因。

掉了之後

這一類憑證的安全上限由補發路徑決定,理由是憑證本身偽造不了,攻擊者的最短路徑因此改成宣稱自己掉了。

補發路徑的設計有一條主線:讓它要求的材料不是可離線猜測的那一類。要求回答預設問題、或寄一封重設信到信箱,都會把材料移回 7.31 判讀軸:材料落在哪裡 說的那一類,整條鏈的上限跟著掉下去。

有效的做法是把壓力往前挪到註冊階段:**要求使用者註冊第二支。**第二支的價值來自它與第一支的失效不相關——同一個平台帳號同步的兩支、同一台裝置上的兩份憑證、同一個抽屜裡的兩支金鑰會一起失效,數量對了而備援沒有。獨立的第二支存在時,遺失一支是不便而非事故——用另一支登入、註冊一支新的、把掉的那支撤銷,全程不需要任何較弱的路徑。第二支不存在時,補發只剩兩條路,而兩條都貴:人工核身(要有人、要有流程、要能承擔誤判)或降級回一條較弱的路徑(安全上限跟著降到那裡)。

要求兩支的代價是採用率。消費端的使用者多半只有一支手機,要他再買一支安全金鑰是很高的門檻,所以消費端的常見組態是「一支同步型憑證加一條人工或降級的回復路徑」——選這一組要清楚它的上限就在那條回復路徑上,而不是在憑證上。企業形態相反:裝置由公司配發、有人可以核身、也負擔得起第二支的成本,因此要求兩支是可行的預設。

回收是企業形態獨有的一項。員工離開時實體要拿回來,而拿不回來時要靠撤銷,撤銷得掉的前提是這把憑證在某個清單裡查得到。智慧卡形態的撤銷走 PKI 那一套,見 7.5 傳輸信任與憑證生命週期certificate revocation;帳號側的停用同步走 7.38 外部身分與本地紀錄

判讀流程

  1. 先確認使用者群體拿得到什麼載體。消費端的答案是「他現有的裝置」,企業的答案可以是「公司配發的」,而這一項限制了後面每一步的可行選項。
  2. 判斷落在哪一種載體形態,並寫出這把憑證離不離得開原本的實體。答案是離得開時,補一句它的實際保護等於什麼在守著那些副本。
  3. 設計註冊的起點,並寫出它的強度上限。上限低於新機制時,這條鏈的實際水準是那個上限。
  4. 設計補發路徑。要求兩支撐得起時走那一條;撐不起時明寫回復路徑是什麼,並接受安全上限落在那裡。
  5. 把註冊與撤銷事件接上通知與稽核。這一類事件的重要性高於登入事件,因為它們改變的是「誰進得來」而不是「誰進來了」。
  6. 定舊路徑的退場觸發條件。寫不出條件時,舊路徑會一直是實際下限。

這個決定失敗時長什麼樣

採用率在幾個月內過半、登入失敗率下降、客服的密碼重設詢問明顯減少。這些數字都是真的。

團隊上線的是 passkey,註冊流程是「登入之後在設定頁新增」,而登入照舊可以用密碼。關掉密碼路徑的條件沒有人定過——因為還有一半使用者沒轉過來,關掉會把他們擋在外面。

實際的攻擊面因此沒有移動:外洩密碼清單拿來試登入照樣有效,而成功之後攻擊者多了一個動作可做——替自己註冊一支憑證,得到一條使用者改密碼也不會斷的存取路徑。

那三個數字量的是採用率,而攻擊面由最弱的那條進得來的路徑決定,兩者之間沒有函數關係,所以採用率再高也推不出安全水準有變。要看見它,該問的是另一個問題:現在還有哪些路徑進得來、其中最弱的是哪一條。那正是 7.31 判讀流程第二步在做的事。

常見風險邊界

  • 憑證註冊的驗證強度低於憑證本身的強度時,實際水準由註冊那一步決定,而所有指標顯示的是憑證那一步。
  • 導入新機制而沒有定舊路徑的退場條件時,實際下限不會移動,而且時間拖得越久越難關掉。
  • 只註冊一支、補發路徑走信箱或預設問題時,安全上限落在那條路徑上,與載體形態無關。
  • 憑證註冊事件不通知使用者、也不進稽核紀錄時,攻擊者替自己註冊的那一支沒有任何人會看到。
  • 把生物辨識當成憑證來評估時,投資會落在感測器等級上,而憑證的複製風險與副本數量沒有人在看。
  • 企業配發實體而沒有回收與撤銷流程時,離職者手上那一支還能不能用取決於帳號側有沒有停用,而那是另一條線的責任。

下一步路由