据我所知,即使磁盘上的数据被覆盖,也有可能被恢复。据我所知,替换/删除 LUKS 密钥很快/很简单,不会导致所有数据被重写。这对我来说意味着在标头的某个地方有一个重要的“辅助密钥”,这进一步表明,如果密钥已被泄露和替换,但攻击者可以恢复使用该密钥的 LUKS 标头的先前状态,他们仍然可以访问数据。我错了吗?或者这是一个安全问题?
答案1
简短的回答:如果您无法对媒体保持物理控制和/或选择了较差的密码,这将会带来安全隐患。
较长的答案:
如果攻击者在时间 A 获得硬盘的访问权限,复制它,并泄露时间 A 时的密钥,那么时间 A 时存在的所有数据都会受到泄露(但您知道这一部分)。
据我所知,每个密码短语都允许您访问一个“主密钥”。此外,我找不到任何方法可以轻松更改主密钥,除非为新主密钥创建一个全新的分区(即使可能,也很难做到)。
这意味着,除非你擦除硬盘并在时间 A 和 B 之间重新开始,否则在时间 A 时泄露密钥的攻击者以及在时间 B 时获得同一驱动器的访问权限的攻击者就可以访问时间 B 时的数据。
减轻:
对用户进行教育并正确应对安全威胁。如果您的用户失去对加密媒体的控制权,然后又重新获得控制权,您需要他们告知您,并且您需要擦除机器并使用不同的密码重新加密。
此外,如果老练的攻击者有可能获取笔记本电脑的访问权限,并且密码不够强,则将笔记本电脑(时间 A)上的信息视为丢失或可能丢失。
答案2
作为与此相关的 LUKS 标头部分的非常简短的摘要(不一定是 100% 技术准确):
LUKS 标头包含“密钥槽”
每个密钥槽都包含容器的“主密钥”
每个密钥槽均使用从密码派生的密钥进行独立加密
每个密钥槽都有自己关联的密码和密钥派生函数设置
当您创建 LUKS 容器时,会生成一个随机主密钥。这是用于实际加密驱动器上数据的加密密钥。系统还会提示您输入密码,该密码用于派生第一个密钥槽的加密密钥。密钥槽加密密钥又用于保护密钥槽中的数据,包括主密钥。
直到最近,LUKS 还没有方便的方法来更改主密钥;它基本上是在创建时“刻录”到容器中的。例如,如果容器创建发生在熵匮乏的情况下,例如在初始系统安装的早期,这就成了一个问题。如今(自 cryptsetup 1.5 以来),cryptsetup-重新加密即在现代发行版中默认提供,其中包括允许您通过重新加密容器中的所有数据来更改容器主密钥。
LUKS 头备份包含 LUKS 头包含的所有数据。换句话说,主密钥受(可能是一组不同的)密码保护。攻击者同样可以通过头备份或分离头的副本攻击 LUKS 容器,就像通过直接访问容器一样。
因此,如果攻击者可以访问容器的 LUKS 标头,他们就可以随意攻击密钥槽。一旦他们能够撬开其中一个密钥槽,他们就拥有了可以使用的密钥当标头被转储时解密容器中的数据。如果攻击者可以访问的标头受到弱密码或弱 PBKDF 设置(特别是迭代次数)的保护,则可能会出现问题。
因此,除非你使用不同的密钥重新加密容器(你可以使用相同的密码和密码设置),否则这样的攻击者可以使用他们现在知道的主密钥在稍后的某个时间访问容器中的数据。
为了减轻这种威胁,仅仅更改密码是不够的;您必须重新加密容器。
当然,如果攻击者不仅能够复制 LUKS 标头,还能复制容器本身的内容,并且攻击者设法撬开一个密钥槽,那么数据就会立即受到损害。