題幹與適用場景
遊戲平台、內容網站與線上藥房需要判斷使用者是否達到 13、16 或 18 歲。使用者持有政府或可信機構簽發的數位憑證,服務必須支援多簽發方、離線恢復、撤銷與濫用調查。
面試官考察點
考察憑證生命週期、隱私最小化、信任根、重放防護、可用性與監管稽核的取捨。W3C VC 2.0 定義 issuer、holder、verifier 三方;Digital Credentials API 讓使用者代理介導憑證展示。
回答前需要釐清的問題
確認年齡門檻、司法轄區、憑證來源、是否允許匿名證明、失敗後體驗與保存期限。也要問網站是否需要知道實際年齡,還是只需布林結論,以及高風險場景是否要求人工複核。
30 秒回答
「我會讓簽發方產生含年齡屬性的可驗證憑證,錢包只向驗證方展示達到門檻的證明,不展示生日或姓名。驗證方為每次請求產生 nonce 與 audience,檢查簽章、有效期、狀態清單與用途綁定;伺服器只保存最小稽核事件。先從單一轄區與單一門檻灰度,監控成功率、重放拒絕、誤拒率與隱私洩漏,再擴展簽發方和離線流程。」
分步驟深入解答
劃分參與者與信任根
簽發方負責事實與簽章,holder 錢包控制揭露,verifier 網站提出一次性請求。平台維護可信簽發方目錄與金鑰輪換,不代替簽發方重新證明身分。
設計最小揭露
優先回傳「已達 18 歲」的衍生聲明、憑證類型與有效期,不回傳出生日期、姓名或穩定識別碼。按轄區與門檻定義 schema,避免多餘欄位進入日誌。
防止重放與跨站關聯
每次展示綁定 nonce、audience、回呼來源與短過期時間。驗證方拒絕重複 nonce;錢包不重用可關聯識別碼,必要時為每個 verifier 產生不同 pseudonym。
驗證簽章與狀態
檢查憑證鏈、簽章演算法、issuer 信任、有效期與撤銷/暫停狀態。狀態服務可快取但要有新鮮度上限;狀態查詢失敗時依風險等級選擇 fail-closed 或人工複核。
處理離線與恢復
離線驗證只能使用帶有效期的簽章材料與最近狀態快照,不能無限信任舊狀態。錢包遺失時透過新裝置重新綁定或重新簽發,恢復流程不能降低原有門檻。
稽核與資料邊界
稽核記錄請求方、政策版本、結果與驗證時間,不記錄原始憑證或生日。為調查濫用保留受控關聯令牌,透過權限、加密與分離儲存限制存取。
高品質示範回答
我會按 issuer、holder、verifier 建模。簽發方發布含年齡屬性的 VC,錢包只展示門檻結論;網站為每次請求產生 nonce 與 audience,檢查簽章、信任目錄、有效期與狀態清單,並拒絕重放。伺服器只保存政策版本、結果與時間,不保存生日或原始憑證。離線模式依賴有新鮮度上限的狀態快照,恢復需重新綁定或簽發。先單一轄區灰度,觀察成功率、誤拒率、重放拒絕與隱私稽核,再擴展。
常見錯誤
收集完整身分證明
這違反資料最小化,也增加洩漏與跨站追蹤風險;年齡結論通常已足夠。
只驗證簽章
簽章有效不代表憑證未過期、未撤銷或用於正確 verifier;必須檢查狀態與 audience。
重用全域使用者識別碼
全域識別碼讓不同網站關聯使用者;應使用每 verifier 的偽名或一次性聲明。
離線無限信任舊狀態
撤銷與金鑰輪換會失效;離線材料必須有過期與升級策略。
追問及應對
未滿年齡但缺少憑證怎麼辦?
提供重新簽發、受監管人工複核或明確拒絕路徑,不要求把完整證件上傳到平台。
如何應對惡意網站重放憑證?
讓展示綁定 verifier、nonce 與短 TTL;監控重複 nonce 與異常來源並撤銷相關信任設定。
多轄區規則不同怎麼辦?
將政策版本、門檻與簽發方目錄配置化,驗證結果帶轄區與政策版本,避免把一個年齡規則硬編碼全球。
如何證明系統保護隱私?
以端到端測試檢查日誌、分析與錯誤回應不含生日或穩定識別碼,並定期稽核揭露欄位與狀態查詢。