Skip to content

加密

bae 放入不透明雲端主目錄的所有內容,都會在離開裝置前加密。bae 不自行實作密碼學:整套方案都來自 coven,本頁說明 bae 如何使用它。可瀏覽主目錄退出整套機制;下方內容不適用於它們。

不透明資料庫有一個根秘密:建立主目錄時生成的隨機 256-bit 金鑰。它存在 OS 鑰匙圈中,永遠不在檔案裡;在 Apple 平台上,鑰匙圈項目會透過 iCloud Keychain 同步。bae 的 config 只儲存金鑰指紋,足以在解鎖時分辨錯誤金鑰與正確金鑰,而不持有秘密。

金鑰以兩種方式在裝置間移動,兩者都在身分與成員資格中說明:邀請期間封存給已核准裝置的公開金鑰,以及包含在復原碼中。

資料庫金鑰實際上是編號世代的鑰匙圈。移除成員會附加新世代,被移除成員永遠不會收到:之後寫入的一切都使用新世代,對他們不可讀;仍在的成員保留每個世代,可讀取所有歷史。每個封存物件會以明文記錄哪個世代能開啟它。

主目錄中的每個物件:changeset、snapshot、音訊 blob、圖片、成員資格記錄、控制物件。物件以 XChaCha20-Poly1305 依 64 KB 區塊封存,每個區塊都會驗證,並綁定到其脈絡:封存物件只能作為它寫入時所要成為的物件、在此資料庫、以此金鑰解密。分塊就是串流可行的原因,播放器可只解密它抓取的位元組範圍。

物件數量、物件大小、上傳時間與存取模式。看不到名稱、中繼資料、音訊、圖片、成員資格。沒有伺服器端復原:使用者如果失去每台裝置與每份金鑰副本,就永遠失去資料庫密文,這正是設計的結果。

開啟資料庫會從鑰匙圈讀取金鑰。如果資料庫預期有金鑰而鑰匙圈沒有,bae 會把資料庫視為已鎖定:它會在開啟前要求輸入金鑰,先用儲存的指紋驗證,再把它存回鑰匙圈。鎖定資料庫會刻意從鑰匙圈移除金鑰;在再次輸入前,雲端主目錄中的任何內容都不能讀寫。