← Back to list

FIDO2 Conformance Test 完全攻略(一):初步介紹與整體架構

這是系列文章的第一篇,將介紹什麼是 FIDO Conformance Test、為什麼它很重要、以及 159 項測試的整體架構。

普隆德拉 Java 樞機 · 2026-02-06 08:22 · 0 claps · 9.6 min read
#fido2 #ctap #java #backend
Open on Medium ↗
Wiki topics: 🌐 · Web Development

FIDO2 Conformance Test 完全攻略(一):初步介紹與整體架構

這是系列文章的第一篇,將介紹什麼是 FIDO Conformance Test、為什麼它很重要、以及 159 項測試的整體架構。

系列文章目錄

  1. 初步介紹與整體架構(本篇)
  2. [上篇:註冊流程基礎驗證(57 項測試)]
  3. [中篇:Attestation 格式深度解析(52 項測試)]
  4. [下篇:登入流程與 MDS3 信任機制(50 項測試)]
  5. [重點紀錄:踩坑總結與關鍵程式碼]

什麼是 Passkey?為什麼密碼即將消失?

2024 年,Google、Apple、Microsoft 三大巨頭聯手推動 Passkey(通行密鑰),宣告密碼時代即將終結。

傳統密碼的問題:

  • 😰 使用者記不住,只好重複使用
  • 🎣 容易被釣魚網站騙走
  • 💾 資料庫外洩,密碼被破解
  • 📱 簡訊 OTP 可被 SIM Swap 攻擊

Passkey 的優勢:

  • 🔐 使用公私鑰加密,私鑰永遠不離開裝置
  • 🛡️ 無法被釣魚(綁定網域)
  • 👆 生物辨識(指紋/Face ID)即可登入
  • 🔄 跨裝置同步(iCloud、Google Password Manager)

什麼是 FIDO Conformance Test?

FIDO Alliance(FIDO 聯盟) 是制定 Passkey 標準的組織,成員包括 Google、Apple、Microsoft、Visa、Mastercard 等。

為了確保各家實作的 Server 都符合規範,FIDO Alliance 提供了 Conformance Test Tools

通過 Conformance Test 代表:

  • ✅ RP Server 符合 W3C WebAuthn 規範
  • ✅ 可以和任何標準認證器互動(YubiKey、手機 Passkey 等)
  • ✅ 具備申請 FIDO Alliance 官方認證的資格

159 項測試的整體架構

測試分類總覽

分類                    說明                              詳見
──────────────────────────────────────────────────────────────────
Attestation Options     註冊選項 API 回應格式驗證          第二篇
Attestation Result      註冊結果驗證(含各種格式)         第二、三篇
Assertion Options       登入選項 API 回應格式驗證          第四篇
Assertion Result        登入結果驗證                       第四篇
MDS3                    Metadata Service 信任根驗證        第四篇
──────────────────────────────────────────────────────────────────
總計:159 項測試

API 端點對應

RP Server 需要實作 4 個 API:

POST /attestation/options   ← 產生註冊選項
POST /attestation/result    ← 驗證註冊結果
POST /assertion/options     ← 產生登入選項
POST /assertion/result      ← 驗證登入結果

測試編號規則

每個測試都有編號,例如 Resp-5 F-3

Resp-5 F-3
│    │ │ │
│    │ │ └── 第 3 個測試案例
│    │ └──── F = Failure(應該失敗)/ P = Pass(應該成功)
│    └────── 第 5 個 Response 測試群組
└─────────── Resp = Response 驗證

P(Pass)測試:發送正確的請求,Server 應該回傳成功 F(Failure)測試:發送故意錯誤的請求,Server 應該回傳錯誤

詳細測試分類

1. Attestation Options(註冊選項)- 4 項

測試 /attestation/options API 的回應格式:

編號   測試內容
────────────────────────────────────────────────────────────────────
P-1    回應必須包含 status、user、rp、challenge、pubKeyCredParams、extensions
P-2    attestation 設為 "none" 時,回應也要是 "none"
P-3    兩次請求的 challenge 必須不同(隨機性)
P-4    userVerification 設為 "required" 時,回應也要是 "required"

2. Attestation Result(註冊結果)

這是最大的測試群組,包含:

群組      測試數量    測試內容
────────────────────────────────────────────────────────────────
Resp-1      16 項    基本結構驗證(id, type, response 欄位)
Resp-2      17 項    clientDataJSON 驗證(type, challenge, origin)
Resp-3      20 項    attestationObject 驗證(fmt, attStmt, authData)
Resp-4      12 項    演算法支援(ES256, RS256, Ed25519...)
Resp-5      19 項    packed FULL attestation
Resp-6       4 項    packed SELF attestation
Resp-7       3 項    none attestation
Resp-8       3 項    fido-u2f attestation
Resp-9       7 項    tpm attestation
Resp-A       4 項    android-key attestation

3. Assertion Options(登入選項)- 2 項

測試 /assertion/options API 的回應格式:

編號   測試內容
────────────────────────────────────────────────────────────────
P-1    回應必須包含 status、challenge、allowCredentials、extensions
P-2    兩次請求的 challenge 必須不同

