VeraCrypt和LUKS加密的卷对数据损坏的恢复能力如何?


19

这个问题已经得到部分回答,但这仍然不是我要寻找的。请参阅更新1

我打算使用VeraCrypt和LUKS加密某些文件系统,但是我担心如果发生单个问题,我将无法再次挂载分区,从而丢失其中存储的所有数据。(由于扇区/块损坏,写操作期间断电,文件系统错误等)

此外,VeraCrypt可能已经派发了TrueCrypt的修复工具,但我没有指望它,而是希望更多地了解实际案例。

我也了解RAID和备份/保管库,但这不是我想要的。

因此,问题是:使用VeraCrypt和LUKS加密的分区本身的弹性如何?

更新1

我的问题更多是关于加密分区及其数据的弹性,而不是关于保存主密钥,元数据或标头。问题类似于可靠的7zip存档:如果中间有一点损坏,那么您将丢失整个存档。

加密分区会一样脆弱吗?(不包括主键,元数据和标题)

PS:很抱歉,如果我没有立即回答,我正在世界各地旅行和工作-因此使该职位具有相关性-而且我经常面临时间紧张的问题。但是,我肯定会回答。

Answers:


13

在实践中,只要正确备份主密钥和元数据,加密几乎与没有加密时一样具有弹性。

除元数据外,损坏将仅影响损坏位的块,在大多数情况下,仅损坏字节的16个字节。

对于大多数数据损坏情况,使用密钥和工具(例如密码和Veracrypt / LUKS),您具有与未加密磁盘相同的访问权限,就像您通常每天使用加密磁盘一样。加密只会比平常增加一个额外的步骤(打开一个加密分区)。因此,在这种情况下,它的行为就像未加密的数据一样。

使用Veracrypt或Luks,您必须将主密钥存储在磁盘中,并用密码进行加密。损坏该扇区将导致永久数据丢失。可以通过主密钥备份(大小为几千字节)轻松解决此问题,这两种软件都易于实现,因此强烈建议所有人使用。

有关非元数据的详细信息

Veracrypt和Luks现在都使用XTS。在这种模式下,将为每个块计算一个密钥。为简化起见,要加密块,i请使用由主密钥和块号生成的密钥。因此,一个块的加密独立于另一个。如果您破坏了某些信息,它将仅限于该块。

在XTS中,它将块拆分为子块(通常为16个字节),并创建密钥,并使用该密钥对子块进行加密。这意味着,如果我们对其进行一些更改,则仅会影响这16个字节。

作为测试,更改Luks卷中的一位,它会将原始文件的16个字节更改为乱码,而其他496个仍保持不变。在7zip文件中,它使用流方法,所有字节都链接在一起,因此一个字节的更改将影响所有其余的字节-此处不是这种情况。

有些人认为这是一个问题,正如您所知,在何时何地更改纯文本时,仅比较加密的数据就可以精确到16个字节。

在以下链接上可以找到关于此的更多有趣信息:

/crypto/6185/what-is-a-tweakable-block-cipher

/security/39306/how-secure-is-ubuntus-default-full-disk-encryption

https://zh.wikipedia.org/wiki/Disk_encryption_theory

有关万能钥匙的详细信息

卢克斯

LUKS在分区(或磁盘)的开头有一些扇区,带有元数据,用于存储加密方法,其他参数和8个密钥槽。为了对磁盘进行加密和解密,它使用主密钥,这是创建LUKS容器时生成的一个很大的随机数。为了存储它,它使用您的密码对主密钥进行加密,方法是对密码多次遍历加密哈希函数,并为该插槽生成特定的密钥。同一张磁盘可以有8个不同的密码,每个密码在插槽中使用不同的密码加密主密钥。更改密码时,就像加密主密钥一样简单,而不更改所有分区。

因此,当此插槽和元数据损坏时,您将无法恢复真正用于解密的主密钥,从而丢失磁盘上的所有数据。这是快速销毁所有数据的简便方法。但是,如果您有卷标头的备份,则恢复它非常容易。

以下是从https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions#6-backup-and-data-recovery中提取的关于备份的LUKS常见问题解答的副本

6.2如何备份LUKS标头?

虽然您可以仅从LUKS分区的开始复制适当数量的字节,但是最好的方法是使用cryptsetup的命令选项“ luksHeaderBackup”。当在LUKS分区创建中使用了非标准参数时,这也可以防止错误。例:

