圖形加密:畫一個形狀如何保護你的檔案

你用手指畫出一個圖形。PBKDF2 把這個手勢轉換成保險庫金鑰,再解鎖另一把以 AES-256-GCM 保護你檔案的隨機金鑰。沒有密碼欄位,也沒有短短的 PIN 碼,只有你的圖形和刻意分層的金鑰階層。

Vaultaire 會把你在 5×5 格上畫出的形狀序列化,再用 PBKDF2-HMAC-SHA512、600,000 次迭代,以及存放在 iOS Keychain 中的全裝置鹽值處理。得到的 256 位元結果就是保險庫金鑰:它加密保險庫索引,並解開另一把隨機主金鑰,AES-256-GCM 用這把主金鑰加密檔案內容和中繼資料。

什麼是圖形加密?

多數保險庫 App 都躲在 PIN 碼或密碼後面。輸入四個數字,你的照片就出現了。聽起來夠安全,對吧?

問題在於:四位數 PIN 碼只有 10,000 種組合,電腦不到一秒就能全部試完。六位數?一百萬種組合,對現代硬體來說還是輕而易舉。即使是只用小寫字母的八字元密碼,也只有約 2,000 億種可能。這聽起來很多,直到你知道一般筆電每秒可以測試數十億個密碼雜湊值。

圖形加密的做法完全不同。你不是在欄位裡輸入字元,而是在點陣格上畫出幾何形狀。你畫出的路徑(碰了哪些點、順序如何、形狀如何)會成為密碼型金鑰衍生函數的輸入。這個結果不只是讓介面檢查而已:它必須解鎖經過驗證的加密索引,以及索引內的隨機主金鑰。

這個差別很重要。在某些 App 裡輸入 PIN 碼時,App 只檢查你輸入的數字對不對。對了就打開,而檔案本身可能主要只靠存取控制保護。Vaultaire 則是把畫出的圖形送進 PBKDF2,衍生出 256 位元的保險庫金鑰。這把金鑰必須先通過驗證並解密保險庫索引,才能解開用在檔案上的隨機主金鑰。無法辨識的圖形會顯示為空的保險庫,但底層的 AES-GCM 驗證仍能分辨金鑰是對是錯。

主要差異

以 PIN 碼把關的存取機制,可能就像擋在一堆可讀檔案前的一扇上鎖的門。Vaultaire 的圖形比較像保險箱的密碼組合:它衍生出開啟加密索引的金鑰,索引再放出保護內容的另一把金鑰。介面無法直接繞過這條加密鏈。

運作方式,逐步說明

從你的手指碰到螢幕,到你的檔案變得其他人都無法讀取,整個過程如下。

步驟 1:畫出你的圖形

Vaultaire 會顯示 5×5 的點陣格。你畫出一條連續路徑,至少連接 6 個點,且至少轉一次方向。App 會精確記錄你經過哪些點,以及經過的順序。這個序列就是你的圖形。

5×5 圖形格

Android 鎖定畫面常用 3×3 格,Vaultaire 則使用 5×5 格。這不是為了好看。二十五個位置比九個位置能畫出更多路徑、交叉、跳點和轉向。更大的理論空間有幫助,但實際安全性仍取決於你選的路徑有多難預測。即使格子能表達數十億種組合,常見的字母或簡單形狀還是猜得到。

步驟 2:由圖形衍生保險庫金鑰

你畫出的圖形會連同格子大小一起序列化,再送進 PBKDF2(密碼型金鑰衍生函數 2),搭配 HMAC-SHA512、600,000 次迭代,以及一個隨機的全裝置鹽值。鹽值不是秘密,以 WhenUnlockedThisDeviceOnly 項目存放在 iOS Keychain 中。它讓本機的金鑰衍生綁定在這台裝置上;它不是每個保險庫各有一個,也不會為人選的圖形增加熵。

加密流程
你的圖形
5×5 格路徑
→
PBKDF2 + 鹽值
金鑰衍生
→
256 位元保險庫金鑰
索引與金鑰封裝
→
隨機主金鑰
AES-256-GCM 檔案

金鑰衍生過程刻意設計得很耗費運算。PBKDF2 對每個候選圖形執行 600,000 次 HMAC-SHA512 迭代,提高猜測攻擊的成本。這不會讓低熵的圖形變成 256 位元的安全性,攻擊時間也取決於攻擊者的硬體。它的目的較窄、也可衡量:讓每次猜測都比單純的雜湊昂貴得多。

步驟 3:你的檔案被加密

第一次建立保險庫時,Vaultaire 會產生一把隨機的 256 位元主金鑰。由圖形衍生的保險庫金鑰負責加密索引並封裝這把主金鑰;它不會直接加密每個檔案。主金鑰搭配 AES-256-GCM 加密檔頭、內容、縮圖和相關中繼資料。每次使用新的 nonce,確保相同的明文在同一把金鑰下不會產生相同的密文。

