Shufflecake,一个用于创建隐藏加密磁盘分区的工具包已发布

安全审计公司 Kudelski Security 发布了一款名为 Shufflecake 的工具,它允许您创建隐藏的文件系统,分散在现有分区上的可用空间中,并且与随机残留数据无法区分。 分区的创建方式使得在不知道访问密钥的情况下,即使进行取证分析也很难证明其存在。 实用程序(shufflecake-userland)和Linux内核模块(dm-sflc)的代码是用C编写的,并在GPLv3许可证下分发,这使得由于与Linux主内核不兼容而无法将已发布的内核模块包含在主Linux内核中提供内核的 GPLv2 许可证。

该项目定位为比 Truecrypt 和 Veracrypt 更先进的解决方案,用于隐藏需要保护的数据,它对 Linux 平台有原生支持,允许您在设备上放置最多 15 个隐藏分区,相互嵌套以混淆解析他们的存在。 如果Shufflecake的使用本身不是秘密,例如可以通过系统中存在相应的实用程序来判断,则无法确定创建的隐藏分区的总数。 创建的隐藏分区可以由用户自行决定格式化以适应任何文件系统,例如 ext4、xfs 或 btrfs。 每个分区都被视为具有自己的解锁密钥的单独虚拟块设备。

为了混淆痕迹,提出使用“合理否认”行为模型,其本质是将有价值的数据作为附加层隐藏在价值较低的加密部分中,形成一种隐藏的部分层次结构。 在压力下,设备的所有者可以泄露加密分区的密钥,但其他分区(最多 15 个嵌套级别)可能隐藏在该分区中,确定它们的存在并证明它们的存在是有问题的。

隐藏是通过将每个分区构建为一组放置在存储设备上随机位置的加密切片来实现的。 当分区中需要额外的存储空间时,会动态创建每个片。 为了使分析更加困难,不同部分的切片是交替的,即Shufflecake 部分不链接到连续区域,并且所有部分的切片都是混合的。 有关已用和空闲切片的信息存储在与每个分区关联的位置映射中,该位置映射由加密标头引用。 卡和标头经过加密,在不知道访问密钥的情况下,无法与随机数据区分开。

标头分为多个槽,每个槽定义自己的部分和关联的片。 标头中的槽是堆叠并递归链接的 - 当前槽包含解密层次结构中前一部分(隐藏程度较低的部分)的参数的密钥,允许使用一个密码来解密与相关的所有隐藏程度较低的部分所选部分。 每个较少隐藏的分区将嵌套分区的切片视为空闲。

默认情况下,所有 Shufflecake 子部分都具有与顶级部分相同的可见大小。 例如,如果 1 GB 设备上有 1 个分区,则每个分区对于系统来说都是 XNUMX GB 分区,并且总可用磁盘空间将在所有分区之间共享 - 如果存储数据的总大小超过设备的实际大小,就会开始抛出I/O错误。

未打开的嵌套部分不参与空间分配,即尝试填充顶级分区将导致数据在嵌套分区中被分解,但无法通过分析错误开始之前可以放置在分区中的数据大小来揭示它们的存在(它假设上层分区包含不可变数据以分散注意力并且从不单独使用,并且常规工作始终与最近的嵌套部分一起进行,该方案本身意味着维护存在的秘密更为重要数据而不是丢失该数据)。

事实上,总是创建 15 个 Shufflecake 分区 - 用户密码附加到使用的分区,未使用的分区提供随机生成的密码(无法了解实际使用了多少个分区)。 当 Shufflecake 分区初始化时,为其放置分配的磁盘、分区或虚拟块设备将充满随机数据,这使得无法在一般背景下识别 Shufflecake 元数据和数据。

Shufflecake实现具有相当高的性能,但由于开销的存在,与基于LUKS子系统的磁盘加密相比,其吞吐量大约慢两倍。 使用 Shufflecake 还会导致用于存储服务数据的 RAM 和磁盘空间的额外成本。 每个分区的内存消耗估计为 60 MB,磁盘空间为总大小的 1%。 相比之下,WORAM 技术的用途类似,但会导致速度降低 5 到 200 倍,并损失 75% 的可用磁盘空间。

该工具包和内核模块仅在内核为 5.13 和 5.15 的 Debian 和 Ubuntu 上进行了测试(在 Ubuntu 22.04 上受支持)。 值得注意的是,该项目仍应被视为工作原型,不应用于存储重要数据。 未来,我们计划对性能、可靠性和安全性进行额外的优化,并提供从 Shufflecake 分区启动的功能。

来源: opennet.ru

添加评论