因为审计,所以需要加密数据库中的数据(elasticsearch),我是加密方面的绝对菜鸟,在谷歌搜索了一下之后,我意识到在磁盘级别存在加密(当您需要输入主密码或在加载操作系统时使用 TPM 模块时),然后解密整个磁盘,第二种加密存在于文件系统级别,这是当每个文件或分区动态加密/解密数据时
还建议将 dm_crypt 与 LUKS 结合使用,但他们在某处写道,LUKS 在后台使用 dm_crypt,仅用于加密整个磁盘(即,当操作系统启动时,所有数据都被解密),并且他们在某处写道 LUKS 是在块设备级别进行加密,而 dm_crypt 会动态加密/解密文件
我需要这两种机制,或者至少需要 FS 级别的加密,我可以使用 LUKS 进行块级加密(启动后)并使用 dm_crypt 动态进行文件加密吗?
答案1
简单来说,LUKS 只是一个包装器dm-隐窝。它处理一些管道以及如何使用用户密码存储和加密强密钥。
在引擎盖下,它仍然是dm-隐窝。 这是透明加密(即所谓的动态加密/解密)。dm-隐窝仅对块设备(整个设备或分区)进行操作。它不了解文件系统甚至文件和目录等高级概念。
使用块加密,在启动时解密所有数据是不可行的。解密(读取、解密、写入)所有数据在大多数存储设备上需要数小时。不幸的是,非正式讲话很少准确。数据没有解密。相反,加密被“解锁”(意味着加密密钥已加载)。
dm-隐窝无论有没有 LUKS,都与 TrueCrypt/VeraCrypt/BitLocker 非常相似。
替代方案是基于文件的透明加密,例如 eCryptfs 或 EncFS。它可能不适合数据库文件。
答案2
我意识到在磁盘级别存在加密(当您需要输入主密码或在加载操作系统时使用 TPM 模块时),然后解密整个磁盘,第二种加密存在于文件系统级别,即每个文件或分区动态加密/解密数据
这并不完全正确。
我猜你以为磁盘级加密会一次性解密整个磁盘,而文件系统级加密会一次性解密整个文件——但这两种情况都不是真的。文件系统和全磁盘加密都是在扇区级工作的,而且它们几乎同样“即时”。
整个磁盘肯定不是在加载操作系统时解密——这样做可能需要几个小时(读取每个扇区,处理它,写回),然后您需要在关机时再次加密它,这又需要几个小时。
因此,磁盘级别的加密总是“即时”完成的——它可能看就像设备被解密,因为你可以访问所有文件,但实际上文件系统运行在解密的附加层之上个别部门一经请求。
例如,在 LUKS 中,“dm-crypt”实际上是块设备级别即时加密层 – “LUKS”部分 (cryptsetup) 仅处理密码提示、读取 TPM、解密磁盘主密钥;但随后它将密钥加载到 dm-crypt 中,从而创建一个虚拟的“解密”设备。解锁 LUKS 加密磁盘时,您始终要处理 dm-crypt 提供的虚拟“/dev/mapper/foo”设备 – 它提供即时加密和解密,而物理“/dev/sda”设备仍保持完全加密。
所以你读到的关于 LUKS 的内容并不矛盾——它是块级的和它是即时的。
(此外,在大多数情况下,您可以假设“LUKS”和“dm-crypt”指的是同一种产品。如果没有 dm-crypt,就无法使用 LUKS,尽管技术上您可以在不使用 LUKS 的情况下使用 dm-crypt,但您仍然必须执行 LUKS 所做的相同操作,因此“推荐”有点轻描淡写。通常,仅有的如果您尝试在 Linux 上打开 BitLocker 或 TCRYPT 卷,那么您使用不带 LUKS 的 dm-crypt 的时间就到了。)
分区加密是不是“文件加密”——实际上它与磁盘加密是一回事,也就是说它仍然是块级的,但仅限于单个分区的开始/结束。事实上,许多“全磁盘”加密系统加密的是单个分区,而不是整个磁盘。
例如,在 C: 上启用 BitLocker 时,只有主系统分区会被加密,而“EFI 系统分区”(以及磁盘上的任何其他分区)仍保持打开状态。这是必要的,因为真正解锁BitLocker(即读取 TPM,提示输入密码)位于 EFI 系统分区内的同一磁盘上 - 解密工具本身无法加密。同样,对于 LUKS,引导加载程序(GRUB)至少必须保持未加密状态。
(对于纯数据磁盘,可以使用 LUKS 加密整个磁盘或者单个分区 – 它并不关心,因为磁盘和分区都是基于块的设备。
简而言之,您的最后一个问题是基于错误的假设,无法正确回答。您很可能不需要这两种机制,因为它们实际上是相同的机制——同样,块设备级别的加密是在运行中,您可以使用相同的方法来实现这两者。(在 Linux 上,这通常意味着 LUKS/dm-crypt;在 Windows 上,这意味着 BitLocker 或一些昂贵的公司强制要求的东西。)
话虽如此,文件系统加密确实存在,但它使用完全不同的工具,而不是 dm-crypt。(它也更依赖于所讨论的文件系统,不能用于加密操作系统文件。)例如,Windows 上的 NTFS 通过“EFS”支持文件级加密,而一些 Linux 文件系统支持“fscrypt”。