跳到內容

身份認證、金鑰體系與信封加密

DNS Worker 在後臺解析管道與 Web 控制面板中全面踐行零信任深度防禦安全標準。本篇全面解析身份鑑權協議、信封金鑰輪換機制以及核心安全環境變數。


Web 控制面板生物識別通行金鑰登入

Web 管理面板嚴格遵循 WebApp Trust 零信任安全架構標準:

sequenceDiagram
autonumber
participant Browser as 浏览器客户端
participant Server as DNS Worker 服务端
Browser->>Server: POST /api/auth/login (密码 + 随机数 Nonce)
Note over Server: Argon2 / PBKDF2 校验
Server-->>Browser: Access Token (内存) + Refresh Token (Cookie)
Browser->>Server: 授权 API 调用 (Authorization: Bearer)
Browser->>Server: POST /api/auth/refresh (RTR 宽限窗口)
Note over Server: 签发全新令牌对
Server-->>Browser: 轮换后的 Access Token + 轮换后的 Refresh Token
  • 硬體通行金鑰 (WebAuthn):支援 Touch ID、Face ID、Windows Hello 及 YubiKey 生物認證,徹底阻斷撞庫與釣魚攻擊。
  • 隨機數防重放:所有敏感操作均包含加密隨機數,杜絕重放攻擊。
  • 非可匯出 Web Crypto 金鑰:前端私鑰運算(如後量子 ML-KEM、AES-GCM 日誌解密)在獨立 Web Worker 中使用不可匯出的 Web Crypto API 原生物件執行。
  • 單次重新整理令牌輪換 (RTR):Refresh Token 具備一次性屬性,每次換髮新 Token 時舊 Token 立即吊銷。
  • 併發寬限視窗:在多瀏覽器標籤頁併發請求時,通過原子寬限期(RTR_GRACE_WINDOW_MS)避免誤判登出。

在 Account & Security Settings(賬戶與安全設定)卡片中管理主金鑰、通行金鑰及後量子 E2EE:

賬戶與安全設定面板

服務端儲存的敏感資料(包括使用者會話令牌與加密查詢日誌)由兩層信封加密機制保護:

flowchart TD
KEK["密钥加密密钥 (KEK_v1 / KEK_v2)<br/>(保存在安全环境变量或 Cloudflare Secrets 中)"]
DEK["数据加密密钥 (DEK)<br/>(为每批日志或会话动态独立生成)"]
PAYLOAD["核心敏感数据 / 密文载荷"]
KEK -->|"加密 / 解密"| DEK
DEK -->|"加密 / 解密"| PAYLOAD
  1. 服務端自動載入最高版本的金鑰(如 KEK_v2)加密所有新寫入的資料。
  2. 歷史老資料仍可使用舊版 KEK_v1 或相容的 JWT_SECRET(v0)無縫解密。
  3. 伴隨資料更新或定期維護任務,系統會自動將舊資料無縫重新加密至最新啟用版本。

在 .env(Serverfull 模式)中配置,或在 Cloudflare Workers 中通過 wrangler secret put <NAME> 設定。

  • 型別:string(至少 32 字元)
  • 職責:令牌簽名根金鑰與 KEK_v0 信封加密基礎後備。
  • 安全要求:必須使用高強度密碼學偽隨機數生成,嚴禁使用弱口令。
  • 生成方式:
    終端機視窗
    openssl rand -base64 32
  • 型別:string(至少 32 字元)
  • 職責:多版本信封加密主金鑰。
  • 配置範例:
    KEK_v1=c3VwZXJzZWNyZXRrZXl2MWV4YW1wbGUxMjM0NTY3ODk=
    KEK_v2=bmV3ZXJzZWNyZXRrZXl2MmV4YW1wbGUxMjM0NTY3ODk=
    系統會自動識別數字最大的版本(v2)作為當前加密金鑰,同時保留對舊版本的解密支援。
  • 型別:string
  • 職責:獨立伺服器 API 管理令牌,以及 Cloudflare Worker 呼叫獨立伺服器時的鑑權憑據。
  • 請求頭:Authorization: Bearer <SERVERFULL_API_KEY>。
  • 型別:string
  • 職責:初次部署時系統預設的管理員密碼。初始化建立後憑據將安全加密儲存於資料庫中。