4. Assertion Result(登入結果)

群組      測試數量    測試內容
────────────────────────────────────────────────────────────────
Resp-1      22 項    基本結構驗證(id, type, response, signature)
Resp-2      17 項    clientDataJSON 驗證
Resp-3      12 項    authenticatorData 驗證(rpIdHash, flags, counter)

5. MDS3(Metadata Service)- 6 項

測試 Server 對 FIDO 認證器資料庫的信任機制:

編號   測試內容
────────────────────────────────────────────────────────────────
P-1    正常的 MDS BLOB,應該接受
F-1    認證器狀態為 COMPROMISED,應該拒絕
F-2    BLOB 簽章錯誤,應該拒絕
F-3    BLOB 憑證鏈錯誤,應該拒絕
F-4    中間 CA 被吊銷,應該拒絕
F-5    葉端憑證被吊銷,應該拒絕

開始測試前的準備

1. 下載 Conformance Test Tools

前往 FIDO Alliance 官網申請: https://fidoalliance.org/certification/functional-certification/conformance/

2. 準備 RP Server

確保 RP Server 實作了 4 個 API:

  • POST /attestation/options
  • POST /attestation/result
  • POST /assertion/options
  • POST /assertion/result

3. 下載測試用 Metadata

Conformance Test 使用虛擬認證器,需要下載對應的 Metadata:

在 Conformance Tools 介面點擊「DOWNLOAD TEST METADATA」
將下載的 JSON 檔案放到 RP Server

4. 回應格式要求

重要! Conformance Test 要求特殊的回應格式:

// ✅ 正確格式(所有欄位平鋪在最外層)
{
  "status": "ok",
  "errorMessage": "",
  "challenge": "xxx",
  "rp": {...},
  "user": {...}
}
// ❌ 錯誤格式(巢狀結構)
{
  "status": "ok",
  "data": {
    "challenge": "xxx",
    "rp": {...}
  }
}

錯誤回應也必須是 HTTP 200:

{
  "status": "failed",
  "errorMessage": "username is required"
}

測試結果

本系列文章基於通過全部 159 項測試的實作經驗:

passes: 159
failures: 0
duration: 157.25s
✅ Server-ServerPublicKeyCredentialCreationOptions-Req-1:  4/4
✅ Server-ServerAuthenticatorAttestationResponse-Resp-1: 16/16
✅ Server-ServerAuthenticatorAttestationResponse-Resp-2: 17/17
✅ Server-ServerAuthenticatorAttestationResponse-Resp-3: 20/20
✅ Server-ServerAuthenticatorAttestationResponse-Resp-4: 12/12
✅ Server-ServerAuthenticatorAttestationResponse-Resp-5: 19/19
✅ Server-ServerAuthenticatorAttestationResponse-Resp-6:  4/4
✅ Server-ServerAuthenticatorAttestationResponse-Resp-7:  3/3
✅ Server-ServerAuthenticatorAttestationResponse-Resp-8:  3/3
✅ Server-ServerAuthenticatorAttestationResponse-Resp-9:  7/7
✅ Server-ServerAuthenticatorAttestationResponse-Resp-A:  4/4
✅ Server-ServerPublicKeyCredentialGetOptionsResponse-Req-1: 2/2
✅ Server-ServerAuthenticatorAssertionResponse-Resp-1:   22/22
✅ Server-ServerAuthenticatorAssertionResponse-Resp-2:   17/17
✅ Server-ServerAuthenticatorAssertionResponse-Resp-3:   12/12
✅ Server-MDS3:                                           6/6
─────────────────────────────────────────────────────────────
Total: 159/159 passed ✅

下一篇預告

下一篇文章將深入分析 Attestation Options 與 Attestation Result 的基礎驗證,包括:

  • id、type、response 欄位的驗證邏輯
  • clientDataJSON 的 17 種錯誤情況
  • attestationObject 的 CBOR 解碼與驗證

敬請期待

參考資源

#FIDO2 #WebAuthn #Passkey #無密碼登入 #資訊安全 #後端開發

下一篇:FIDO2 Conformance Test 完全攻略(二):註冊流程基礎驗證


메타데이터
post_id
83f56dbb030f
slug
fido2-conformance-test-完全攻略-一-初步介紹與整體架構-83f56dbb030f
url
https://medium.com/@rafaelwu0103/fido2-conformance-test-%E5%AE%8C%E5%85%A8%E6%94%BB%E7%95%A5-%E4%B8%80-%E5%88%9D%E6%AD%A5%E4%BB%8B%E7%B4%B9%E8%88%87%E6%95%B4%E9%AB%94%E6%9E%B6%E6%A7%8B-83f56dbb030f
canonical_url
https://medium.com/@rafaelwu0103/fido2-conformance-test-%E5%AE%8C%E5%85%A8%E6%94%BB%E7%95%A5-%E4%B8%80-%E5%88%9D%E6%AD%A5%E4%BB%8B%E7%B4%B9%E8%88%87%E6%95%B4%E9%AB%94%E6%9E%B6%E6%A7%8B-83f56dbb030f
author_url
https://medium.com/@rafaelwu0103
status
ok
fetched_at
2026-06-23 03:48:11