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 许可证下。