合理否認與以圖形區隔的保險庫

有人要求您打開 Vaultaire。您畫下一個圖形,就會開啟一個加密保險庫,畫面上沒有列出其他保險庫的選單。畫另一個圖形,則可開啟另一個保險庫。這讓您在介面上做到實際的區隔,但面對能檢查 App 容器的人,它有明確的限制。

Vaultaire 的合理否認功能以不同的圖形對應不同的加密保險庫索引,且不顯示列出所有保險庫的清單。一般的介面檢查看不到其他保險庫,但能存取 App 容器的人仍能估計您有幾個保險庫。

合理否認的真正含義

在最嚴格的密碼學意義上,合理否認是指:從可觀察到的儲存內容,無法證明還有其他受保護的內容存在。在一般的產品用語中,這個詞也用來指誘餌憑證,也就是只顯示一種畫面、藏起另一種。這是兩種不同的標準;Vaultaire 目前的實作達到的是介面區隔的目標,而不是資訊理論層級的否認性。

大多數保險庫應用程式只有一個密碼後面的一個保險庫。若有人強迫您開啟它,一切都暴露了。有些應用程式提供「誘餌模式」,您可以設定第二個密碼來顯示假畫面。但這些實作通常只是表面功夫。鑑識人員可以查看應用程式的資料、看到設定旗標、注意到加密資料的大小與可見檔案不符,或找到揭示隱藏層存在的中繼資料。

Vaultaire 採用以圖形定址的做法。5×5 網格上的每個有效圖形都會衍生出不同的候選保險庫金鑰。App 對這把金鑰做雜湊,算出預期的加密索引檔名;若該索引存在,就開啟並驗證它。App 不保留將圖形或使用者看到的保險庫名稱對應起來的明文登錄表,根索引檔案也放在以隨機掩護檔補足的池中。它們的數量不等於保險庫數量,但共用的儲存檔案仍讓鑑識人員能估計出來。

如果衍生出的索引存在且通過 AES-GCM 認證,您就會看到該保險庫的檔案。若不存在,Vaultaire 會顯示空白狀態,並可為這個圖形建立新的保險庫。鎖定畫面不會出現提及其他保險庫的錯誤訊息,也不會顯示清單。這種安靜的介面有助於應付隨意的檢查,但不會消除下文所述的檔案系統證據。

核心原則

傳統的保險庫 App 通常一打開就是一份容器清單。Vaultaire 則讓每個圖形只對應一個加密索引。操作介面的人只會看到被選中的保險庫,看不到其他保險庫的目錄。檢查檔案系統的人看得更全面,仍能從共用的儲存檔案估計有多少保險庫存有檔案。

底層運作方式

技術基礎是把圖形衍生的定址方式與認證加密結合。不同的圖形會產生不同的候選金鑰和檔名。AES-GCM 再提供明確的完整性檢查:正確的金鑰能通過加密索引的認證,錯誤的金鑰則會失敗。這個認證結果有助於安全,但也代表被複製的資料可用來離線驗證猜測。

不同的圖形,不同的金鑰

您畫下圖形時,Vaultaire 會將點的順序和網格大小序列化,再搭配存放在 Keychain、全裝置共用的隨機鹽值,執行 600,000 輪 PBKDF2-HMAC-SHA512。這個函數會輸出 256 位元的保險庫金鑰。不同的圖形應會產生互不相關的金鑰,但這項憑證的安全性仍受限於圖形被猜中的難易度。輸出是 256 位元,不代表人畫的圖形就有 256 位元的熵。

每把金鑰只開啟自己的索引

Vaultaire 把每個保險庫的檔案對照表和經包裝的隨機主金鑰,存放在以 AES-256-GCM 加密的索引中。您畫下圖形時,App 會衍生候選保險庫金鑰,並檢查對應金鑰指紋的檔名。若檔案存在,認證解密只會成功或失敗;AES-GCM 不會產出被接受的無意義明文。若沒有任何有效索引被開啟,介面會顯示空白狀態,不會列出其他保險庫。

