【S&P 2024】Invisible Plausibly-Deniable Storage

发表在 SP2024 的隐形的合理可否认存储,作者开创性的做了第一个真正意义上的隐形合理可否认存储系统,并首次对隐形合理可否认做了形式化的安全定义和证明。其将隐藏数据存储在 dm-crypt 用于加密公共数据的初始化向量中的思路非常巧妙, 并对向量结构做了特殊设计,解决了一些可能产生的安全问题。虽然存在一些不足,但是其工作是非常有意义的。

注:文章大部分原文翻译来自机翻,少部分作了更改,文章主要描述方案和细节,对安全性定义和证明不做过多阐述(因为符号实在是太多了)。



1.论文基础信息介绍

介绍项信息
论文题目Invisible Plausibly-Deniable Storage
发表会议S&P 2024 (CCF 网络与信息安全 A 类会议)
第一作者Sandeep Kiran Pinjala
作者单位Stony Brook University, NY, USA (纽约州立大学石溪分校)
关键词与领域Plausibly-Deniable(PD 系统)、Invisible(隐形的PD)
论文链接https://ieeexplore.ieee.org/abstract/document/10646803

2.摘要

合理可否认 (PD) 存储系统允许用户安全地隐藏数据,并在受到威胁用户提供加密密钥和密码的对手的挑战时合理地否认其存在。然而,PD 系统需要专门的软件,使怀疑 PD 系统的使用的可疑对手能够检测到它们。为了解决这个根本问题,我们引入并正式定义了合理隐形的概念,防止对手首先确定是否使用了 PD 系统。

我们开发了 INVISILINE,这是一种看似隐形的系统,能够抵御可以多次访问设备的多快照对手。为了保持不可见性,INVISILINE 使用与 Linux dmcrypt 磁盘加密子系统兼容的数据布局和编码,并将隐藏数据存储在 dm-crypt 用于加密公共数据的初始化向量中。 INVISILINE 确保由于对手快照之间隐藏数据的更改而导致的任何磁盘更改都可以使用由于定期使用 dm-crypt 而导致的公共数据的更改来合理地解释。 在存在对手的情况下,INVISILINE 使用户能够仅使用 dm-crypt 访问所有且仅公开的数据。

INVISILINE 可以安全、隐形地隐藏 1TB 磁盘上的 19GB,且不影响公共数据 I/O,写入隐藏数据的平均吞吐量为 4.5MB/s。

3.应用背景

随着政府和执法机构的虐待和限制日益增多,为人权活动家、举报人、调查记者以及普通用户和公司提供确保其数据隐私和机密性的技术已变得势在必行。例如,《云法案》[1] 允许美国和非美国政府机构强制电信公司披露存储在其位于美国和海外的服务器和数据中心上的内容[2]、[3]。其他例子包括在缅甸的检查站和过境点对移动设备进行强制检查 [4],甚至一名摄像师在离开叙利亚时将一张载有侵犯人权证据的微型 SD 卡藏在伤口中 [5]。

对静态数据进行加密对于攻击者来说是无效的,因为攻击者可以强迫用户泄露加密密钥。合理否认(PD)系统通过为用户提供隐藏敏感信息并随后否认其存在的机制来阻止这种强制,即使对手可以访问存储介质和加密密钥。 TrueCrypt [6]、Rubberhose [7] 或 Shufflecake [8] 等磁盘加密工具为只能访问用户设备一次的单快照攻击者提供存储拒绝性。但是,还存在可以多次访问设备的多快照攻击者。多重快照机会的例子包括多次穿越一个国家的边境,或者一个压迫性的政府与酒店女服务员或航空公司监控托运行李的勾结。

最近的 PD 系统还可以防御多快照对手 [4]、[9]、[10]、[11]。然而,PD 系统需要专门的软件和工件,这使得它们容易受到质疑此类工件使用情况的对手的攻击。示例包括:
(1) 特殊软件,例如 Shufflecake 工具 [8] 或 PEARL [12] 中的修改文件翻译层 (FTL),
(2) 系统特定的元数据,例如存储在磁盘上用于跟踪隐藏信息的特殊索引结构,例如,在 HIVE [9]、DataLair [10]、PD-DM [11] 中,或
(3) 非标准磁盘数据布局,例如在 DEFY [4] 或 PD-DM [11] 中。此类专门工件的存在最终会向对手揭示用户正在使用看似合理的可否认存储系统来隐藏数据。

相反,隐形 PD 解决方案将允许用户拒绝使用特殊软件写入数据。因此,隐形 PD 解决方案需要确保由于对手快照之间隐藏数据的更改而导致的任何磁盘更改都可以使用与现成软件的常规使用兼容的公共数据的更改来合理地解释。此外,攻击者应该能够仅使用此类软件成功读取设备上存储的所有且仅公开数据

4.技术背景

磁盘加密
现代操作系统具有用于执行磁盘加密的内置软件,例如用于 Linux 的 dm-crypt [13]、用于 Windows 的 BitLocker [15]、用于 MacOS 的 FileVault [16]。全盘加密软件对磁盘上除引导加载程序之外的所有内容进行加密。挂载磁盘后,一旦用户输入密码,软件就会解密磁盘内容并将其呈现给操作系统。
磁盘加密软件可以根据加密发生的位置进行分类。在基于文件系统的加密中,它发生在文件系统内部或作为堆叠在现有文件系统下方的层。例如,eCryptfs [17]和EncFS [18]在写入磁盘时对数据进行加密,并在从磁盘读取数据时对其进行解密,然后再将其传递给上层。块设备加密系统,例如 dm-crypt [13]、TrueCrypt [6] 和 Veracrypt [19],在块设备层运行,并对写入块设备的所有内容进行加密。这种方法的一个优点是,能够访问使用块设备加密系统加密的离线磁盘的对手无法解释文件系统及其内容

