安全與隱私白皮書(概述)第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+chunkIndexencoding. - 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
- See 附錄:索賠 ID 為權威測繪。