我只是好奇是否有人能概述一下像 LUKS 这样的系统如何实现全盘加密,也就是它如何存储密钥以及如何验证这些密钥,以及数据是否由所有标准 i/o 的包装器解密。我在这里找到了关于 LUKS 如何挂接到 init 进程的简要说明在无头服务器上使用 LUKS 进行完整系统加密 - 使用 dropbear 和 busybox 解锁。如何操作?
答案1
Luks 是块设备上的加密层,因此它对特定块设备进行操作,并公开一个作为解密版本的新块设备。在使用过程中,访问此设备将触发透明加密/解密。
它通常用于磁盘分区或 LVM 物理卷,允许在同一个加密容器中有多个分区。
LUKs 在设备启动时存储了一堆元数据。它有多个密码槽。每个槽都有一个 256 位盐,与加密消息一起以明文显示。输入密码时,LUKS 会依次将其与每个盐组合,对结果进行哈希处理,并尝试使用结果作为密钥来解密每个槽中的加密消息。此消息由一些已知文本和主密钥的副本组成。如果它适用于任何一个槽,因为已知文本匹配,那么现在就可以知道主密钥了,您可以解密整个容器。在使用容器时,主密钥必须在 RAM 中保持未加密状态。
知道主密钥可以让您访问容器中的所有数据,但不会泄露密码槽中的密码,因此一个用户无法看到其他用户的密码。
该系统的设计并不要求用户知道或与主密钥交互,并且此密钥不能在不重新加密的情况下更改。使用密码槽意味着密码可以独立于加密密钥:无需重新加密整个容器即可更改密码,并且可以有多个密码槽。