Logo

安全與隱私白皮書(概述)第5章

第 5 章 密碼學與金鑰管理

本章介紹了 FileBolt 的端對端加密(E2EE)和零知識邊界,並指定 cryptoVersion=v1 參數、編碼規則、故障模式和客戶端約束。 金鑰在客戶端產生並使用;伺服器和物件儲存僅處理密文區塊和所需的元資料。

5.0 總結

  • 系統不得接收、儲存或記錄解密金鑰 (CEK)。 CEK 資料僅在 URL 片段中攜帶(# 部分),不會在 HTTP 請求中傳送到伺服器。
  • 加密用途 AES-128-GCM (AEAD)。每個檔案使用獨立的CEK(16位元組)。區塊大小是固定的(例如 16MB)。
  • v1 IV 構造: IV = noncePrefix(8B) || uint32_be(chunkIndex)(4B). AAD binds 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 位元組)。
  • 每個(文件,chunkIndex)的 IV 必須是唯一的。 v1 使用 noncePrefix + chunkIndex encoding.
  • AAD 必須包含 (transferId, fileId, chunkIndex) 將密文綁定到其上下文。

5.3 零知識連結模型

5.3.1 主要限制

  • CEK(或衍生資料)必須僅在 URL 片段中攜帶,且不得包含在查詢參數或標頭中。
  • 伺服器不得記錄片段;必須對日誌進行清理以避免意外捕獲。
  • 引用策略應該防止透過出站導航的片段洩漏(請參閱第 9 章)。

5.4 密鑰產生與處理

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

5.5 編碼及參數

  • cryptoVersion=v1 識別演算法套件和 IV/AAD 規則。
  • 清單必須包含必需的公共參數(區塊大小/計數、noncePrefix、fileId 映射),但不得包含 CEK。

5.6 故障模式(故障關閉)

  • 當解密失敗或 AEAD 驗證失敗時,用戶端必須中止且不得輸出部分明文。
  • 如果參數不符(transferId/fileId/chunkIndex),客戶端必須關閉失敗並且應該報告可操作的錯誤。

5.7 相關聲明 ID