LifeVeil 如何保護你的檔案
這個網頁用淺白的文字說明 LifeVeil 會做什麼,以及它做不到什麼。與其讓你相信過大的承諾,我們寧願讓你了解它的限制。
重點摘要
- 所有加密都在你的手機上進行。LifeVeil 沒有伺服器,也不需要帳戶。
- 你的檔案是用隨機金鑰加密的。只有你的圖形、復原詞組或指紋能解開這把金鑰。
- 我們開發者從來不會持有你的圖形、詞組或金鑰。我們無法打開你的檔案,也無法重設你的圖形。
- 我們使用 Android 內建的加密功能和知名的 libsodium 程式庫,沒有自行開發加密方式。
- LifeVeil 尚未接受過獨立的安全性稽核。
從圖形到金鑰
你在 5×5 的格子上畫出圖形,至少連接 6 個點,且每個點只能用一次。LifeVeil 會使用 libsodium(Android 上為 1.0.20 版)的 Argon2id,將圖形轉換成金鑰。
- 設定:64 MiB 記憶體、3 次運算、1 條通道、256 位元金鑰。
- Argon2id 刻意設計得很慢,每猜一次都需要大量記憶體,因此用顯示卡猜測的成本會高出許多。
- 在我們的測試手機上,每次解鎖約需 0.6 到 0.9 秒。
- 圖形會與一組隨機的 16 位元組裝置鹽值混合。鹽值保存在應用程式中,並以存放在 Android Keystore 的金鑰加密,而這把金鑰無法從手機上複製出去。
- 應用程式不會儲存圖形的任何副本,而是透過嘗試解開金鑰來檢查圖形是否正確。
- 連續輸入錯誤圖形 5 次後,必須等待 30 秒。之後每再錯一次,等待時間就會加倍,最長 16 分鐘。
檔案如何加密
- 每個保險箱都有一把隨機的 256 位元主金鑰。你的圖形金鑰和復原金鑰只是用來「包裝」(加密)這把主金鑰。
- 檔案、縮圖以及你的項目清單(原始檔名、日期、大小)都使用 Android 內建的加密功能,以 AES-256-GCM 加密。GCM 也能偵測檔案是否被修改或調換。
- 應用程式內的檔案名稱都是隨機的。大型檔案會以 1 MiB 為單位分段加密,因此播放影片時,絕不會在儲存空間寫入未加密的副本。
- 對於 JPEG 相片,隱藏的詳細資料(EXIF,例如相機型號和日期)會另外保存,同樣經過加密。
- 應用程式鎖定時,會將記憶體中持有的金鑰全部覆寫為零。
復原詞組
- 建立保險箱時,手機的安全隨機數產生器會選出 9 個英文單字。這些單字來自兩份各有 1,024 個常用單字的清單,並以 4 種固定順序之一排列,相當於 92 位元的隨機性。無論應用程式使用哪種語言,這些單字都是英文。
- 詞組會經過相同的 Argon2id 設定,並且能單獨解開主金鑰。它不需要裝置鹽值,因此即使圖形已經無法使用,詞組仍然有效。
- 手機上會保存一份詞組副本,並經過兩層加密:一層使用主金鑰,另一層使用 Android Keystore 金鑰。重新畫出圖形後,即可在「設定」中查看。
- 當你變更圖形,或使用詞組重新進入時,會拿到一組新的詞組,舊的詞組就會失效。
指紋
指紋解鎖是選用功能。檢查指紋的是 Android,而不是 LifeVeil;應用程式從來不會收到你的指紋。主金鑰是由 Android Keystore 中的一把金鑰解開的,這把金鑰只有在剛通過高安全性生物特徵驗證後才能使用。如果有人在手機上新增指紋,這把金鑰就會失效,你必須再次使用圖形。
備份檔案
- 備份是一個
.lvb檔案。其中包含你那些已經加密的項目(維持原樣),以及兩份經過包裝的主金鑰:一份對應你建立備份時畫的圖形,另一份對應你當時的復原詞組。 - 圖形那一份每次備份都會使用新的隨機鹽值,而不是裝置鹽值。正因如此,你才能在新手機上打開備份。
- 檔案的標頭受到保護,因此任何修改或調換都能被偵測出來。
- 你可以透過 Android 本身的儲存畫面選擇存放位置。檔案絕不會經過我們。
- 還原時,用備份的圖形或詞組打開檔案,接著畫出新的圖形,並取得新的復原詞組。
應用程式內的其他保護措施
- 所有畫面都會封鎖螢幕截圖、螢幕錄影,以及最近使用的應用程式清單中的預覽畫面。
- 根據預設,只要離開應用程式就會立即鎖定。你也可以改選 30 秒或 1 分鐘。
- Android 本身的雲端備份和手機間資料轉移不包含 LifeVeil 的資料,請改用備份檔案。
- 應用程式不會要求存取位置資訊、聯絡人或「所有檔案」的權限。
- 圖案錯誤時顯示空的空間。畫出無法開啟任何空間的圖案時,會開啟一個空的空間而不是顯示錯誤,逼你開啟應用程式的人無法知道還有什麼。錯誤次數照樣記錄,入侵者照片照樣拍攝,等待時間也照樣適用。可以在設定 > 安全性 > 圖案錯誤時顯示空的空間中關閉。
AI 與猜測圖形
- AI 無法跳過運算。每次猜測仍然必須以 64 MiB 記憶體執行 Argon2id。AI 無法破解 Argon2id 或 AES,所以每次猜測的成本都不會降低。
- AI 能改變的是猜測的順序。它可以學習人們偏好的形狀(字母、方形、常用的起始角落),並優先嘗試這些圖形。它也能協助從他人在你身後偷拍的影片,或螢幕上的指紋油漬,判讀出你的圖形。
- 因此,防禦重點在於圖形,而不是運算。強度指示器會針對常見形狀發出警告。圖形 + PIN 碼會再加上 4–6 位數的 PIN 碼,就算圖形被拍到也不夠。隱藏圖形軌跡則不會留下可被拍攝的線條。存放在 Android Keystore 中的裝置鹽值,能阻止在手機以外的地方進行猜測。
你應該知道的限制
沒有任何應用程式能防範所有情況。以下是 LifeVeil 的實際限制。
簡單的圖形可能被猜中
過短或常見的形狀(L、Z、一直線)可能被人從旁觀察、從螢幕上的油漬看出,或在幾次嘗試內猜中。實際上大家使用的圖形,比可能的圖形總數所暗示的還要容易猜中得多。請使用更多的點和更多的轉折。應用程式會針對非常簡單的圖形發出警告。
猜測可能需要多久
在應用程式內,每次嘗試約需 1 秒,錯誤 5 次後等待時間還會增加。但是,如果有人取得你的備份檔案,或從已 root 的手機取出裝置鹽值,就能改在電腦上猜測,而且不必等待。Argon2id 會拖慢這個過程,但圖形的可能組合遠比長密碼少。以一張高階顯示卡(RTX 4090 等級)每秒約 1,000 次猜測粗略估算:
| 猜測對象 | 可能組合數 | 所需時間(一張顯示卡) |
|---|---|---|
| 最常見的 10,000 種圖形 | 104 | 約 10 秒 |
| 所有 6 點圖形 | 1.28 × 108 | 約 1.5 天 |
| 所有 7 點圖形 | 2.42 × 109 | 約 28 天 |
| 所有 8 點圖形 | 4.36 × 1010 | 約 1.4 年 |
| 復原詞組(92 位元) | 4.95 × 1027 | 約 1.6 × 1017 年 |
以上為估算值,並非實測結果。圖形數量為上限值,實際使用的圖形遠少於此。硬體越多或越快,猜測速度就會等比例加快。
請妥善保管備份檔案
備份檔案不包含裝置鹽值,因此任何取得它的人都能如上所述離線嘗試圖形。請只存放在只有你能存取的地方,例如你自己的雲端帳戶,並使用較長的圖形。
已 root 或遭感染的手機
如果有人能以應用程式的權限執行程式碼(例如在已 root 的手機上,或透過擁有完整控制權的惡意軟體),就能解開裝置鹽值並離線猜測。保險箱開啟期間,金鑰存在記憶體中,可透過 root 權限或偵錯工具讀取。Android 和 Flutter 內部產生的某些副本,以及畫面上顯示的相片,無法立即從記憶體中清除。
部分資訊是看得到的
應用程式儲存空間中加密檔案的數量、大致大小,以及建立或修改的時間,都沒有隱藏。手機上安裝了 LifeVeil 這件事也無法隱藏。
空的空間只能騙過畫面
能讀取應用程式檔案的人(例如在已 root 的手機上)可以數出空間資料夾的數量,也能看到這個設定已開啟。另外,圖案錯誤 5 次後應用程式會要求等待,這表示先前的圖案什麼也沒開啟。
偽裝只會改變主畫面
- 只有啟動器上的圖示和名稱會改變。手機的「設定 > 應用程式」清單、應用程式資訊和儲存空間畫面仍會顯示 LifeVeil。
- 螢幕閱讀器仍可能念出「LifeVeil」。例如 Samsung One UI 啟動器會將實際的應用程式名稱提供給 TalkBack,應用程式無法變更這一點。
- Android 的分享選單一律會顯示實際的應用程式名稱,因此切換圖示時,LifeVeil 會從分享選單中移除。你可以重新開啟。
- Android 的權限要求會顯示實際名稱,因此應用程式會在你切換圖示前先要求權限。
- 圖示變更期間,應用程式不會傳送通知。
- 偽裝代碼(4 到 8 位數)只會顯示鎖定畫面,無法打開你的檔案。代碼以加鹽雜湊的方式儲存,但可能的組合太少,一旦有人取得該檔案,很容易就能找出代碼。
指紋是較弱的解鎖途徑
指紋解鎖會略過 Argon2id,其強度取決於手機的指紋感應器和 Android Keystore。你隨時可以在「設定」中關閉這項功能。
入侵者相片
應用程式不會播放快門聲,但在某些國家/地區(例如日本和韓國)販售的手機一律會播放。如果其他應用程式正在使用相機,或手機沒有前置鏡頭,就不會拍照。在你解鎖第一個建立的保險箱之前,這些相片會以 Android Keystore 金鑰封存。
相片詳細資料
- 對於 HEIC、PNG 和 WebP 相片,隱藏的詳細資料(EXIF)會留在檔案內,但整個檔案仍然經過加密。
- 在 Android 10 以上版本中,由於應用程式不要求位置資訊存取權,Android 會移除 LifeVeil 讀取的相片中的 GPS 位置。從相簿刪除原始檔案後,該位置資訊就會消失。
- 透過 Android 相片挑選器加入的相片,會依日期重新命名,因為挑選器不會提供原始檔名。
系統畫面開啟期間會暫停鎖定
系統畫面開啟期間(權限要求、刪除確認、相片或檔案挑選器、指紋提示),以及匯入或匯出進行中時,應用程式會暫緩鎖定。如果你已經離開應用程式,會在上述情況結束 2 秒後鎖定。
所有保險箱共用一組裝置鹽值
同一支手機上的所有保險箱都使用相同的裝置鹽值。如果有人取得這組鹽值,猜一次就能同時測試所有保險箱。攻擊單一保險箱的成本則不變。
任何應用程式都無法阻止的事
有人在旁看你畫圖形,或有相機正在拍攝你的螢幕。
兩者都遺失,就沒有人能幫你
如果圖形和復原詞組都遺失了,沒有人能救回你的檔案,連我們也不行。