安全
安全
用平實的話說明 VaultWell 如何保護你存放的內容。也包括它無法保護的部分,以及我們尚未完成的事。
我們防範誰、防範什麼
VaultWell 針對的是日常的隱私威脅,也就是大多數人真正會遇到的那些。
- 有人拿起你的手機。伴侶、親戚、同事,或撿到手機的陌生人。沒有路徑,保險庫就始終關著,即使他們知道你的手機密碼也一樣。
- 有人逼你解鎖。你可以開啟一個日常保險庫或脅迫保險庫。螢幕上不會顯示還有其他保險庫存在。
- 有人複製了 App 的檔案。金鑰與手機的安全硬體綁定,因此無法在高速電腦上進行猜測。
- 有人篡改了儲存的檔案。每個加密片段都經過認證,因此改動會被檢測出來,而不會被顯示。
它並非為抵禦以下攻擊者而設計:已經在你手機上安裝了惡意軟體的人、看著你畫出路徑的人,或能強迫你說出所有路徑的人。沒有任何 App 能對此作出承諾。
加密如何運作
- 路徑。你在蜂巢上畫過的格子順序(至少八格,不可重複)就是輸入。
- Argon2id。該輸入經 Argon2id 強化,使用 64 MiB 記憶體和兩輪運算,因此每次猜測都要耗費實實在在的時間和記憶體。
- 硬體綁定。結果會與一個儲存在 iPhone 的 Secure Enclave 或 Android Keystore(可用時為 StrongBox)中的金鑰相結合。這個金鑰無法匯出,因此只有在你的手機上才能算出最終金鑰。
- 主金鑰。每個保險庫都有一個隨機的 256 位主金鑰,只以經路徑金鑰加密的形式儲存。
- 分塊 AES-GCM。內容以 1 MiB 為一塊,用 AES-256-GCM 加密。每一塊都與其所屬項目和位置綁定,因此一旦被交換、重排或截斷就會校驗失敗。縮圖、項目列表和設定也都經過加密。
沒有帳號,也沒有伺服器。你的金鑰從不離開你的手機,保險庫中的任何內容都不會發送給我們。
隱藏保險庫,以及檢查者仍可能看到什麼
在螢幕上,VaultWell 不會透露任何資訊。鎖定畫面只有蜂巢。錯誤的路徑和從未用過的路徑看起來完全一樣。沒有保險庫列表,也沒有數量。每個保險庫的設定檔案都被填充到相同大小,因此從外部無法分辨一個保險庫的選項,包括它是否為脅迫保險庫。
在儲存層面,我們想說得精確一些。每個保險庫都儲存為一個獨立的加密資料夾。能夠完全存取 App 原始檔案的人,例如對已解鎖手機進行取證提取,可以數出這些資料夾的數量,也能數出有幾個保險庫設定了復原短語。他們無法開啟它們,也看不到裡面的內容,但可以推斷出存在不止一個保險庫。我們計畫減少這一點,例如加入誘餌條目,有變化時會公佈詳情。
在螢幕上
不透露任何資訊
- 只顯示蜂巢
- 沒有保險庫清單,也沒有數量
- 錯誤的路徑看起來就像從未用過的路徑
在原始檔案中,擁有完整存取權時
可能被數出來的
- 有多少個加密的保險庫資料夾
- 有多少個保險庫設定了復原短語
依然無法讀取的
- 任何保險庫裡有什麼
- 哪一個是脅迫保險庫
脅迫保險庫
當用路徑開啟脅迫保險庫時,VaultWell 會先刪除其他所有保險庫的金鑰檔案及其復原檔案,然後移除這些保險庫的資料夾。沒有金鑰檔案,資料就無法解密。隨後脅迫保險庫會像其他保險庫一樣開啟,螢幕上不顯示任何提示。
- 在手機上的清除是永久性的,無法撤銷。
- 用復原短語開啟脅迫保險庫不會清除任何內容。
- 存放在其他地方的備份和分享不受影響。
備份與分享
備份(.vwbackup)必須能在新手機上開啟,因此無法使用舊手機的硬體。取而代之的是,每份備份都會用 Argon2id 根據你的路徑(如已設定,還有短語)以及一個全新的隨機鹽值來鎖住保險庫的主金鑰。項目保持與儲存時完全相同的加密狀態。備份的安全取決於路徑或短語的強度,因此請妥善保管備份檔案。
分享(.vwshare)使用一個全新的隨機金鑰,由單獨的分享短語鎖住。項目會被重新加密到其中,因此接收者永遠不會得知你保險庫的金鑰。開啟次數、到期和匯出的限制由 App 執行,而不是由密碼學保證,因為沒有伺服器。拿到短語且有心之人仍然可以複製他們看到的內容。
我們不作的聲明
- 尚未完成審計。我們計畫在推出前進行一次獨立安全審計,並會公佈結果。
- 並非隱形。即使使用偽裝圖示,App 在你的手機上仍然可見,而且取證檢查可能顯示存在多個保險庫。
- 在 iPhone 上無法完全防截圖。VaultWell 能防護螢幕擷取,但 iOS 不允許 App 阻止截圖;有截圖時 VaultWell 會告訴你。沒有任何 App 能阻止別人對著螢幕拍照。
- 我們無法替你復原。如果你丟失了路徑和短語,我們幫不上忙。我們從未擁有它們。
報告問題
如果你發現了安全問題,我們非常感謝你先私下告訴我們;如果你願意,我們會註明你的貢獻。聯絡方式將在推出前公佈。