GCM 模式多加了一層重要保護:驗證。它不只打亂你的資料,還會產生一個能偵測任何竄改的標籤。加密檔案只要有一個位元被改動,解密就會失敗。沒有人能在你不知情的情況下竄改你的檔案。

步驟 4:清除作用中的金鑰狀態

Vaultaire 鎖定時,會清除作用中的保險庫和主金鑰狀態,必須再解鎖一次才會再顯示檔案。保險庫開啟期間,這些對稱金鑰位元組必然存在於 App 程序中,CryptoKit 才能執行 AES-GCM 運算。Vaultaire 也會把復原資訊(包括圖形,以及以片語加密的復原信封)存放在 iOS Keychain 中一個以 AES-GCM 加密的資料庫。這和宣稱「圖形和所有金鑰副本都沒有存在任何地方」有實質上的不同。

背後的數學(白話說明)

不需要電腦科學學位,也能理解這為什麼有效。安全性取決於三個數字:可能的圖形有多少、每次猜測要花多久,以及攻擊者能猜幾次。

2256
AES 金鑰空間
5×5
格的大小
數十億
可能的圖形

熵:衡量不可預測性

熵是“這有多難猜”的專業說法。擲硬幣有 1 位元的熵(兩種結果)。四位數 PIN 碼約有 13 位元的熵(10,000 種結果)。在 5×5 格上選擇良好、連接 8 個或更多點的圖形,可以超過 30 位元的熵,也就是超過十億種可能的圖形。

圖形的熵決定了猜測攻擊的上限。PBKDF2 無法憑空產生手勢本身沒有的熵,但能讓每個候選圖形的測試成本高出許多。

金鑰衍生:讓猜測變得昂貴

PBKDF2 會對序列化後的圖形執行 600,000 輪 HMAC-SHA512。估算攻擊時間時,必須使用實際進行猜測的硬體上測得的成本:若每個完整候選圖形剛好花 1 毫秒,10 億個候選就需要 100 萬秒,單一運算單元約 11.6 天。實測成本越高,時間越長;平行硬體則會縮短時間。256 位元的輸出長度不會改變圖形搜尋空間的大小。

全裝置鹽值存放在 Keychain 中,設計上並不是秘密。裝置被扣押時,Keychain 和 iOS 資料保護可能讓提取變得更困難,但密碼學分析必須假設:取得加密檔案的鑑識人員,也可能取得鹽值。鹽值可以防止跨裝置的預先計算,但無法取代夠強的圖形。

AES-256:公開且經過充分研究的標準

AES-256 是一種強大的標準加密演算法,由 NIST 以 FIPS 197 發布。「256」指的是金鑰長度(位元)。256 位元金鑰有 2256 種可能值,多到無法暴力窮舉。所以攻擊者會改攻圖形,這也是 Vaultaire 用 600,000 次 PBKDF2 迭代強化圖形的原因。

AES-256 的安全性不靠演算法保密。但整個系統不只靠 AES 的金鑰空間保護:實際的猜測上限來自圖形的熵、PBKDF2 的運算成本,以及裝置鹽值和加密儲存周圍的保護。正確的隨機主金鑰一旦解鎖,AES-256-GCM 就能提供強大的驗證加密。

攻擊者必須克服什麼

我們來看看有人可能用哪些主要方式存取你的加密檔案、Vaultaire 如何提高攻擊成本,以及仍有哪些限制。

暴力破解:嘗試每一種圖形

PBKDF2 讓每個候選圖形都得付出 60 萬次 HMAC-SHA512 迭代的代價。這是有意義的防禦,但不保證能撐多少年:結果取決於圖形的選擇、實測的衍生速度、平行運算能力,以及鑑識人員是否已取得裝置鹽值。更長、更難預測的路徑很重要,因為 PBKDF2 提高的是猜測成本,不會產生新的熵。

指紋污痕攻擊:從螢幕讀出痕跡

在 3×3 格上,螢幕上的污痕可以大幅縮小可能圖形的範圍。在 5×5 格上,污痕只能看出碰過哪些點,看不出順序、方向或點與點之間怎麼連。組合數量暴增,讓這種方法不切實際。

偷看:在旁觀察你畫圖形

在小小的手機螢幕上快速畫出的圖形,光靠旁觀極難記住,在 5×5 格上更是如此。研究顯示,比起偷聽別人唸出的 PIN 碼或密碼,旁觀者要重現複雜圖形困難得多。

裝置扣押:你的手機被拿走

如果有人拿走你的手機,在取得所需金鑰之前,Vaultaire 的檔案內容和索引都仍是 AES-GCM 密文。App 不會儲存傳統的密碼驗證記錄,但這不代表無法離線驗證。每個加密保險庫索引的檔名都含有保險庫金鑰的截短雜湊值,而且對任一候選金鑰,AES-GCM 驗證解密也會明確成功或失敗。因此,裝置保護和圖形強度仍是威脅模型的一部分。

以驗證加密核對猜測

