安全與隱私白皮書(總覽)第 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
- 權威對應表請參見 附錄:聲明 ID。