PACT:為 Web 打造的匿名憑證系統
Mozilla Hacks · 2026-06-23
Mozilla 在 2026 年 6 月發表了 PACT(Privacy-preserving Anonymous Credential Technology),一套針對現代 Web 環境設計的匿名憑證協議,目標是在不揭露使用者身份的前提下,讓伺服器端能夠驗證使用者具備特定屬性,例如「已通過年齡驗證」或「訂閱有效」。
背景
傳統的 Web 認證(OAuth、cookie session)在每次請求都會帶上可追蹤的識別符,讓服務商能夠跨請求、跨站點建立使用者行為輪廓。匿名憑證的核心思想是把「你是誰」與「你有什麼資格」分開:憑證簽發者(identity provider)只確認屬性;驗證方(relying party)只能確認屬性成立,無法得知是哪個用戶。
現行方案如 Privacy Pass 與 PrivacyPass HTTP 擴充已在 CDN 反機器人場景中部署,但覆蓋場景有限。PACT 試圖提供更通用的協議層,能夠支援多屬性斷言與選擇性揭露。
規格細節
PACT 協議基於 BBS 簽章(Boneh-Boyen-Shacham)的零知識擴充,允許持有者對一組屬性生成選擇性揭露的證明,而不洩露完整憑證。與傳統 JWT 不同,BBS 簽章支援「出示子集」:持有者可以只揭露「年齡 ≥ 18」,而不必揭露確切生日。
協議分三個角色:Issuer(簽發屬性憑證)、Holder(瀏覽器端保存憑證)、Verifier(服務端驗證)。Issuer 與 Verifier 之間沒有通訊,這消除了傳統 SSO 中 IdP 能夠得知用戶訪問哪些服務的問題。
影響範圍
PACT 當前狀態為 Mozilla 內部提案,尚未進入 W3C 標準流程。主要挑戰在於:撤銷機制——匿名憑證一旦簽發,若不引入可追蹤的撤銷清單,便難以使憑證失效;密碼學計算成本——BBS 零知識證明比 ECDSA 驗證慢一個數量級,在低端設備上需要額外最佳化。
對 Web 開發者而言,若 PACT 進入瀏覽器 API,未來的年齡驗證、訂閱確認等場景將能在不傳遞用戶識別資訊的情況下完成,與 GDPR、ePrivacy 的合規需求也更容易對齊。
原始來源:Mozilla Hacks
WATaBoy:Game Boy 指令 JIT 編譯至 WASM 勝過原生直譯器
humphri.es · 2026-06-29
WATaBoy 是一個 Go 撰寫的 Game Boy 模擬器實驗,作者實作了一套 JIT 編譯器,將 Sharp LR35902 指令動態轉譯為 WebAssembly 文字格式(WAT),再交由瀏覽器的 WASM runtime 執行,效能超越同樣用 Go 撰寫的原生直譯器。
核心改動
傳統 Game Boy 模擬器以「fetch-decode-execute」循環逐條執行 LR35902 指令,每條指令都需要一次分派(dispatch)。WATaBoy 的 JIT 路徑則是:掃描連續基本區塊,一次性產生對應 WAT 文字,透過 WebAssembly.compile() 編譯為 binary,再以 WebAssembly.instantiate() 執行。
WAT 是 WASM 的人類可讀表示,語法直接對應 WASM 的堆疊式 VM。作者選擇 WAT 而非直接輸出 WASM binary,主要是因為易於除錯,且文字轉 binary 的成本由瀏覽器內建編譯器承擔。
;; LR35902 ADD A,B 對應的 WAT 輸出範例
(local.set $A
(i32.add (local.get $A) (local.get $B)))影響範圍
實測結果顯示,JIT 路徑在 CPU 密集場景(如音頻合成迴圈)每秒可處理的 Game Boy 時脈數高於純 Go 直譯器約 30–50%。冷啟動(首次 JIT 編譯某段程式碼)延遲約 2–5ms,在模擬器場景中可接受。
這個實驗同時驗證了「WASM 作為後端 IR」的可行性:在瀏覽器環境中,動態生成 WASM 模組不受 CSP script-src 'unsafe-eval' 限制,因為 WebAssembly.compile() 走的是獨立的權限模型。
原始來源:humphri.es
你或許不需要 Service Worker
jayfreestone.com · 2026-06-29
Jay Freestone 梳理了 Service Worker 被過度引入的常見場景,指出許多開發者在並不需要離線能力或背景同步的應用中仍然引入 Service Worker,反而帶來快取失效難以追蹤、除錯複雜度上升等問題。
核心改動
文章列舉了被 Service Worker 替代卻有更簡單方案的場景:
- 靜態資源快取:可直接透過 HTTP
Cache-Control: immutable與 CDN 邊緣快取處理 - 推播通知:若只需在頁面開啟時運作,Web Push API 可不依賴 Service Worker 的
push事件 - 資源預取:可用
<link rel="prefetch">或 Speculation Rules API 實現
Service Worker 的生命週期(install → waiting → activate)是許多快取 bug 的根源。版本升級時舊 Worker 仍可能服務舊版快取,直到所有分頁關閉,這在 SPA 更新場景中特別難以排查。
影響範圍
作者建議的決策框架:只有在需要真正離線運作(無網路仍可使用)、背景資料同步、或跨 session 快取策略時,才引入 Service Worker。Speculation Rules API(Chrome 121+ 支援)已能覆蓋大多數「預載入下一頁」的需求,且不需要額外的 Worker 生命週期管理。
原始來源:jayfreestone.com