dm-crypt
dm-crypt [13] 是一种透明的块加密技术,在 Linux 内核中作为设备映射器目标实现。 device-mapper 是 Linux 内核中的一个框架,用于将物理块设备映射到虚拟块设备。设备映射器将数据从一个虚拟(逻辑)块设备传递到另一个块设备;数据可以在转换过程中修改。在 dm-crypt 目标情况下,修改包括加密和解密数据。 dm-crypt 建议在使用磁盘之前,应通过用伪随机数据覆盖磁盘来执行安全擦除。 [20]。

dm-integrity
dm-integrity 是一个设备映射器目标,它对底层块设备数据执行透明的读写完整性检查。 dm-integrity 为每个数据扇区模拟一个附加的数据完整性字段。 dm-integrity 目标既可以在独立模式下使用(在内部计算和验证完整性数据),也可以与 dm-crypt 一起使用(其中 dm-crypt 目标在提供实际数据的同时提供完整性数据)。在这两种情况下,都会识别磁盘完整性数据的任何不一致,并报告错误而不是返回不正确的数据。

dm-crypt 软件栈
图 1 显示了软件堆栈,图 2 显示了本工作中考虑的块设备。最底层是由n个扇区组成的实际物理设备。 dm-integrity 目标是构建在物理设备之上的逻辑设备映射器目标。 dm-integrity 将保存实际数据的扇区与保存数据扇区完整性元数据(例如 IV、身份验证标签)的扇区分开。每个数据扇区都将其相应的完整性元数据存储在元数据扇区中的一定偏移处。 dm-integrity 具有确定性逻辑,可以在给定数据扇区号的情况下获取完整性元数据。
dm-crypt 目标在 dm-integrity 层之上运行,并在 dm-integrity 逻辑设备之上公开另一个逻辑设备,以存储加密数据。当 dm-crypt 从 dm-integrity 查询数据扇区时,它会接收数据和完整性元数据。然后使用元数据来解密和验证数据。相反,当 dm-crypt 将数据写入扇区时,它需要向 dm-integrity 提供数据和完整性元数据。文件系统(例如EXT4)挂载在dm-crypt逻辑块设备之上,用于存储文件和目录,见图2。
在这里插入图片描述

在这里插入图片描述
cryptsetup
cryptsetup [21] 是一个用于创建和管理基于 dm-crypt 的设备映射器映射的实用程序。它支持 Linux 统一密钥设置 (LUKS) [22] 扩展来存储所有设置信息并管理密钥。用于保护加密块设备的主密钥可以作为密码存储或存储在密钥文件中。 cryptsetup 支持不同的加密密码和哈希值,并依赖于内核加密后端功能。要使用 cryptsetup,需要使用 LUKS 标头设置设备,并且需要对主密钥进行加密。与 cryptsetup 一起使用的密码指定所需的分组密码和 IV 模式。

磁盘加密模式:磁盘被分为独立加密的扇区,例如 512 或 4096 字节长。为了确保机密性,磁盘加密软件需要确保所有加密扇区都无法区分,即使明文中出现重复也是如此。这排除了ECB模式。由于扇区大小大于标准加密算法(例如 AES)的块大小,因此需要使用链接模式。然而,CBC模式容易受到延展性攻击[23],而CTR模式在密钥和计数器重复时容易受到攻击。像 AES-XTS 这样的可调整密码通过包含一个调整参数来防止此类攻击,该调整参数利用扇区号并为块变换的每次调用提供显式可变性。

使用 LUKS 设置 dm-crypt 设备的默认密码是 aes-xts-plain64,它在加密期间使用扇区号作为初始化向量 (IV)。因此,相同的扇区数据总是使用相同的密钥产生相同的加密内容,这可能会揭示输入数据中的模式。这项工作依赖于 aes-xts-random 模式,其中 IV 是伪随机生成的。 这种模式避免了上述问题,但代价是需要额外的空间(每个扇区 16 字节)来保存 IV。在第 8 节中,我们讨论使用此模式对 INVISILINE 隐形的影响。我们假设 aes-xts-random 模式已被相当大的 dm-crypt 用户子集采用,例如,因为它以较小的开销为代价提供了更好的安全性。即使只有1%的dm-crypt用户采用了随机模式,INVISILINE也能实现隐形。随机模式已经实现的事实表明情况确实如此。

5.模型

合理的隐形要求

非正式地说,如果系统满足以下条件,则写入公共和隐藏数据的系统将提供合理的不可见性:

  • 合理的否认性。对磁盘的任何更改(包括对隐藏数据的更改)都可以仅使用对公共数据的更改来合理地解释。
  • 使用现成软件的可读性(OTSS 可读性)。磁盘状态应该足以仅使用现成的软件成功读取所有且仅写入的公共数据。
  • 公共数据互不干扰。存储和修改隐藏数据不应导致公共数据发生更改。

直观地说,看似合理的隐形意味着设备上存储的数据无法用于确定用户是否使用除现成软件之外的任何内容编写数据。然而,任何使用现成软件写入磁盘的人都会无意中覆盖一些存储的隐藏数据。

威胁模型

攻击者可以捕获设备快照。进一步:

  • 单快照与多快照。单快照和多快照对手都值得关注。单快照攻击者最多可以检查一次设备,而多快照攻击者可以在多个时间点检查并记录设备状态。
  • 会话中快照。在运行时、会话期间,攻击者无法拍摄快照或监视 CPU、RAM、I/O 等。
  • 软件检查。对手可以检查设备D上的数据,但不能检查用于存储数据或系统日志的软件。
  • 访问原始状态。攻击者可以使用标准设备 I/O 接口来读取数据,但无法访问基底和/或设备特定的底层状态,例如 SSD 上的原始闪存芯片地址空间。第 5 节中包含理由和详细信息。

P-INV 游戏

该处符号过多,建议直接看原文,就是形式化的定义出了隐形 PD,并与IND-PD做了对比。

6.方案

6.1 概览

