安全與隱私白皮書(總覽)第 5 章

第 5 章 密碼學與金鑰管理

本章說明 FileBolt 的端對端加密(E2EE)與零知識邊界,並規範 cryptoVersion=v1 的參數、編碼規則、失敗模式與用戶端限制。 金鑰在用戶端產生與使用;伺服器與物件儲存僅處理密文區塊及必要的中繼資料。

5.0 摘要

  • 系統 MUST NOT 接收、儲存或記錄解密金鑰(CEK)。 CEK 資料僅攜帶於 URL 片段(# 後的部分),HTTP 請求不會將其傳送至伺服器。
  • 加密採用 AES-128-GCM(AEAD)。每個檔案使用獨立的 CEK(16 位元組)。區塊大小固定(例如 16MB)。
  • v1 的 IV 建構方式:IV = noncePrefix(8B) || uint32_be(chunkIndex)(4B)。 AAD 綁定 transferId、fileId 與 chunkIndex,以防止情境替換與重放攻擊。
  • 伺服器權杖僅控制密文的存取且會過期;不會賦予解密能力。

5.1 傳輸加密(TLS)

5.1.1 安全目標

  • 防止上傳/下載/API 連線遭竊聽與竄改。
  • 保護傳輸中的權杖與密文。

5.1.2 安全政策

  • 系統 MUST 僅透過 HTTPS 提供所有頁面與 API。
  • 系統 SHOULD 優先使用 TLS 1.3,並視需要支援 TLS 1.2;必須停用弱協定/弱加密套件。
  • 系統 MUST 啟用 HSTS,並設定合理的 max-age。

5.2 區塊加密(AES-128-GCM)

5.2.1 設計說明

  • 檔案會被切分為固定大小的區塊;每個區塊獨立加密,以支援平行傳輸與續傳。
  • AEAD 驗證可保護完整性;任何驗證失敗都必須採取失敗即關閉的處理。

5.2.2 安全政策

  • 每個檔案必須使用不同的 CEK(16 位元組)。
  • IV 必須對每組(檔案、chunkIndex)唯一。v1 採用 noncePrefix + chunkIndex 的編碼方式。
  • AAD 必須包含(transferId、fileId、chunkIndex),將密文與其情境綁定。

5.3 零知識連結模型

5.3.1 關鍵限制

  • CEK(或衍生材料)必須僅攜帶於 URL 片段,且不得放入查詢參數或標頭。
  • 伺服器不得記錄片段;日誌必須經過清理,以避免意外擷取。
  • Referrer 政策應防止片段透過外連導覽外洩(參見第 9 章)。

5.4 金鑰產生與處理

  • 金鑰必須使用密碼學安全的亂數產生器(WebCrypto)產生。
  • 金鑰應僅保存在記憶體中,並在不再需要時清除。
  • 用戶端不得將 CEK 保存在伺服器可見的位置(例如 Cookie、查詢參數)。

5.5 編碼與參數

  • cryptoVersion=v1 用於識別演算法組合與 IV/AAD 規則。
  • 清單(manifest)必須包含必要的公開參數(區塊大小/數量、noncePrefix、fileId 對應),但不得包含 CEK。

5.6 失敗模式(失敗即關閉)

  • 解密失敗或 AEAD 驗證失敗時,用戶端必須中止,且不得輸出部分明文。
  • 參數不一致(transferId/fileId/chunkIndex)時,用戶端必須失敗即關閉,並應回報可據以處理的錯誤。

5.7 相關聲明 ID