在实践中,只要正确备份主密钥和元数据,加密几乎与没有加密时一样具有弹性。
除元数据外,损坏将仅影响损坏位的块,在大多数情况下,仅损坏字节的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注释添加更多信息。