INVISILINE 扩展了设备映射器 dm-crypt 目标 (§ 2)。由此产生的 dm-crypt-hidden 目标(参见图 3)实现了不可见性,同时以合理的可否认性存储数据。 INVISILINE为每个物理设备向上层暴露两个逻辑块设备,一个用于存储隐藏数据,另一个用于存储公共数据。逻辑隐藏块设备能够存储和访问隐藏数据,而逻辑公共块设备则存储公共数据。 以加密格式存储数据。会话中隐藏设备和公共设备上的所有操作都映射到同一 dmintegrity 逻辑设备,从而映射到同一物理设备。

系统架构:INVISILINE 有两个为物理设备实例化的 dm-crypt 目标实例(隐藏和公共)。这些实例共享数据结构和密钥,例如公钥 Kp 和隐藏密钥 Kh。两个 dm-crypt 实例都在映射到底层物理设备的 dm-integrity 逻辑设备之上运行。隐藏数据被嵌入到与写入公共数据的物理扇区相关的 IV 中。
在这里插入图片描述
INVISILINE 将加密的隐藏数据存储在底层物理层提供的完整性元数据空间中。具体来说,INVISILINE 将隐藏数据存储在用于加密公共数据扇区的 IV 中。 INVISILINE 机会性地利用用户在会话中对公共数据的实际写入作为看似合理的可否认的借口来重新计算要写入隐藏数据的公共数据块的 IV。由于 INVISILINE 中的 IV 是伪随机的,因此对手无法区分 IV 和加密的隐藏数据。

由于 INVISILINE 不控制在会话中修改哪些公共数据扇区,因此隐藏数据有可能与任何已更改公共数据扇区的 IV 相关联。因此,INVISILINE 维护一个 ATM 表,用于将逻辑隐藏扇区映射到物理扇区。

用户会话: INVISILINE 用户在显式会话期间使用其设备,请参阅 (§ 3.1)。在每个会话开始时,用户安装 INVISILINE 并安装公共和隐藏逻辑设备。在每个会话结束时,为了保持不可见性,用户卸载设备、卸载 INVISILINE 并擦除易失性内存以及缓存和卸载在会话开始时安装的所有模块。然后用户安装普通的 dm-crypt 模块。

逻辑和物理扇区:下面,物理扇区表示 dm-integrity 逻辑设备寻址的扇区,逻辑扇区表示上层文件系统层与 dm-crypt 通信时使用的扇区,见图 4。对于公共数据,逻辑扇区号是与物理扇区号相同。然而,隐藏数据存储在物理扇区的IV中,每个物理扇区最多可存储16字节的隐藏数据。
INVISILINE 在内存中维护将逻辑隐藏扇区映射到物理扇区的 ATM 表。为了在突然发生故障后重建此表,INVISILINE 还会隐式存储此表以及隐藏数据

存储系数: INVISILINE 对逻辑设备和物理设备都使用 512 字节的扇区大小。那么,512字节的逻辑隐藏扇区需要至少32=(512/16)个物理扇区的存储因子f。即一个逻辑隐藏扇区中的数据存储在f个物理扇区对应的IV中,见图4。因此,为了读写一个隐藏扇区,INVISILINE读写f个物理扇区。我们稍后会展示,由于需要使用隐藏元数据和隐藏数据填充 IV,因此存储系数会增加。然而,存储系数是一个重要的设计因素,因为它决定了磁盘上可以存储多少隐藏数据(有关确切值,请参阅第 7 节)。

隐形的、合理的、可否认的存储: INVISILINE 使用的磁盘上的数据布局和编码与现成软件 (OTSS)(例如 vanilla dm-crypt)使用的数据布局和编码没有区别。此外,INVISILINE 存储的公共数据可通过 OTSS 访问。更具体地说,如果 INVISILINE 用于在磁盘上存储隐藏数据和公共数据,则当卸载磁盘并卸载 INVISILINE 时,用户仍然可以使用 vanilla dm-crypt 读取公共数据。

6.2 INVISILINE 要求和影响

由于INVISILINE 存储隐藏数据的方式,除了§3.2 的要求外,还需要满足以下条件:

  • 覆盖公共数据写入。系统依靠用户的公共数据写入操作为隐藏数据的写入提供掩护。
  • 可解释的重新加密。会话期间未修改的公共部门不应因隐藏数据的更改而重新加密。
  • 会话中公共数据写入。对于每个会话,需要记住公共数据更改,以便稍后用作隐藏写入的覆盖:隐藏数据的未来更改可以映射到会话内修改的公共部分。
  • 隐藏数据互不干扰。存储和修改公共数据不应导致隐藏数据的更改。请注意,这与第 3.2 节中讨论的公共数据不干扰不同。前者在游戏中捕获,后者我们在第 5 节中证明。
  • 安全互不干扰。在用于加密公共数据的 IV 中嵌入隐藏数据不应破坏加密安全性。 •
  • 逻辑到物理扇区映射。来自逻辑隐藏扇区的数据可以存储在任何公共扇区的 IV 上。因此,逻辑到物理扇区映射需要在会话之间保留。

对于第一个要求,我们注意到诚实的磁盘包含许多来自不断变化的文件的真实公共数据写入,例如网络浏览器缓存和日志文件。此外,公共数据写入必须在隐藏数据写入之前在同一用户会话期间发生。要了解为什么会出现这种情况,请考虑两个快照之间仅存在隐藏数据更改的场景。如果单独修改 IV,即使用修改后的 IV 重新加密相应的公共数据部分,对手也会观察到公共数据没有改变。因此,对 IV 中存储的隐藏数据的任何写入都必须伴随着对相应公共扇区中写入的公共数据的更改。以下详细介绍了 INVISILINE 如何应对这些要求和挑战。

6.3 解决方案

