本報告為「有備而來:理想的數位皮夾開發報告」第八篇。內容依 2026 年 9 月 10 日的 twdiw-vc-issuer-lite 公開原始碼、README、src/probes.ts 等監測程式,以及示範站 issuer.mashbean.net/monitor 當日資料撰寫。儀表板讀取的是台灣數位憑證皮夾生態系的公開端點,本身不接受也不保存任何個資。文中的撤銷張數等統計為單日單點觀測,涵蓋範圍有限。
第七篇把發卡端的建置成本壓到一個 Cloudflare Worker,做了請收下卡片。走完發卡、信任清單與撤銷清單這一輪之後,浮現另一個問題。這些判斷皮夾生態系是否健康所需的公開資訊,分散在不同 API 與區塊鏈上,官方也沒有一頁把它們整合起來供人閱讀。同一個 Worker 因此多長出一塊 /monitor,每天掃描一次,只記錄變化。
儀表板看六件事
/monitor 每天以 UTC 02:00(臺灣時間 10:00)掃描一次,把生態系拆成六個面向,並把當日與前一日的差異寫進時間軸。
| 面向 | 觀測內容 |
|---|---|
| API 健康度 | 官方信任清單 API、申請新卡目錄、數位憑證皮夾官網、官方沙盒發行端等端點的可達性、延遲,以及回應形狀是否仍符合皮夾依賴的欄位 |
| 發卡端到端自檢 | Worker 自己扮演皮夾走完 offer、token、proof、領卡、驗證,確認發卡流程仍能成功 |
| 信任清單 | 登記 DID 總數與角色分布,以及誰加入、離開、更名或更換端點 |
| 撤銷清單 | 已知網址的 StatusList2021 位元圖、已撤銷張數,以及簽章金鑰是否就在發行者的 did:key 內 |
| 區塊鏈 | 抓取官方指名的 Arbitrum 交易比對內容,再查合約現況紀錄,避免舊登錄被回放 |
| 原始碼 | 官方皮夾 App 與相關 repo 的最後更新、開放 issue 與授權,反映維護活躍度 |
API 健康度的判準有一個容易被忽略的重點。可達性回傳 200 只代表伺服器還活著,欄位一旦改名,對依賴那個欄位的皮夾而言等同壞掉。監測程式因此對每個端點附一段形狀檢查,例如官方查驗端要回傳 profiles 陣列、本站發行端的 metadata 要有 credential_endpoint 字串,形狀不符就標為異常。
撤銷清單是逆向清點來的
官方目前沒有公布撤銷清單,也沒有任何集中頁面公告。儀表板的撤銷資料來自對已簽發卡片的逆向清點。具體流程是每天走一次官方信任清單,向每個發行者索取它的 OID4VCI metadata 取得卡種,再逐一讀出每個卡種背後的 StatusList2021 撤銷清單並清點位元。當日觀測到約 60 份清單、合計 14,604 張撤銷。
這份逆向清點揭露了幾項平常看不到的資訊,以下為單日單點觀測,不代表全貌。
三大電信的門號驗證卡都有大量撤銷紀錄,其中台灣大哥大約 9,536 張,中華電信與遠傳合計不到台灣大哥大的一半。撤銷量可作為發卡量級的間接指標。駕照驗證卡則抓不到對應的撤銷清單。
信任清單上出現由 Jcard(背後有宏碁投資)為「中新興村」發行的一批花漾卡,含門卡、會員卡與集點卡,撤銷數為 0,推測尚未正式上線。多所大學已在數位皮夾支援學位證書卡,包含台大、成大、台科大,另有大學發行教職員數位證件卡。其他可能已上線的卡片還包含工商憑證、教育部助學補助系統登入識別證,以及中華電信企業分公司訪客卡。
值得留意的是,正式系統的撤銷清單上同時出現一批命名帶有測試性質的卡片,例如 sheep、dolly、cookies、fries 等。這類卡片較可能屬於測試資料。測試卡出現在正式撤銷清單,形同開發流程中 staging 與 production 資料的界線沒有清楚切開。撤銷清單目前未公開,放置測試卡本身無實質風險,但從資料衛生的角度,正式環境宜與測試環境分離。
為什麼公開資料需要人類可讀
數位信任除了機器可驗證性之外,人類可讀性同樣重要。官方信任清單中每個發行者的 did:key 金鑰宜完整呈現,因為皮夾在讀取發行者與驗證者互動時,需要確認對象為真。目前官方皮夾 App 以內部鎖定的白名單方式與這些對象互動,白名單本身沒有對外的人類可讀入口。
白名單制在跨國情境下的維護成本會顯著上升。歐盟數位身分皮夾(EUDI Wallet)正推動各會員國上線,且其信任清單將隨既有電子簽章體系公開。台灣皮夾若要接受歐盟發行者出示的憑證,在缺乏可互通的公開信任清單時,實務上會出現警示,甚至無法取得對方卡片。把公開資料整理為人類可讀的形式,是跨域互通的前置條件之一。
信任清單與撤銷清單互為表裡。持有一張駕照驗證卡只證明曾經取得,不代表當前有效;駕照若因故被吊銷,撤銷清單會出現對應紀錄。查驗者因此需要在讀取卡片之外,多一道查核撤銷狀態的手續,這道手續正是租車等場景敢於採信數位證件的前提。API 健康度、信任清單與撤銷清單三者一併揭露,生態系的可信狀態才算完整。
鏈上比對與一個關於成本的觀察
數發部的信任清單目前有上鏈保存,鏈別為 Arbitrum。儀表板不採信 API 對上鏈的宣稱,而是抓取官方指名的 Arbitrum 交易比對內容,再查合約的現況紀錄,避免舊登錄被回放。當日觀測到 41 筆鏈上紀錄與官方中心化儲存一致。
就成本而言,以太坊主網目前的費用已大幅下降,第二層的 Arbitrum 在此用途上並非必要,且兩者同屬 EVM、遷移成本低。任何第三方也能自行撰寫智慧合約抓取官方資料、自行部署鏈上信任清單。不過第三方部署會失去「官方營運」所賦予的權威來源意義,鏈上信任清單的價值仍取決於由官方維護。
Issue 監測與公共程式的邊界
儀表板另設一塊追蹤官方相關 repo 的更新時間與 issue 回應狀態。設置這塊的原因之一,是開發過程中發現若干資安風險需要修正,嚴重度未達 critical,但涉及選擇性揭露目前尚未達到完整的選擇性揭露,相關細節已以 issue 形式提出,需要追蹤官方的回應時程。
這也構成一次對公共程式精神的具體測試。公共程式的前提是原始碼確實有人維護,否則名實不副。就現況而言,個人撰寫的程式碼無法貢獻至數發部的公共程式平台,因為資格限於政府機關或收受政府委託、補助的廠商,一般開發者連登入都無法完成。授權層面選用具傳染性的 copyleft GPL-3.0,於公共程式平台的相容性也因此無從實測。
儀表板明確標示的限制
監測程式在頁面上載明它做不到的事,避免被當成權威健康狀態來源。它是單點觀測,撤銷涵蓋範圍受限於能列舉到的卡種與清單網址,看不到 TLS 憑證狀態,資料最舊可能達 24 小時。變更以 JSON Feed 與 Atom 發布,只推變化、不推「今天一切正常」。GitHub 與 Arbitrum 兩塊各需一個可選 secret 才能每天完整跑完,未設時該格會標示查不到,而非以空白冒充正常。
三板斧一次揭露,生態系才看得清楚
發卡端與查驗端降到一鍵部署之後,判斷整個生態系是否健康所需的資料,仍散落在多個端點與一條區塊鏈上。API 健康度、信任清單與撤銷清單三者一次呈現,加上鏈上比對與原始碼活躍度,一個外部觀測者才能看清這套公共基礎設施當下的狀態與昨日的差異。這類公開資料理想上應部署於人類可讀的 gov.tw 網域,由官方整合揭露;在那之前,一個每日掃描、只記錄變化、並誠實標示自身限制的開源看板,提供了一個可被檢驗的參考實作。
*
原始碼:github.com/mashbean/twdiw-vc-issuer-lite(GPL-3.0)。監測儀表板:issuer.mashbean.net/monitor。姊妹報告「請收下卡片」:請收下卡片:把數位皮夾發卡做成一鍵部署的開源服務。