Shufflecake:Linux上的多重隐藏文件系统与可信否认技术

Shufflecake是一个为Linux设计的工具,支持在存储设备上创建多个加密隐藏卷,提供可信否认能力。它通过动态分配加密切片和层级密码管理,有效对抗法证分析,适用于敏感数据保护场景。

介绍 Shufflecake:Linux 上的多重隐藏文件系统与可信否认技术

今天我们很高兴发布 Shufflecake,这是一个旨在帮助那些言论自由受到压制当局或危险犯罪组织威胁的人们的工具,特别是:举报人、调查记者和压迫政权下的人权活动家。Shufflecake 是 FLOSS(自由/开源软件)。C 语言源代码已发布,并采用 GNU 通用公共许可证 v3.0 或更高版本。

Shufflecake 最初基于我们前学生 Elia Anzuoni(在 Dr. Tommaso Gagliardoni 和 Prof. Edouard Bugnion 的指导下)在 Kudelski 安全研究团队实习期间完成的 EPFL 硕士论文《隐藏文件系统的设计与改进》。

简介

Shufflecake 是一个 Linux 工具,允许在存储设备上创建多个隐藏卷,使得即使在法证检查下,也很难证明这些卷的存在。每个卷使用不同的密钥加密,分散在底层存储介质的空闲空间中,未解密时与随机噪声无法区分。即使 Shufflecake 软件本身的存在无法隐藏——因此秘密卷的存在被怀疑——卷的数量也是隐藏的。这允许用户创建可信否认的层级结构,其中“最隐藏”的秘密卷被埋在“较不隐藏”的诱饵卷之下,这些诱饵卷的密码可以在压力下交出。换句话说,用户可以通过提供解锁“诱饵”数据的密码,向强制对手可信地“撒谎”关于隐藏数据的存在。每个卷可以作为虚拟块设备独立管理,即分区、格式化选择任何文件系统,并像普通磁盘一样挂载和卸载。整个系统非常快,与裸 LUKS 加密磁盘相比,I/O 吞吐量仅略有减慢,内存和磁盘空间浪费可忽略不计。

您可以将 Shufflecake 视为 Truecrypt 和 Veracrypt 等工具的“精神继承者”,但有了巨大改进。首先,它原生在 Linux 上工作,支持任何选择的文件系统,并且每个设备可以管理多达 15 个嵌套卷,从而使这些分区存在的否认真正可信。

操作

Shufflecake 由两个组件组成:dm-sflc,这是一个内核模块,将 Shufflecake 方案实现为 Linux 内核的设备映射器目标;以及 shufflecake-userland,这是一个命令行工具,允许用户创建和管理隐藏卷。在使用用户态工具之前必须加载内核模块。目前支持仅限于 Debian/Ubuntu 及类似衍生版本,测试使用 Linux 内核 5.13 完成。

简而言之,Shufflecake 在底层设备的随机位置为每个卷分配加密切片的空间。切片是动态分配的,一旦内核模块决定需要比当前使用配额更多的空间,就会分配,并且交错排列以使法证分析更加困难。关于已用和未用切片位置的数据存储在特定于卷的“位置映射表”中,该表索引在设备开头的加密头中。没有正确的解密密钥,位置映射表和头都与随机数据无法区分,并且头中的每个槽(目前最多 15 个卷)都有一个字段,包含前一个(即“较不隐藏”)头和卷的解密密钥,从而递归链接所有卷,并允许用户使用单个密码打开所有卷。这也使得过度分配成为可能,即如果您有一个 1 GiB 的设备并在其上创建 3 个 Shufflecake 卷,默认情况下您将看到这 3 个卷每个都是 1 GiB 大小(尽管如果您尝试在所有 3 个卷中写入超过 1 GiB 的总量,您将开始收到 I/O 错误),这对于可信否认也至关重要,因为对手永远无法确定还有多少其他卷。实际上,请注意,如果某些卷未打开,则不考虑总空间分配。

用户必须首先初始化一个设备,例如物理磁盘、其中的分区或虚拟块设备(如文件支持的循环设备)。这将首先用随机数据覆盖磁盘,然后在设备开头创建加密头部分。头包含 15 个 Shufflecake 卷的元数据和分配表。用户被要求提供 N 个不同的密码(其中 N 在 1 到 15 之间)。然后,头的前 N 个部分将使用每个 N 密码加密,而其他部分将保持随机。给定密码的顺序很重要,因为它建立了从“较不隐藏”到“更隐藏”卷的层级结构。请注意,不解密就无法知道有多少卷。

然后用户可以打开给定 Shufflecake 初始化设备内的卷。这是通过仅提供 N 个给定密码中的一个来完成的,该密码解锁头中的 15 个槽之一,从而解锁分配给相应卷的设备区域。此外,解锁的槽包含一个密钥,允许解密层级结构中前一个(即“较不隐藏”)槽,从而允许递归打开所有较不敏感的卷。所有这些卷在 /dev/mapper 下显示为虚拟块设备,可以挂载、格式化并用于存储数据。

最后,用户可以使用单个命令关闭设备及其中的所有支持卷。

Shufflecake 高效:与“正常”LUKS 加密卷相比,I/O 减慢大约 2 倍,对于日常桌面使用仍然几乎不明显,并且浪费少于 1% 的可用磁盘空间。与此相比,基于 WORAM 技术的最先进可信否认解决方案,减慢范围从 200 倍到 5 倍,浪费 75% 的磁盘空间。需要相当数量的内存(每个打开卷大约 60 MiB)来管理 RAM 中的位置映射表以提高效率。当然有改进的空间,我们在第一个版本中没有太关注优化,性能在未来版本中肯定会变得更好。

未来方向

我们相信 Shufflecake 填补了 Linux 上强大可信否认解决方案的空白。当前版本仍然是一个非生产就绪的原型,因此我们建议不要将其用于真正敏感的操作。然而,我们相信未来的工作将显著提高安全性和性能,希望能为那些生活在持续危险中、可能被强制方法审讯以透露敏感信息的人们提供一个真正有用的工具。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计