cryptsetup luksHeaderBackup --header-backup-file <file> <device>

要恢复,请使用反命令,即

cryptsetup luksHeaderRestore --header-backup-file <file> <device>

如果不确定要还原的标头,请先备份当前的标头!您还可以通过对分离的标头使用--header选项来测试标头文件而无需还原它,如下所示:

cryptsetup --header <file> luksOpen <device> </dev/mapper/ -name>

如果这样可以解锁您的钥匙车,那就太好了。不要忘记再次关闭设备。

在某些情况下(损坏的标头),此操作将失败。然后使用以下步骤:

首先确定主键大小:

cryptsetup luksDump <device>

给出形式的一行

MK bits:        <bits>

旧的默认值等于256,新的默认值等于512。256位等于1'052'672字节的总报头大小和2MiB之一的512位。(另请参阅项目6.12)如果luksDump失败,则假定为2MiB,但是请注意,如果还原了该文件,则还可以还原文件系统的第一个1M左右。如果无法确定标头大小,请不要更改文件系统!这样,还原太大的标题备份仍然是安全的。

其次,将标头转储到文件。有很多方法可以做到,我更喜欢以下几种:

head -c 1052672 <device>  >  header_backup.dmp

要么

head -c 2M <device>  >  header_backup.dmp

2MiB标头。验证转储文件的大小以确保。要还原此类备份,您可以尝试luksHeaderRestore或执行更基本的操作

cat header_backup.dmp  >  <device>

Veracrypt

Veracrypt与LUKS相似。我没有像Truecrypt那样使用它,但是总的想法仍然成立。

Veracrypt仅有一个密钥槽,因此您不能同时拥有多个密码。但是您可以拥有一个隐藏卷:它将元数据存储在分区(或磁盘或文件)的末尾。隐藏卷具有不同的“主密钥”,并且会将分区的末端用作重叠空间。您应该备份的想法是相同的。可以使用Tools -> Backup Volume Header和来完成Tools -> Restore Volume Header。通过系统加密,它用于创建具有密钥备份的可引导磁盘,该备份可在发生任何损坏时恢复Truecrypt加载程序和密钥。在加密任何内容之前就已经完成了,据我所知,Veracrypt继续以相同的方式进行操作。

有关更多详细信息,请参见此链接https://veracrypt.codeplex.com/wikipage?title=Program%20Menu

关于备份密钥的安全注意事项

例如,如果您的密码泄露了,并且将卷密码更改为新的,安全可靠的密码,那么有权访问备份的人仍然可以使用旧密码解密文件。备份基本上是用(旧)密码加密的主密钥。因此,更改密码时,还需要进行新的备份并销毁旧的备份。永久销毁数据可能非常棘手。

对于使用该密码进行的每个备份,可以使用该密码解密数据。例如,可以在Veracrypt中使用此密码,例如使用“通用密码”(在公司中),备份该密码并更改为另一个密码。因此,IT部门。即使有人丢失了密码(可以将其视为主密码,但不要与之前的主密钥混淆),它仍可以恢复对该卷的访问。

最终想法(TL; DR)

与完全磁盘故障相比,使用主密钥损坏特定扇区的可能性较小。因此,如果此数据很重要,则应该对其进行备份,而不只是卷标头(主密钥)。

数据损坏很少传播(16字节),因此大多数用途都可以接受。

因此,分区或磁盘中间的坏块只会影响该块。一个扇区中的一些位错误仅限于该扇区,甚至完全不会影响512字节的扇区。

更新(23/01/2017):根据OP注释添加更多信息。


1
哇,这是一个非常广泛而翔实的答案,非常感谢!但是,我的问题更多是关于加密分区及其数据本身的弹性,而不是主密钥和元数据。问题类似于可靠的7zip存档:如果中间有一点损坏,那么您将丢失整个存档。加密分区会起到相同的作用吗?(不包括主密钥和元数据)
X.LINK

4

我在下面汇编了有关VeraCrypt / TrueCrypt容器的弹性的一些信息。

Veracrypt数据损坏

