安全架構:完整技術堆疊
Vaultaire 不依賴單一演算法或單一巧妙技巧。它使用分層密碼學架構,每個組件都有特定的職責,任何一層的失敗都不會危害其他層。以下是站在您的私人資料和外界之間的每個密碼、協定和設計決策。
沃泰爾用途 AES-256-GCM 用於跨保管庫索引、包裝金鑰、文件頭、內容、縮圖和元資料進行身份驗證的加密。 PBKDF2-HMAC-SHA512 從模式和裝置範圍內派生本機保管庫金鑰 Keychain 鹽。此保管庫密鑰包含一個單獨的隨機 256 位元主密鑰,該主密鑰透過以下方式執行檔案加密 CryptoKit 在應用程式進程中。
密碼學堆疊
Vaultaire 使用多種協同工作的加密機制,每種機制都針對特定的工作進行選擇。 PBKDF2 將人類憑證轉變為保管庫或恢復金鑰。 AES-256-GCM 保護索引、包裝器、元資料、縮圖和檔案內容。隨機主密鑰將長期文件加密與可變模式分開。 Keychain 和 iOS 當設備鎖定時,資料保護可保護設備綁定的鹽和恢復記錄。提供者持有的解密金鑰無法讓開發人員例行存取保險庫明文。
這本身並不是複雜性。每層針對不同的攻擊面。 AES-256-GCM 將機密性與認證結合,修改後的密文無法通過驗證。 PBKDF2 增加了測試每個模式或短語的成本。隨機主密鑰意味著模式變更可以重新包裝一個金鑰,而不是重新加密每個檔案。 Keychain 資料保護 保護本地鹽和恢復記錄,而應用程式仍然承認對稱加密發生在進程記憶體中。
這些層共同構成了縱深防禦架構,但它們並不全是獨立的屏障。可以根據索引檔案名稱檢查猜測的模式並 AES-GCM 身份驗證,並且受感染的解鎖設備可以觀察應用程式進程中的密鑰或明文。因此,此架構取決於憑證熵, PBKDF2 成本, iOS 裝置保護、正確的身份驗證加密處理以及 AES 本身的強度。
將 Vaultaire 的層次結構視為一組嵌套的鎖定容器。模式衍生 金庫鑰匙 打開經過身份驗證的索引。索引釋放一個包裝的隨機數 主鑰匙。此主密鑰可以保護檔案和元資料。 PBKDF2, AES-GCM, Keychain, 和 iOS 資料保護具有不同的屬性,但安全性聲明的強度取決於完整的鏈條。
AES-256-GCM:檔案加密
Vaultaire 中儲存的每張照片、影片和文件均經過加密 AES-256-GCM — 具有 256 位元金鑰的高級加密標準 伽羅瓦/計數器模式。沃泰爾也使用 AES-GCM 用於保管庫索引、文件頭、縮圖和密鑰信封。演算法和金鑰大小標準化; Vaultaire 的安全性仍取決於隨機數處理、金鑰管理、憑證強度和實作正確性。
AES-256 中的「256」指的是金鑰長度(位元)。256 位元金鑰有 2256 種可能的值。換個角度看這個數字:可觀測宇宙中大約有 1080 個原子。若每個原子都是一台超級電腦,每秒測試十億個金鑰,從宇宙大爆炸開始運行至今,它們探索的金鑰空間不到萬億分之萬億分之一。AES-256 不會被暴力破解。不是今天,不是這個世紀,不是在星球燃燒殆盡之前。
為什麼 GCM 模式很重要
AES 是一種區塊密碼,以 128 位元的塊加密資料。「模式」決定這些塊如何組合。GCM(Galois/Counter 模式)提供了更簡單模式(如 CBC)所沒有的兩樣東西:並行加密和內建認證。
認證這部分至關重要。GCM 為每個加密檔案生成一個密碼學標籤。這個標籤充當防篡改封條。若密文的哪怕一個位元被修改,無論是惡意行為者還是損壞的磁碟扇區,認證標籤就不匹配,解密就會失敗。您不會得到損壞的資料,而是得到一個清晰的訊號,表明出了問題。這個特性稱為認證加密,它防止了攻擊者透過修改加密資料來操控解密輸出的整類攻擊。
PBKDF2:金鑰衍生
Vaultaire 為不同的作業衍生出不同的金鑰。模式和設備範圍 Keychain 鹽飼料 PBKDF2-HMAC-SHA512 600,000 次迭代來產生本機保管庫金鑰。確定性模式推導產生單獨的雲端備份金鑰。標準化恢復期貫穿80萬 PBKDF2 迭代以產生恢復信封的密鑰。這些推導都不會因為輸出的長度是 256 位元而將人類憑證轉換為 256 位元的熵。
PBKDF2 如何保護您的圖形
背後的核心理念 PBKDF2 是刻意的工作。它採用序列化模式或規範化短語並運行數十萬個 HMAC-SHA512 迭代。合法用戶在解鎖或恢復嘗試期間支付一次該費用。儘管並行硬體和實現選擇決定了真實的猜測率,但攻擊者為每個候選人支付費用。
Vaultaire 配置 PBKDF2 對於模式派生鍵,可進行 600,000 次迭代。這使得每次猜測都更加昂貴,但是負責任的攻擊估計必須說明測量的每個候選人的時間和硬體假設。如果每個候選人恰好 1 毫秒,則 1,000,000,000 次連續猜測大約需要 11.6 天,而不是幾年。 256 位元結果不會擴展可預測模式的熵。
本地模式衍生使用裝置的一種加密隨機鹽,儲存為 WhenUnlockedThisDeviceOnly Keychain 項目。鹽不是秘密的,並且由該設備上的保管庫共享。它可以防止為一台設備構建的表直接應用到具有不同鹽的另一台設備,但它不會迫使攻擊者對同一設備上的每個保管庫重新開始。
AES-256-GCM:元資料保護
僅加密檔案內容是不夠的。檔案名稱、建立日期、縮圖尺寸和保險庫結構都是元資料,而元資料可能和資料本身一樣具有揭示性。名為「tax-return-2025.pdf」的檔案,即使內容是加密的,也向攻擊者準確揭示了裡面是什麼。時間戳顯示您何時使用了保險庫。縮圖大小揭示了某東西是照片還是影片。
Vaultaire 透過以下方式保護此元數據 AES-256-GCM,不是ChaCha20。檔案名稱和 MIME 類型被編碼到加密的文件頭中。加密的保管庫索引包含文件記錄、日期、大小資訊、儲存佈局和包裝的主密鑰。縮圖資料也使用隨機主密鑰進行加密。
為什麼要對元資料進行身份驗證加密?
元資料需要完整性和機密性。 AES-GCM 為每個加密值產生一個身份驗證標籤,因此 Vaultaire 可以拒絕修改的標頭、索引、縮圖或信封,而不是接受攻擊者控制的明文。該設計故意在這些儲存格式中使用一種經過身份驗證的加密結構,而不是聲稱實現未提供加密多樣性。
相同的密碼並不意味著盲目地重複使用相同的金鑰或隨機數。保管庫密鑰保護索引並包裝隨機主密鑰;主密鑰保護檔案材料。 CryptoKit 使用新的隨機數字來建立經過驗證的密封盒,而 Vaultaire 的流格式為每個有序列區塊衍生一個獨特的隨機數。相關保證來自金鑰分離、隨機數字規則和身份驗證,而不是來自第二個元資料密碼。
零知識架構
這是一個值得對任何安全應用程式提出的問題:若其背後的公司被入侵、被傳票或乾脆變得惡意,會發生什麼?
對大多數應用程式來說,答案令人不安。它們持有您的資料、您的金鑰,或兩者都有。法院命令迫使它們交出。資料洩露暴露了它。流氓員工存取了它。應用程式的安全性只有公司的運營安全那麼強,而歷史表明公司定期被入侵。
Vaultaire 不運作接收您的模式、秘密短語、解密金鑰或可讀保管庫內容的帳戶或儲存服務。加密和解密發生在裝置上的應用程式進程中。當 iCloud 備份已啟用,應用程式將經過身份驗證的密文發送到您的私人 CloudKit 資料庫而非 Vaultaire 控制的保管庫服務。
零知識在實踐中的意義
如果執法機構向 Vaultaire 發出傳票,要求保管庫明文,則該公司不持有解密所需的模式、復原短語、保管庫金鑰、備份金鑰或主金鑰。加密的 iCloud 記錄存在於使用者的 CloudKit 私人資料庫。然而,在設備上,恢復材料以加密形式保存 Keychain 資料庫和對稱金鑰存在於應用程式記憶體中,而 CryptoKit 加密或解密開放的保管庫。
此提供者邊界是一種架構屬性,而不是客戶端環境的每個部分都位於信任模型之外的承諾。 Vaultaire 不持有伺服器端解密金鑰,它可以將其用於例行保管庫復原。附帶的應用程序, iOS、解鎖的設備和加密實現仍然可以處理可讀數據,並且必須相應地受到信任。
Vaultaire 的提供者邊界從正常設計中刪除了公司持有的解密金鑰。這減少了 Vaultaire 本身的違規行為可能暴露的風險。它並沒有消除信任已發貨客戶端的需要, iOS、設備狀態或記錄的密鑰層次結構的實作。這些界線應該單獨評估,而不是變成一個絕對的承諾。
Keychain 和應用程式進程邊界
蘋果的 Secure Enclave 可以保護支援的私鑰並參與部分平台安全架構,但其公共 API 不接受任意 PBKDF2-派生對稱金鑰並執行 Vaultaire 的 AES-GCM 協處理器內的檔案操作。因此,Vaultaire 並未將其保管庫密碼描述為 Secure Enclave AES。
Vaultaire使用普通 iOS Keychain 隨機設備鹽、加密復原資料庫以及保護該資料庫的隨機金鑰的通用密碼項。這些項目使用 WhenUnlockedThisDeviceOnly 輔助功能類別。 Keychain 和資料保護創建了有意義的設備邊界,尤其是在手機鎖定時,但此架構不同於不可匯出的架構 Secure Enclave 關鍵。
當你畫出圖案的時候, CommonCrypto 在應用程式進程中派生保管庫金鑰。 CryptoKit 然後,Vaultaire 的 CryptoEngine 在該過程中使用對稱金鑰位元組來驗證和解密索引、解開主金鑰並處理檔案。應用程式在鎖定時會清除活動狀態,但是觀察解鎖會話的足夠特權的攻擊者與僅持有鎖定設備密文的檢查者有不同的機會。
越獄或受到其他損害的作業系統可以針對模式輸入、應用程式記憶體、解密預覽、匯出或螢幕。 Vaultaire 推薦最新的、未越獄的 iPhone 因為設計依賴 iOS 進程隔離, Keychain和資料保護。它並沒有聲稱根洩漏會使開放金庫的對稱金鑰無法存取。
每個檔案的初始化向量
當您用相同的金鑰加密兩個相同的檔案時,簡單的實作會產生相同的密文。這是個問題。看到兩個相同的加密區塊的攻擊者,在不解密任何東西的情況下就知道兩個原始檔案是相同的。在充滿照片的保險庫中,這種模式分析即使透過加密也能揭示資訊。
Vaultaire 透過為每個密文產生一個新的加密隨機數來防止確定性密文 AES-256-GCM 密封操作。文件頭和文件內容是分開密封的,大文件使用經過身份驗證的流格式,帶有隨機基本隨機數和每個有序區塊的不同隨機數。因此,同一張照片的兩個副本不會產生相同的加密表示。
隨機數字與密文一起存儲,並不秘密;他們的安全要求是給定密鑰下的唯一性。 Vaultaire 向 Apple 的加密隨機產生器請求 96 位元隨機數以進行單次加密,並將基本隨機數記錄在流標頭中。衝突風險由一個密鑰下的加密數量決定,因此該實作會產生一個新值,而不是將 96 位元大小呈現為固定的二分之一96 終身保證。
記憶體管理:清除活動鍵狀態
安全軟體中的一個常見失誤,是在敏感資料不再需要後將其留在記憶體中。加密金鑰、衍生密碼和解密資料,可以在應用程式使用完它們之後很長時間仍然留在 RAM 中。鑑識工具可以轉儲裝置記憶體並搜索這些殘留物,一種稱為冷啟動攻擊或記憶體轉儲分析的技術。
Vaultaire 限制活動金鑰狀態和解密的 UI 資料保持可用的時間。當應用程式鎖定或會話終止時,其程式碼會遵循幾個清理路徑:
- 活動保管庫狀態已刪除。 該應用程式會刪除其目前的保管庫金鑰會話,並在顯示保管庫內容之前需要再次解鎖。
- 密鑰包裝器清除擁有的緩衝區。 當這些容器被釋放時,Vaultaire 的安全位元組容器會覆蓋它們擁有的緩衝區。
- 快取的主密鑰狀態無效。 為開放索引保存的解密主金鑰將在相關鎖定和快取重設路徑上被丟棄。
- 解密的 UI 快取在 Vaultaire 的控制下被清除。 縮圖和預覽清理減少了殘留的應用程式狀態,無需聲明對 Swift 製作的每個副本的控制權, iOS,或另一個過程。
下次 Vaultaire 在鎖定狀態下開啟時,您會繪製圖案,應用程式會再次派生保管庫金鑰,然後才能驗證索引並解開主金鑰。這是會話清理,而不是聲稱每個瞬態記憶體副本都收到了可證明的多遍擦除或 Secure Enclave 關鍵參考已被破壞。崩潰原因 iOS 回收進程,但清理程式碼無法在每次突然終止後運行。
常見問題
AES-256 真的無法破解嗎?
AES-256 是一種經過嚴格分析的標準化分組密碼。沒有對正確實施的實際攻擊 AES-256-GCM 隨機 256 位元金鑰的金鑰是眾所周知的,但這並不意味著整個金庫牢不可破。憑證熵, PBKDF2 成本、隨機數處理、金鑰保管、復原、設備狀態和實施缺陷仍然是攻擊路徑。
為什麼使用 PBKDF2 進行金鑰衍生?
沃泰爾用途 PBKDF2-HMAC-SHA512 透過 CommonCrypto:模式迭代 600,000 次,恢復短語迭代 800,000 次。本地模式推導使用一種隨機的、設備範圍的鹽,儲存在 Keychain. PBKDF2 增加每次猜測的成本,但不會增加模式的熵,因此攻擊時間取決於憑證強度、測量的硬體速度和平行性。
Vaultaire 向其伺服器發送哪些資料?
沒有任何資料。Vaultaire 沒有接收您資料的伺服器。若您啟用 iCloud 備份,您的加密資料儲存在您的個人 iCloud 帳號中,在離開您的裝置之前已加密,且 Apple 不持有加密金鑰。Vaultaire 公司從不接收、處理或儲存任何使用者資料,無論是否加密。
越獄的 iPhone 會危害我的保險庫嗎?
越獄會嚴重削弱設備邊界。沃泰爾的 AES-GCM 操作在應用程式進程中執行 CryptoKit,因此當保管庫開啟時,對稱金鑰位元組存在於應用程式記憶體中。根級攻擊可以針對輸入、記憶體、螢幕截圖或解密的輸出。 Keychain 當設備鎖定時,資料保護仍然會增加障礙,但 Vaultaire 並不聲稱其 AES 金鑰在內部保持隔離 Secure Enclave.
元資料是如何加密的?
Vaultaire 不使用 ChaCha20 作為保管庫元資料。檔案名, MIME 类型、时间戳、缩略图数据、保管库结构和包装的主密钥都受到保护 AES-256-GCM 經過驗證的密文。使用經過身份驗證的結構可以在整個儲存格式中保持機密性和完整性檢查的一致性。
應用程式崩潰時我的金鑰會怎樣?
iOS 回收已終止的進程,並且下次啟動需要新的解鎖,然後 Vaultaire 才能恢復活動密鑰狀態。 Vaultaire 不創建會話範圍的 Secure Enclave AES 參考。雖然它的關鍵包裝器在釋放時清除其緩衝區並且鎖定路徑會丟棄活動狀態,但 Swift 和 iOS 不能保證在崩潰之前每個臨時副本都被覆蓋。