要用經過驗證的密文測試猜測,並不需要另外的密碼雜湊。Vaultaire 的 AES-GCM 標籤能給出高可信度的成功或失敗結果,索引檔名則提供更便宜的初步檢查。防線在於憑證的成本和不可預測性,加上 iOS 對本機資料的保護,而不是缺少驗證途徑。

選擇強圖形

加密有多強,取決於你選的圖形。以下是花最少力氣、得到最大安全性的方法。

怎樣的圖形比較強

  • 使用更多點。連接 25 個可用點中的至少 8 個。每個額外的點都會讓可能的圖形數量成倍增加。
  • 讓路徑自我交叉。會繞回、跳點或出人意料轉向的圖形,更難憑記憶或觀察重現。
  • 避免明顯的形狀。字母(L、Z、S)、簡單幾何形狀(正方形、三角形)和直線是攻擊者會首先嘗試的。
  • 用滿整個格子。只待在一個角落或沿著一條邊的圖形,浪費了可用的熵。把路徑分散開來。

應避免什麼

  • 只達最低長度的圖形。Vaultaire 要求至少 6 個點和一次轉向,但達到最低要求不代表路徑難以預測。只要你記得住,就多用一些格點,多轉幾次方向。
  • 簡單幾何形狀。L 形、鋸齒形或直對角線,是圖形版本的“password123”。
  • 每次都從同一個角落開始。關於 Android 鎖定圖形的研究顯示,大多數人從左上角的點開始。攻擊者知道這一點。

最佳選擇

連接 8–12 個點、轉向好幾次的圖形比較難猜,同時靠肌肉記憶也很容易記住。你不必像背密碼一樣背它,你的手會記住這個動作,就像它記得怎麼簽你的名字。

為什麼你可以放心

Vaultaire 的圖形加密不只是更好看的 PIN 鍵盤。你的手勢會經過真正的金鑰衍生函數處理,而且必須解鎖經過驗證的加密資料。它的強度仍取決於你選的手勢,所以 Vaultaire 結合更大的格子和很高的 PBKDF2 運算成本,而不是把 256 位元的輸出長度說成 256 位元的人為秘密熵。

你的圖形和本機保險庫金鑰不會傳送給 Vaultaire。備份開啟時(預設開啟),另一把由圖形衍生的備份金鑰會加密 CloudKit 記錄,而加密的復原清單讓復原片語能還原保險庫金鑰和備份金鑰。Vaultaire 沒有能解密這些記錄的服務端金鑰,但裝置和復原憑證仍是設計中攸關安全的部分。

你畫一個形狀,這個形狀保護你的檔案。其餘的交給數學。

常見問題

忘記圖形怎麼辦?

建立保險庫時,Vaultaire 會產生一組專屬的 9 字復原片語。PBKDF2 從這組片語衍生出復原金鑰,用來開啟裝有保險庫金鑰的加密信封。如果你的圖形和復原片語都遺失了,Vaultaire 也沒有任何伺服器端金鑰可以還原保險庫。

圖形真的比密碼更安全嗎?

在 5×5 格上精心挑選的圖形,熵值可以達到甚至超過一般密碼。優勢在於好用:人們會選弱密碼,是因為強密碼難記。圖形靠的是肌肉記憶,讓你不必刻意背誦,也能自然地使用複雜的圖形。

有人能截圖或錄製我的圖形嗎?

Vaultaire 會盡力在圖形格上遮擋螢幕截圖,並在 iOS 回報正在錄製螢幕時做出反應。iOS 沒有提供可套用在任意 App 內容上的公開安全螢幕旗標,因此這些措施能減少意外擷取,但無法保證擋下每一種擷取方式。

Vaultaire 使用什麼加密演算法?

Vaultaire 使用 60 萬次迭代的 PBKDF2-HMAC-SHA512,從圖形和一個全裝置共用的 Keychain 鹽值衍生保險庫金鑰。這把保險庫金鑰會加密保險庫索引,並封裝一把隨機的 256 位元主金鑰。AES-256-GCM 以主金鑰對檔案內容、檔頭、中繼資料和縮圖進行驗證加密。

圖形儲存在我的裝置上嗎?

Vaultaire 把包含圖形在內的復原資訊,存放在一個以 AES-GCM 加密、保存在 iOS Keychain 中的復原資料庫裡。圖形不會傳送給 Vaultaire,也不會以明文檔案儲存。保險庫開啟期間,金鑰位元組存在於 App 程序中;鎖定後,Vaultaire 會清除作用中的金鑰狀態。

Vaultaire 能存取我的加密檔案嗎?

Vaultaire 沒有任何會接收你的圖形、復原片語、解密金鑰或可讀保險庫內容的服務。加密的 iCloud 備份存放在你私人的 CloudKit 資料庫中。這條服務提供者的界線,無法在 App 版本、作業系統或裝置遭入侵時保護已開啟的保險庫。

試試圖形加密

畫出你的第一個圖形,感受檔案真正受到保護的感覺。

免費下載 Vaultaire