Setup:与使用 dm-crypt 的常规磁盘加密类似,INVISILINE 使用 cryptsetup (§ 2) 设置设备来存储隐藏数据和公共数据。然而,INVISILINE 以两种方式修改 cryptsetup。首先,它为 luksFormat 操作实现了一个新选项,以设置用于访问公共和隐藏设备的密码。其次,它修改了 cryptsetup 的打开操作,以提示用户输入两个设备的解锁密码。 cryptsetup 使用公共密码生成主公钥 Kp,以加密公共数据。此外,它使用隐藏密码来导出主隐藏密钥Kh,以加密隐藏数据。

检查密码后,cryptsetup 使用 open 操作创建一个 dm-integrity 映射设备和两个 dmcrypt 映射设备映射器设备:隐藏设备和公共设备(有关实现详细信息,请参阅第 6 节)。

如果内置到标准 Linux 发行版中,INVISILINE 软件将立即为其存在提供合理性。然而,在此之前,需要下载 INVISILINE 模块(在线或从 USB 记忆棒等外部介质)并在运行时按需插入,或者需要从 USB 记忆棒启动预装 INVISILINE 的操作系统。
请注意,如果系统日志保存在磁盘上并且可以被攻击者访问,那么 INVISILINE 将无法提供看似合理的不可见性。为了解决这个问题,系统需要设置临时日志,这些日志在重新启动、模块加载/卸载、卷安装/卸载等操作后不会记录和保留,通常是在特定错误情况下抑制日志的做法

Freelist:跟踪公共数据的更改。 INVISILINE 通过在内存中维护一个空闲列表来满足跟踪公共数据写入的要求(参见第 4.2 节),该空闲列表存储有关会话中发生的所有公共写入的信息。空闲列表存储已写入的所有公共扇区的列表,其 IV 不包含隐藏数据或包含隐藏数据的陈旧版本(请参阅下面的版本号段落)。其中一些公共部分可能至少被加密两次(参见第 8 节):一次在公共写入期间使用伪随机 IV,然后在隐藏写入期间再次使用隐藏数据作为 IV。可以存储隐藏的数据,而不会在下一个快照时引起怀疑。 INVISILINE 在 dmcrypt 中为其管理的每个物理磁盘维护空闲列表。该列表将在每次会话结束时删除。这避免了使用对手可能在会话之间拍摄的快照中记录的公共部分。需要考虑的一个关键点是,**INVISILINE 利用通过常规用户活动生成的公共写入,并且不强制用户创建显式公共写入来存储隐藏数据。**但是,如果可用的公共写入不足,则会发生 IO 错误。

隐藏ATM表:为了满足第 4.2 节的逻辑到物理扇区映射要求,INVISILINE 在逻辑扇区和物理扇区之间维护一个 ATM。 ATM中的每个条目都是一个元组(lhs, phys扇区, V erN o, d, m),其中lhs是逻辑隐藏扇区号,phys扇区是其IV存储lhs数据的f个物理扇区的起始扇区号,V erNo 是版本号,d 是布尔值,指示扇区是否已被删除,m 是布尔值,指示扇区是否在当前会话中被修改。虽然翻译表存储在内存中,但它需要跨会话保持不变。这可以通过将表显式存储在磁盘上来实现。然后,ATM 表需要在每个隐藏的写操作上更新。然而,由于表维护隐藏数据的元数据,因此对表的任何更改也需要能够合理地拒绝对手。这意味着该表不能存储在固定位置,因为这些地方的频繁变化是无法解释的。
相反,INVISILINE 使用隐式方法来保存地址转换信息,即将其与隐藏数据一起存储。更具体地说,每个存储隐藏数据的IV还存储其所属的逻辑隐藏扇区号(lhs)。隐藏数据和该元数据使用主隐藏密钥 Kh 一起加密。图 5 详细说明了数据存储 IV 的格式。下面我们详细介绍每个字段。
在这里插入图片描述

  • IV Offset:由于隐藏数据可以存储在任何物理扇区的 IV 中,因此每个隐藏数据存储 IV 的偏移量(见图 5)记录了 IV 在序列中的顺序。有效值介于 0 和 f − 1 之间。
  • Magic Value:为了确定 IV 是否存储隐藏数据,INVISILINE 在存储隐藏数据的每个 IV 内存储一个一字节魔法值,请参见图 5。在解密存储公共数据的扇区的 IV 时,INVISILINE 会进行比较结果中的最后一个字节与魔术值相对应。 § 5 讨论了如何减少误报。
  • 隐藏数据版本号(Version Number):当用户更新存储在f IV中的隐藏数据时,INVISILINE不能强制用户也更新存储在与IV对应的扇区上的公共数据。这是因为对手会在下一个快照期间观察到是否发生了不必要的公共数据重新加密:IV 已更新,相应的公共数据已使用新的 IV 重新加密,但公共数据没有更改。相反,当用户更新隐藏数据时,INVISILINE 会将新的隐藏数据写入空闲列表中找到的另一组 f IV。图 6(顶部和中间)说明了一个公共数据存储扇区和相应的隐藏数据存储 IV 的这一过程。
    数据更新后磁盘发生变化:
    (上)存储公共数据的物理扇区和存储隐藏数据的相应 IV。
    (中)将(顶部)更新的隐藏数据写入新的物理扇区。
    (下)更新的公共数据和 IV 存储在(上)示例的位置。
    在这里插入图片描述

这会导致 INVISILINE 存储隐藏数据的新旧版本。为了识别逻辑隐藏数据扇区的最新版本,INVISILINE 维护一个 2 字节的 V erN o,即每个逻辑隐藏扇区的版本号,并将其包含在存储隐藏数据的每个 IV 中,见图 5。攻击者无法识别查找 IV 中的版本号,因为 IV 中的所有隐藏数据和元数据在存储之前都使用主密钥 Kh 进行了加密。
INVISILINE 在每次更新逻辑隐藏扇区时都会递增 VerN o。由于 VerNo 是每个 IV 的一部分,这确保了即使隐藏数据保持相同,包含隐藏数据的 IV 也不会相同。 VerNo 确保用于加密公共数据的 IV 不会被重复使用,请参阅“安全不干扰”要求(第 4.2 条)。我们稍后将详细介绍 INVISILINE 过程,以确保内存中的 ATM 表存储每个逻辑隐藏扇区的最新 VerNo,即使在突然出现设备故障的情况下也是如此。