沒有明文的保險庫總目錄

Vaultaire 沒有一張讓使用者看到、把圖形對應到可讀保險庫名稱的資料表。一般的解鎖流程只透過衍生金鑰找到一個索引。在磁碟上,每個保險庫都有一個「vault_index_<locator>.bin」根檔案,放在以每 64 個為一組、並用隨機掩護檔案補滿的檔案池中。所有保險庫的頁面和 arena 共用一個儲存資料夾,檔名都是隨機的,因此從檔名看不出檔案屬於哪個保險庫。定位符不會透露它來自哪個圖形。掩護用的 arena 讓 arena 數量維持在固定級距,但每個存有檔案的保險庫至少會用到一個 arena,因此鑑識人員仍能從 arena 數量、檔案時間和總用量,估計有多少保險庫存有檔案。

合理否認流程
圖形 A
您的真實圖形
→
金鑰 A
衍生金鑰
→
保險庫 A
您的私人檔案
圖形 B
誘餌圖形
→
金鑰 B
不同的金鑰
→
保險庫 B
無害的檔案

兩個保險庫同樣真實,都用相同的演算法加密,產生的加密輸出也屬同一種。沒有任何旗標、標記或中繼資料把其中一個標成「真實」、另一個標成「誘餌」。從數學上看,兩者完全相同。

誘餌保險庫策略

合理否認只有在您有東西可以拿出來給人看時才有效。空的保險庫很可疑。明顯沒有值得保護的內容的保險庫也很可疑。最強的防禦是一個看起來正是有人預期會找到的保險庫。

設定您的誘餌

選一個第二圖形,要是您在壓力下也能迅速、自然畫出的。用它建立一個保險庫,放入使用保險庫 App 的人會存放的合理內容:例如幾張您不想公開但並不敏感的個人照片、幾份財務文件、一些筆記。內容要可信,最好還有點難為情,剛好讓翻看您手機的人以為自己找到了您想藏的東西。

讓它看起來可信

好的誘餌保險庫有幾個特點。檔案數量要合理,不能太少(空得可疑),也不能太多(何必保護那麼多平凡的內容?)。這些檔案應該足夠新,暗示有在使用。理想情況下,內容應該提供一個合理的理由,說明您為什麼要安裝保險庫應用程式。

只能操作已解鎖介面的人,會看到被選中的保險庫,但看不到保險庫選擇器,這能減少隨意檢查時的曝光。能存取檔案系統的人則可以估計有多少保險庫存有檔案,也可能知道本機有不只一個保險庫,即使他們仍無法把索引對應到圖形,也讀不到內容。

在壓力下

如果您被迫解鎖裝置,就畫誘餌圖形。保險庫打開,檔案出現。在一般介面中,找不到隱藏選單或保險庫清單。拿著您手機的人只會看到一個已解鎖的保險庫。這能讓您在隨意檢查時的交代前後一致,但檔案系統檢查仍可能顯示還有其他保險庫存有檔案。

除非畫出它的圖形,否則您的敏感保險庫不會出現在介面中,也沒有藏在某個隱藏選單裡。但它的加密索引仍存在於 App 容器中,因此不應把這項功能說成能抵擋所有形式的強制揭露或鑑識分析。

精確界定安全邊界

Vaultaire 對加密內容可以做出有力的保證,對介面則只能做出較有限的保證。AES-GCM 保護索引及其檔案的內容;以圖形定址的路由讓其他保險庫不出現在可見的解鎖流程中。但這兩項特性都無法阻止能讀取 App 容器的人估計有多少保險庫存有檔案。

無
可見的保險庫選擇器
60 萬
PBKDF2 每次猜測輪數
1
每個保險庫的加密索引

加密內容維持機密

只要金鑰和 nonce 處理得當,AES-256-GCM 的設計就能隱藏明文並偵測竄改。鑑識人員可以從名稱和位置認出 Vaultaire 的索引與 blob 檔案,但沒有相關金鑰,就讀不到受保護的檔案對照表、經包裝的主金鑰、檔名、中繼資料、縮圖或檔案內容。