TC / VC将卷标头存储在两个位置:卷的开头和结尾。开头的一个是主要的,结尾的一个是用于备份的。这种机制通常足以使驱动器的一部分损坏或损坏时进行访问,因为损坏通常是局部的。如果驱动器的始端和末端都受到损坏,则几乎可以确定驱动器已死。

请注意,如果驱动器损坏或损坏,则与不使用加密时一样,您将丢失相同的数据。这意味着即使您能够装载该卷,那里读取的数据也可能会损坏。因此,请务必考虑数据备份,因为加密无法防止数据损坏。

VeraCrypt常见问题解答

当VeraCrypt卷的一部分损坏时,会发生什么?

在加密的数据中,一个损坏的位通常会损坏发生它的整个密文块。VeraCrypt使用的密文块大小为16个字节(即128位)。VeraCrypt使用的操作模式可确保如果块中发生数据损坏,则其余块不会受到影响。

VeraCrypt卷上的加密文件系统损坏时,该怎么办?

VeraCrypt卷中的文件系统可能会以与任何普通的未加密文件系统相同的方式损坏。发生这种情况时,您可以使用操作系统随附的文件系统修复工具进行修复。在Windows中,它是“ chkdsk”工具。VeraCrypt提供了一种在VeraCrypt卷上使用此工具的简便方法:在主VeraCrypt窗口(在驱动器列表中)上右键单击已安装的卷,然后从上下文菜单中选择“修复文件系统”。

这样,小数据损坏应该只具有局部影响,而不会破坏整个容器。但是,我建议不要加密整个卷/分区,尤其是系统驱动器,因为这样会使恢复变得更加复杂。进行良好的备份,尤其是对卷标头。请记住,就像真实磁盘或文件夹一样,磁盘/文件头中的损坏可能会使数据恢复变得困难,并且可能需要高级实用程序。

我相信LUKS在磁盘上没有第二个头文件,因此您在保留备份时必须更加小心。


我读过那些,但这仍然有些混乱。除了通过容器内的容器头文件和文件系统进行恢复之外,是否还意味着容器本身中间的坏扇区不会使其完全死掉并且无法挂载?正如我可能理解的那样,密文块的工作原理是否完全像非固态7-zip存档/未加密的ext3一样,仍然可以挂载但具有物理坏道?
X.LINK

我不能说加密卷,但是更改加密密文中的单个位只会吐出整个块的垃圾。块大小可能是128字节或256字节或4kb。它不会阻止其余的密文被解密。加密算法无法知道垃圾是有害的。没有校验和或任何内容(对于AES-CBC)。如果该块位于文本文件中,则它看起来就像记事本中的垃圾。如果它是目录结构的一部分,则文件系统将显示为乱码并要求chkdsk
Chloe

@ X.LINK:不良位将破坏其整个16字节的“扇区”。根据该扇区所在的位置,如果结果落在未使用的区域中,或者文件中的该位置出现垃圾,或者在最坏的情况下是需要使用恢复实用程序的错误目录结构,则结果可能为空。这与物理磁盘非常相似,在物理磁盘中您有未使用的扇区,文件数据和磁盘表,并且备份应遵循类似的准则。
harrymc '17

0

感谢人们提供的所有答案,最终的答案是100%完成的。

这些天我没有太多时间,所以我稍后将编辑我自己的答案。由于人们在这里给出的所有答案都是完全有用的,因此这只是他们所说内容的回顾,以及我的发现。

无论如何,这是我的发现之一,这将揭穿我遇到的许多困惑,并且它主要涉及……块的意思,因为这是一个过度使用和错误使用的术语:

https://sockpuppet.org/blog/2014/04/30/you-dont-want-xts/

另外,您将在这里找到一种“标准”的方式来谈论事情,并避免“障碍”混淆:

/superuser/1176839/what-are-every-possible-names-of-hard-drives-structure-parts

简而言之,您可以将包含单词“ 400”的加密块更改为“ 800”。这意味着加密的块级层完全是非固态的,而不是相信“这将像普通文件系统一样工作”(即Veracrypt FAQ)。

另外,我应该在两个月前偶然发现该链接:

/unix/321488/full-image-of-internal-hdd-drive-dd-dd-rescue-with-truecrypt-bad-sectors/

由于VeraCrypt是TrueCrypt的分叉,因此它的工作原理肯定相同。

PS:

仍然欢迎任何其他答案,并将其添加到我的“自己的”答案中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.