Public Writer Counters:当用户更新存储在对应 IV 存储隐藏数据的扇区中的公共数据时,会发生什么?普通的 dm-crypt 将生成一个新的伪随机 IV 并用它来重新加密更新的公共数据。这将删除隐藏的数据。为了保留隐藏数据,同时与普通 dm-crypt 无法区分,INVISILINE 还需要更新隐藏数据。然而,用户不太可能同步公开数据和隐藏数据的更新。因此,INVISILINE 在每个隐藏数据中存储一个 2 字节公共写计数器 (PWC)。存储 IV,请参见图 5。每次更新公共数据时,INVISILINE 都会解密 IV。如果它存储隐藏数据(参见魔法值),它会在重新加密 IV 之前递增 PWC 并使用新的 IV 重新加密更新的公共数据。 图 6(顶部和底部)说明了此过程。这确保了一旦 IV 被重新加密,它将被认为是随机的并且与之前的 IV 值无法区分。

Dirty List:频繁修改的扇区(无论是隐藏扇区还是公共扇区)可能会溢出 2 字节版本号 VerNo 和公共写入计数器 PWC。INVISILINE 通过在每个会话最多递增这些计数器一次来避免这种情况。INVISILINE 使用内存中的 ATM 表来避免版本号溢出。更具体地说,当在会话期间第一次修改逻辑隐藏扇区时,其数据被移动到一组新的物理扇区。然后,ATM表中隐藏扇区的条目被更新为指向新的物理扇区,其VerNo 值递增,并且其修改位m设置为真。在会话中该逻辑隐藏扇区的后续更新期间,隐藏数据更新不会移动到其他物理扇区,并且VerNo 值不会递增。这是有效的,因为 (1) 攻击者无法在会话期间访问设备,(2) 在下一个快照期间,用户可以通过对隐藏数据的 IV 中的新物理扇区进行更改来证明隐藏数据更新的合理性。

为了避免快速增加 PWC 并快速溢出的风险,INVISILINE 在内存中维护了当前会话中写入的所有公共扇区的脏列表,其 IV 存储了某些隐藏数据的最新版本(即活动版本)。当公共写入发生在其 IV 存储活动隐藏数据的物理扇区上,并且该物理扇区不在脏列表中时,INVISILINE 递增 IV 的 PWC,重新加密 IV,然后使用更新的 IV 重新加密公共数据。写入扇区数据后,将扇区号添加到脏列表中。然而,如果物理扇区存在于脏列表中,INVISILINE 使用相同的 IV(不增加 PWC)来加密新的公共数据。这确保了 PWC 在每个会话中仅递增一次。如果物理扇区不再保存活动隐藏数据(即逻辑隐藏扇区的最新版本),则该物理扇区将从脏列表中删除。

存储系数(Storage Factor):概述的 IV 格式将每个 IV 的隐藏字节数减少到 6 个字节。因此,存储因子 f (即存储单个隐藏扇区所需的公共扇区数)增加到 ⌈512/6⌉ = 86。INVISILINE 通过仅将逻辑扇区号存储在 f 的第一个 IV 中来减少物理扇区的数量。图 5 分别显示了存储隐藏扇区数据的第一个 IV 和序列中剩余的 f-1 个 IV 的 IV 格式。因此,存储因子f变为52。INVISILINE假设用于存储隐藏扇区的数据的f个物理扇区是连续的。然而,INVISILINE 也可以使用非顺序扇区,但需要更大的 ATM 表,因为每个逻辑条目将映射到多个物理条目。

接下来我们详细介绍 INVISILINE 如何对隐藏和隐藏进行操作公共数据。然后我们解释它对ATM表的重建以及它对扇区删除的支持。
写入隐藏数据:当dm-crypt-hidden接收到在逻辑隐藏扇区sn写入隐藏数据的请求时,使用写入隐藏数据函数,其伪代码如算法1所示。该函数首先搜索 ATM 表以查找逻辑隐藏扇区号的匹配条目(第 3 行)。如果条目存在并且其修改位 m 已设置,则它使用条目中映射的物理扇区。如果没有,它会扫描空闲列表,寻找 f 个扇区来存储输入的隐藏数据(第 5 行)。如果空闲列表没有 f 个可用扇区,则该函数将返回错误(第 7,8 行)(请参阅隐藏数据写入可能会失败第 4.2 节的要求)。这向用户发出信号,需要更多的公共写入才能使隐藏写入成功。

一旦识别出 f 个扇区,该函数就会继续从这些扇区读取公共数据以及 IV(第 11 行)。然后使用公钥 Kp 和相应的 IV 对公共数据进行解密(第 12 行)。然后,它使用隐藏数据构建 f IV,如图 5 所示,其中版本号递增,公共写入计数器 (P W C) 设置为 0(第 15 行和第 17 行)。然后使用隐藏密钥 Kh 和物理扇区号作为 IV 对每个 f IV 进行加密(第 19 行)。然后使用新生成的 IV 对 f 个公共扇区进行重新加密(第 21 行)并写回底层(第 22 行)。然后将(逻辑扇区号、物理扇区号、递增版本号、设置 m 位)元组添加到 ATM 表(第 23 行),并更新空闲列表以删除已分配的扇区(第 24 行)。在这里插入图片描述

读取隐藏数据:算法 2 显示了读取逻辑隐藏扇区的伪代码。 dm-crypt-hidden 首先查询内存映射以检索存储数据的起始物理扇区号(第 2 行),然后发出向 dm-integrity 层请求来自该位置的 f 个连续扇区的数据和 IV(第 3 行)。然后,它使用隐藏密钥 Kh 和物理扇区号(第 5 行)解密每个 IV,并返回结果(第 7 行)。