保險庫數量可被估計,但沒有明文的圖形對照表

儲存檔案的數量能讓鑑識人員估計有多少保險庫存有檔案。檔案系統無法提供的,是把根檔案的指紋對應回原本的圖形、使用者看到的保險庫名稱或解密內容的明文對照表。這是一道有用的邊界,但不等於數量被隱藏。

離線驗證猜測是可行的

複製了裝置鹽值和加密 App 資料的攻擊者,可以從猜測的圖形衍生出候選金鑰。對應的索引指紋會告訴攻擊者是否有相符的檔名,AES-GCM 認證解密則能以極高的把握確認猜中與否。PBKDF2 讓每次猜測的成本更高,但無法消除這種離線測試,也不會替弱圖形增加熵。

空白狀態能做到什麼

在鎖定畫面上,Vaultaire 不會顯示「圖形錯誤」,也不會列出還有哪些保險庫。不相符的圖形只會進入空白或建立保險庫的流程,因此只能操作介面的人拿不到保險庫清單。但這項呈現上的好處,不能延伸套用到已複製並分析底層檔案的攻擊者。

請勿將此視為法律建議

強制揭露的相關法律因司法管轄區和個案情況而異。Vaultaire 的介面無法決定主管機關能推斷、要求或證明什麼,而儲存檔案的數量本身就可能顯示本機有多個保險庫。請就您的情況諮詢合格律師,不要把產品功能當成法律結論。

誰需要合理否認

您可能以為合理否認只和間諜、吹哨者有關。事實上,數以百萬計的普通人都會遇到這種處境:在脅迫下保護資訊的能力不是奢侈品,而是必需品。

記者及其消息來源

調查記者常攜帶敏感資料:消息來源的身分、外洩文件、訪談錄音。在許多國家,記者在邊境、檢查站或突襲搜查時常遭拘留,裝置也會被搜查。放著無害筆記和已發表照片的誘餌保險庫可以提供掩護,真正的保險庫則保護那些性命可能繫於匿名的消息來源。

社運人士和組織者

政治運動者、勞工組織者和人權工作者,可能身處手機會被監控的環境。不同的圖形能區隔一般使用 App 時看到的內容,但被沒收或遭入侵的手機仍能讓人估計有多少保險庫存有檔案,並讓人離線猜測圖形。作業安全必須延伸到 App 之外。

處於家暴情境中的人

記錄受虐情形的人,可能需要把敏感證據和可以安全出示的資料分開。對只能操作 App 介面的人,第二個保險庫能減少曝光。但它無法保證能抵擋裝置監控、間諜軟體、脅迫或檔案系統檢查,因此身處危險的使用者應遵循當地合格支援機構的建議。

跨越國境的旅行者

各地的邊境搜查權限和旅客義務不盡相同。用一個圖形開啟 Vaultaire 不會顯示保險庫清單,但也無法讓其他加密索引完全逃過鑑識檢查。請盡量少帶敏感資料,並針對您的路線和情況取得最新的法律建議。

任何重視隱私的人

您不必身處險境也值得擁有隱私。也許您寫私人日記,也許您有不希望被人無意間看到的醫療資訊,也許您只是認為,不該讓任何拿起您手機的人看遍您數位生活的每個角落。以圖形區隔的保險庫限制了一般解鎖會顯示的內容,藉此強化介面上的隱私;但檢查檔案系統的人仍能估計您有幾個保險庫。

與其他保險庫應用程式的比較

許多保險庫 App 把安全當成存取控制問題:一組憑證把守一個可見的容器。有些產品另外加了假 PIN 碼或誘餌模式。這些功能有多強,取決於儲存設計,而不是行銷名稱;一個看得見的設定旗標,或一個獨立的誘餌資料庫,都可能洩漏另一種模式的存在。

單一保險庫的問題

