Shufflecake 是一種用於 Linux 的工具,它允許在存儲設備上創建多個隱藏卷,即使在法醫檢查下也很難證明這些卷的存在。
安全審計公司Kudelski Security 發布了 Shufflecake 工具集,該工具集允許在現有分區上的可用空間中建立隱藏檔案系統,這些檔案系統與隨機殘留資料難以區分。這些檔案系統的建立方式使得在不知道存取金鑰的情況下,即使在取證分析過程中,也很難證明它們的存在。
該專案將自身定位為比 Truecrypt 和 Veracrypt 更先進的解決方案,用於隱藏機密數據,提供對 Linux 平台的原生支持,並允許您在設備上放置多達 15 個隱藏分區,這些分區彼此嵌套,以混淆對其存在的分析。
使用者可自行建立隱藏分割區,並可將其格式化為任何檔案系統,例如 ext4、xfs 或 btrfs。每個分區都被視為一個獨立的虛擬塊設備,擁有自己的解鎖密鑰。
為了掩蓋痕跡,本文提出了一個「似是而非的否認」行為模型。本質上,有價值的資料被隱藏在包含價值較低資料的加密段中,形成一種隱藏的層級結構。在壓力下,裝置擁有者可以洩漏加密段的金鑰,但其他段(最多可嵌套15層)仍隱藏在其中,使得其他段難以被發現和證實。
Shufflecake 及其核心模組僅在 Debian 和 Ubuntu 系統上,使用核心版本 5.13 和 5.15 進行了測試(支援 Ubuntu 22.04)。需要注意的是,該專案仍處於工作原型階段,不應用於儲存敏感資料。
未來,我們計劃在性能、可靠性和安全性方面進行額外的優化,並提供從 Shufflecake 分區啟動的功能。
關於Shufflecake
隱蔽性是透過將每個分割區建構成一組加密段來實現的,這些加密段隨機放置在儲存裝置上的不同位置。每個段都是在分區需要額外儲存空間時動態建立的。為了增加分析難度,來自不同分區的切片是交錯儲存的。
Shufflecake 部分未鏈接到相鄰區域,所有部分的部分混合在一起。 有關已使用和免費部分的信息存儲在附加到每個部分的位置圖中,由加密的標頭引用。 卡片和標題是加密的,並且在不知道密鑰的情況下與隨機數據無法區分。
頭部被劃分為多個槽位,每個槽位定義了自己的部分及其關聯的扇區。頭部中的插槽堆疊並遞歸連結:目前插槽包含用於解密層級結構中前一個(隱藏程度較低)部分的參數的金鑰,從而允許使用單一密碼解密與所選項目關聯的所有隱藏程度較低的部分。每個隱藏程度較低的部分都將嵌套部分視為自由部分。
預設情況下,所有嵌套的 Shufflecake 分區都與頂層分區具有相同的可見大小。例如,如果在 1GB 的裝置上使用三個分割區,則每個分割區對系統而言都顯示為 1GB 的分割區,並且所有分割區共用總可用磁碟空間。如果儲存的資料總量超過裝置的實際容量,則會出現 I/O 錯誤。
未開啟的嵌套節不參與空間分配;也就是說,嘗試填充更高層級的節會覆蓋嵌套節中的數據,但不會透過分析節中可容納的數據大小來揭示它們的存在(假設更高級別的節包含不可變數據)。數據不會被隨意使用,也不會單獨使用,常規操作始終基於最新的嵌套節;該模式本身就意味著,即使會丟失數據,也必須對數據的存在保密。
Shufflecake 實現方案效能相對較高,但由於開銷較大,其效能約為基於 LUKS 子系統的磁碟加密方案的一半。此外,使用 Shufflecake 還會佔用額外的記憶體和磁碟空間來儲存服務資料。記憶體開銷估計為每個分割區 60 MB,磁碟空間佔用估計為分割區總大小的 1%。相較之下,用途類似的 WORAM 技術會導致效能下降 5 到 200 倍,並損失 75% 的可用磁碟空間。
實用程序 (shufflecake-userland) 和 Linux 內核模塊 (dm-sflc) 的代碼是用 C 編寫的,並在 GPLv3 許可下發布,由於不兼容,因此無法將已發布的內核模塊包含在主 Linux 內核中在發佈內核的 GPLv2 許可證下。