在这里插入图片描述

写入公共数据: INVISILINE 的 dm-crypt-public 实例接收对公共数据进行操作的请求。算法 3 显示了公共数据写入的伪代码。 INVISILINE 通过确保物理扇区 IV 中存在的隐藏数据不会在公共写入时被覆盖,提供隐藏数据无干扰(第 4.2 节)。该函数读取扇区的数据和相应的 IV(第 2 行),解密 IV(第 3 行),并检查它是否包含隐藏数据(第 4 行)。

如果 IV 包含隐藏数据,它将提取 IV 偏移字段(第 5 行),其值介于 0 和 f − 1 之间。如果 IV 的偏移量不为零,则该函数获取第一个 IV(第 7 行)。这是必需的,因为只有 f 个 IV 中的第一个存储逻辑隐藏扇区的数据,存储隐藏逻辑扇区号(参见图 5)。该函数提取逻辑隐藏扇区号并在 ATM 表中查询映射的物理扇区号(第 8 行和第 10 行)。通过将输入的公共扇区编号与映射的物理扇区编号进行比较(第 12 行),检查公共扇区是否拥有最新版本的隐藏数据。如果不匹配(即隐藏数据的最新版本映射到其他地方),该函数通过生成并存储伪随机 IV(第 13 行)并使用它来加密公共数据(第 13 行)来擦除隐藏数据的旧版本 第27行)。然后,INVISILINE 将物理扇区号添加到空闲列表(第 14 行),以便在将来的隐藏写入期间使用。然后,它将其从脏列表中删除(如果存在)(第 15 行):该扇区不再包含最新的隐藏数据。

如果 IV 存储逻辑隐藏扇区号数据的最新版本,则 INVISILINE 递增其 P C 字段(第 18 行),并将物理扇区添加到脏列表(第 20 行)。然后它重新加密 IV(第 19 行),并使用它来加密公共数据(第 27 行)。加密的公共数据与刷新的 IV 一起通过 dm-integrity 层存储(第 28 行)。请注意,在这种情况下,空闲列表不会更新。如上所述,脏列表允许 INVISILINE 每个会话仅递增 PWC 一次。
在这里插入图片描述

读取公共数据: INVISILINE 使用普通 dmcrypt 代码读取公共数据:它随 IV 一起读取物理数据,使用 Kp 解密数据并返回结果。

重建 ATM 表: INVISILINE 在内存中存储显式 ATM 表,该表将逻辑隐藏扇区映射到物理扇区。 INVISILINE 还通过将其与隐藏数据一起存储来保留此信息。会话启动后,INVISILINE 需要使用此信息来重建内存中的 ATM 映射:在映射完全重建之前,dm-crypt-hidden 无法读取和写入隐藏数据。
INVISILINE 使用多个线程并行执行此任务。每个线程向底层 dm-integrity 层发出特殊请求,仅读取元数据扇区(仅包含数据扇区 IV 的扇区),而不读取相应的公共数据。然后,它解密 IV 并使用结果的第 13 和 16 个字节来识别那些存储隐藏数据的字节(参见图 5)。当 IV 不存储隐藏数据时,线程会跳过读取接下来的 f 个物理扇区。

然而,当解密的 IV 存储隐藏数据时,线程会读取 IV 的偏移量,以检查它是否是存储逻辑隐藏扇区的 f IV 序列中的第一个 IV。这是因为只有序列中的第一个 IV 记录了数据的逻辑隐藏扇区号,见图 5。如果 IV 偏移量为 0,INVISILINE 读取逻辑隐藏扇区号和 VerNo。然后使用对应的物理扇区号向内存ATM插入一个(逻辑隐藏扇区号,物理扇区号,VerNo,d=0,m=0)元组,其中d和m是删除和修改位,分别。如果该逻辑隐藏扇区已经存在条目,则仅当其 VerNo 值小于新解密的 IV 中的值时,才会更新 ATM 条目的物理扇区和 VerNo 值。

如果 IV 的偏移量不为零,则线程发出对第一个 IV 的请求(在当前物理扇区号 - 偏移量处)并应用上述过程。一旦条目被添加到转换表后,线程会跳过后续的 f 个物理扇区。
附录 B 讨论了 INVISILINE 支持从隐藏设备中删除逻辑隐藏扇区。
INVISingle:附录 C 介绍了 INVISingle,这是针对单快照对手的优化,只能检查用户设备一次。 INVISingle 使用逻辑隐藏扇区到物理扇区的固定映射,因此无需 ATM 表。它还消除了对公共写入存储隐藏数据的依赖。

7.讨论与限制

dm-crypt 配置INVISILINE 要求 dm-crypt 配置为非默认 aes-xts-random 加密模式。虽然 INVISILINE 用户保持隐形的能力取决于使用相同 dm-crypt 配置的常规 dm-crypt 用户的数量,但该群体包括担心默认 aes-xts-plain64 引入的安全漏洞的用户(请参阅第 2 条)以及使用带有AEAD加密的随机IV模式来存储认证标签的用户。

误报: IV 的魔法值(图 5 和 9)允许 INVISILINE 和 INVISingle 确定 IV 是否存储隐藏数据。为了减少匹配时的误报 (FPR = 2^−8),INVISILINE 还会检查 IV 偏移量是否具有 0 到 f − 1 之间的值。此外,它还会获取序列中的另一个 IV 并验证它是否具有神奇值设置适当的偏移量(分别为 0 或 1),以及与第一个 IV 相同的 PWC。这将误报率降低到低于 2 ^−34。

PWC 和 VerNo溢出:如果写操作会导致 VerNo 或 PWC 计数器溢出,则 INVISILINE 将返回 IO 错误。虽然从理论上讲,INVISILINE 和 dm-crypt 之间的这种差异可以被对手利用来破坏隐形性,但该攻击需要大量时间:假设平均每天有 10 个会话,INVISILINE 需要 17.95 年才能溢出 VerNo 和 PWC。这超过了大多数笔记本电脑和服务器预期寿命的两倍[28]、[29]。