單一容器的設計直接面臨脅迫問題:唯一的憑證一旦被說出,背後的所有內容就全部曝光。各產品目前的功能不盡相同,因此請評估實際的儲存與誘餌實作,不要假設某個競品一定採用固定的模式。

表面性的誘餌模式

假密碼功能可以應付隨意的檢查,但它在鑑識上的價值,取決於裝置是否儲存了可偵測的誘餌旗標、第二個資料庫或可分辨的檔案大小。在沒有公開設計或稽核的情況下,單憑名稱既不能證明它具有強否認性,也不能證明它無效。

Vaultaire 的方法在架構上截然不同

Vaultaire 把圖形區隔直接做進一般的解鎖路徑。不需要特別的假 PIN 旗標來判斷保險庫是不是誘餌;每個設定好的圖形都對應一個普通的加密保險庫。加密的根檔案和儲存檔案仍然可見,也仍讓鑑識人員能估計保險庫數量,因此這種架構上的差異主要展現在使用者介面與內容隔離上,而不是在鑑識時隱藏數量。

結果是一致的體驗:沒有保險庫被標成「真」或「假」,每個保險庫都需要各自經過認證的解鎖或復原途徑。沒有所需的保險庫金鑰和主金鑰,加密內容就無法使用。但容器的存在本身不會因加密而消失。

常見問題

我可以建立幾個保險庫?

免費方案可建立 3 個保險庫,Pro 可建立更多。每個有效圖形都能對應一個獨立的加密索引。實際限制仍來自儲存空間、可用的圖形組合、訂閱功能和裝置資源;而且即使 App 不顯示保險庫選擇器,取得您檔案的鑑識人員仍能估計您有幾個保險庫。

鑑識人員能判斷我有幾個保險庫嗎?

可以,只要鑑識人員能讀取 Vaultaire 的 App 容器。根層的「vault_index」檔案以每 64 個槽位為一組,並用隨機的掩護檔案補滿,所有保險庫的頁面和 arena 也共用一個資料夾,檔名都是隨機的,因此從檔名看不出檔案屬於哪個保險庫。鑑識人員仍能從 arena 數量、檔案時間和總用量,估計有多少保險庫存有檔案。定位符名稱不會洩漏圖形或可讀內容,Vaultaire 也並未宣稱保險庫數量能在檔案系統分析中隱藏。

若有人知道 Vaultaire 的合理否認功能怎麼辦?

知道這套設計,並不能得知哪個圖形能開啟哪個加密索引,也無法得知保險庫裡有什麼。但它也說明了限制所在:能檢查 App 容器的人可以估計有多少保險庫存有檔案,並能利用金鑰指紋和 AES-GCM 的認證結果離線測試猜到的圖形。因此,圖形強度和裝置安全仍然至關重要。

擁有多個保險庫會影響儲存空間或效能嗎?

每個保險庫佔用的儲存空間與其中的檔案量成正比。無論您有一個還是多個保險庫,加密和解密的負擔都相同。App 只會解密您所畫圖形對應的保險庫,因此其他保險庫的存在不影響效能。

Vaultaire 能被強迫透過軟體更新揭露所有保險庫嗎?

軟體更新以 App 的存取權限執行,可能列舉加密索引檔案,或改變日後的行為。沒有由圖形衍生的金鑰,它仍無法解密尚未開啟的保險庫,但軟體的發布管道本身就是信任模型的一環。高風險使用者應審視更新內容與獨立稽核證據。

若我不小心用已使用過的圖形建立保險庫怎麼辦?

如果您畫的圖形和同一裝置上既有的保險庫相符,App 會直接開啟那個保險庫。只要圖形、網格大小和裝置鹽值相同,本機金鑰衍生的結果就固定不變,因此 App 會找到同一個索引,而不會重複建立。

保護真正重要的東西

不到一分鐘就能設定好您的第一個誘餌保險庫。真正的隱私,始於清楚知道介面隱藏了什麼,以及加密儲存仍可能透露什麼。

免費下載 Vaultaire