隐藏数据可能会被意外删除:如果卸载磁盘并卸载 INVISILINE,如果安装了 vanilla dm-crypt,用户仍然可以读取公共数据。但是,使用普通 dm-crypt 对公共数据进行的任何写入操作都可能会永久覆盖隐藏数据。也就是说,即使重新安装INVISILINE,被dm-crypt覆盖的IV中隐藏的数据也无法恢复。

8.相关工作

SoK: Plausibly Deniable Storage(https://arxiv.org/abs/2111.12809)提供了合理可否认知识的深入系统化。本节重点介绍与本文最密切相关的先前工作。

合理可否认的文件系统。StegFS: A Steganographic File System for Linux(https://link.springer.com/chapter/10.1007/10719724_32)介绍了隐写文件系统。后来,StegFS: A Steganographic File System(https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1260829) 为 Linux 开发了 StegFS,它实现了StegFS中提出的方法。The steganographic file system(https://link.springer.com/chapter/10.1007/3-540-49380-8_6)通过提供更有效的存储和避免散列冲突来改进以前的结构。这些早期的解决方案无法防范多快照对手。

A multi-user steganographic file system on untrusted shared storage(https://dl.acm.org/doi/abs/10.1145/1920261.1920309)设计了 ​​DRSteg,一个虚拟可重定位隐写文件系统,多个用户可以共享相同的隐藏数据,并重新定位它以确保针对多快照对手的可否认性。然而,由于 DRSteg 将可否认性归因于敏感数据的共同所有权,因此它不是单用户设备的理想解决方案。

Deniable cloud storage: sharing files via public-key deniability(https://dl.acm.org/doi/abs/10.1145/1866919.1866925)介绍了DenFS,这是一种专为云存储设计的可否认的共享文件系统,其安全性取决于在客户端计算机上临时处理数据。 DenFS 基于使用 RSA-OAEP 的公钥加密方案和 Paillier 加密方案的 Damg ard-Jurik 推广而构建。因此,DenFS 并不是隐形的。DEFY: A deniable, encrypted file system for log-structured storage(https://core.ac.uk/download/pdf/36738481.pdf) 开发了 DEFY,这是一种用于闪存设备的文件系统,它利用数据的安全删除来针对多快照对手提供合理的否认性(但不是隐形)。

合理可否认的块设备。进一步利用磁盘加密工具来支持块设备级别的合理否认。 TrueCrypt [6]、VeraCrypt [19]、Rubberhose [7]、Shufflecake [8] 或 Mobiflage [31] 等工具仅为单快照对手提供似是而非的否认性。例如,多快照对手可以通过对随机未初始化数据的无法解释的更改来推断 TrueCrypt [6] 中隐藏数据的存在。

一些解决方案通过使用不经意的 RAM (ORAM) [9]、[10]、[32] 来针对多快照对手提供合理的否认性。例如,布拉斯等人。 [9] 提出了 HIVE,这是第一个针对设备级多快照对手的 PD 解决方案,使用只写 ORAM (wORAM)。 MobiCeal [32] 通过将 wORAM 替换为与公共写入相结合的虚拟写入操作来提高性能。 MobiCeal 使用两种类型的卷(虚拟卷和隐藏)并生成虚拟写入来存储隐藏数据。 MobiCeal 不提供隐形性,因为虚拟卷和写入信号的存在试图隐藏数据。查克拉博蒂等人。 [10] 进一步构建了 DataLair,该 DataLair 通过观察公共数据的操作不需要隐藏但实际上可以用于强化否认性来改进 HIVE。

其他解决方案[33]、[11]使用日志结构文件系统[40]中使用的规范形式来将用户的逻辑访问模式与物理访问模式分离。特别是,扎克等人。 [33]开发了 ECD,将设备划分为公共卷和隐藏卷。陈等人。 [11]介绍了PD-DM,一种保留局部性的PD解决方案,它将磁盘分为数据段和映射段,映射段存储多个数据结构以进行逻辑到物理的映射。 ECD 和 PD-DM 完成的处理使它们可观察。

现有的多快照PD存储解决方案与INVISILINE的一个关键区别在于隐形性:**大多数PD解决方案,尤其是块设备级解决方案,都会修改磁盘布局和编码方案,因此需要使用特殊的软件来读取公共数据数据。**这种软件和布局的存在意味着第 3.3 节的 P-INV 游戏中的对手将无法使用 OTSS 读取快照,因此在确定挑战者的位 b 是否为 1 时将获得不可忽视的优势。

努力实现隐形PD。一些PD系统尝试隐形。 StegFS [34] 的目标是看起来像 EXT2,INFUSE [35] 的目标是看起来像 YAFFS [41],一种流行的闪存设备文件系统。 PEARL [12]秘密地将数据隐藏在公共数据的WOM代码中。不幸的是,StegFS 并不是真正为不可见性而设计的,而是对磁盘进行了一些更改,例如,删除的文件被替换为随机数据、可区分的块分配逻辑、存储的块表等。其中任何一个(以及更多)都会立即破坏看似合理的不可见性( § 3.3)。此外,INFUSE 仅适用于闪存并隐藏数据,需要硬件支持和能够精确操纵闪存单元电压的固件,而目前大多数 NAND 闪存芯片都无法实现。

PEARL 基于定制的、对手可观察的 WOM 代码,并且需要修改的文件翻译层 (FTL)。即使在用户会话结束时,PEARL 的定制 FTL 也需要保留在设备上以读取公共数据。对手可能会质疑这种定制 FTL 的使用,尽管与普通 FTL 相比,它提供的性能较低。相比之下,INVISILINE 定制的 dm-crypt 模块不需要读取公共数据,并且可以在会话结束时卸载。 INVISILINE 设计符合 Houmansadr 等人的一些直觉。 [14]将数据隐藏到现有协议提供的覆盖介质的特征中。 INVISILINE 将数据隐藏到 IV 中,用于加密 Linux 发行版中流行的 dm-crypt 磁盘加密软件存储的公共数据。使用 INVISILINE 加密的公共数据可以使用标准 dm-crypt 进行访问和解密,从而使受胁迫的用户能够否认任何其他软件隐藏的数据的存在。

9.INVISingle(单快照优化版本)

我们现在推出 INVISingle,这是针对单快照对手的 INVISILINE 优化,它只能检查用户设备一次。多个商业磁盘加密工具假设对手是单快照,例如 TrueCrypt [6]、Rubberhose [7] 或 Shufflecake [8]。
下面我们重点介绍INVISingle解决方案。单快照对手意味着最多一个用户会话。反过来,这消除了用户生成公共写入来存储隐藏数据的需要。此外,它简化了IV格式的要求,无需维护ATM表、空闲列表和脏列表,增加了磁盘上可隐藏数据的大小,并提高了访问隐藏数据的性能。下面我们详细介绍这些变化。

IV格式:INVISingle 用于存储加密数据的 IV 格式如图 9 所示。为了防止公共数据覆盖擦除相应 IV 中存储的隐藏数据,INVISingle 使用一字节幻值和两字节 P W C 来指示 IV 是否用于加密。存储隐藏数据。因此,算法 4 和 5 中使用的因子 f 为 ⌈512/13⌉ = 40。
此外,由于攻击者只能检查设备一次,因此 INVISingle 不需要维护 ATM 表。相反,它使用逻辑隐藏扇区到物理扇区的固定映射:逻辑隐藏扇区 i 映射到 f 个物理扇区 i × f 到 (i + 1) × f − 1。

在这里插入图片描述
写入隐藏数据:算法 4 显示了为逻辑隐藏扇区写入隐藏数据的伪代码。该代码由 dm-crypt-hidden 实例执行。为了确保不干扰(第 3.2 节),在每次逻辑隐藏扇区更新时,写入函数首先从扇区中提取公共数据,并使用新的隐藏数据将其重新加密为 IV。更具体地说,该函数计算与请求中的逻辑扇区号相对应的第一物理扇区号(第3行)。

然后它发出一个读取请求到这些扇区的底层 dm-integrity 层。一旦 dm-crypt-hidden 收到数据以及相应的 IV,它就会使用 IV 和 Kp 解密公共数据(第 5 行)。然后,它使用隐藏数据 PWC = 0 和魔法值(第 7 行)构造每个 f IV,并使用 Kh 和物理扇区号加密每个 IV 作为 IV(第 8 行)。然后,该函数使用生成的 IV 重新加密公共数据(第 10 行),然后使用新数据向 dm-integrity 层发出写入请求(第 11 行)。因此,在写入请求结束时,隐藏数据被更新,而不会改变相应的公共数据。

在这里插入图片描述
读取隐藏数据:算法 5 显示了用于读取存储在作为输入给出的逻辑扇区号处的隐藏数据的伪代码。该函数向相应的物理扇区发出读请求。一旦它接收到公共数据和元数据,它就会使用 Kh 解密元数据并将其返回,同时丢弃公共数据。

在这里插入图片描述
写入和读取公共数据:算法6示出了在物理扇区sn写入公共数据sd的伪代码。为了再次确保不干扰,即确保公共写入不会用随机 IV 覆盖其相应的隐藏数据,该函数首先从底层读取数据和 IV(第 3 行),并使用 Kh(第 3 行)解密 IV 4).为了避免误报,该函数还会读取其相邻的 IV(在扇区 sn + 1 或 sn − 1 处)(第 5-10 行)。然后它检查 IV 中的魔法数据和匹配的 P W C(第 13-15 行)。如果比较成功(IV 包含隐藏数据),则会增加 P W C(第 16 行)并重新加密 IV(第 17 行)。否则,它生成一个伪随机 IV(第 19 行)。然后使用生成的 IV 来加密公共数据(第 21 行)。最后,该函数使用 dm-integrity 写入加密数据和 IV(第 22 行)。 INVISingle 使用 vanilla dm-crypt 代码来读取公共数据:它随 IV 一起读取物理数据,使用 Kp 解密数据并返回结果。

在这里插入图片描述

针对单快照对手的隐形性:INVISingle 是 INVISILINE 的一种特殊情况,其中攻击者只能拍摄一个设备快照。 INVISingle 使用逻辑隐藏扇区到物理扇区的固定映射。存储隐藏数据的扇区 si 处的 IVi 具有值 val(IVi) = EKh (si, [hdj, P W C, M agic]),请参见图 9。存储在扇区 si 处的值可以是 EKp (IVi, datai),如果si 存储公共数据,如果没有写入公共数据,则存储伪随机数据(在设备 D 首次使用之前初始化时生成)。在这两种情况下,在 P-INV 游戏 (r = 1) 中具有不可忽略优势的对手可用于构造一个在区分 INVISILINE 加密函数的输出与伪随机值时具有不可忽略优势的对手。在每次公共写入扇区(其对应的 IV 保存隐藏数据)时增加 P W C 可确保用于加密公共数据的 IV 不会被重复使用。这保证了安全性非互引用。

10.顾虑

下面顾虑来自我对文章的理解,不一定正确。
1.必须依赖用户关闭系统日志,否则无法保持多快照安全。这是否符合正常的使用需求。
2.使用特殊的加密模式进一步的削弱了隐藏性。虽然可以说为了更高的安全性,但是这一点和关闭系统日志同时出现,是不是有更大的可能怀疑使用了这个软件。
3.必须等待足够的公共写入,否则会发生 IO 错误。这让软件的可用性大大的降低了,没有做到完全的互不干扰。


ATFWUS 2024-10-24

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ATFWUS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值