在 Ubuntu 中使用全盘加密(与 homedir 加密相反)时,使用 LUKS 的 dm-crypt 来加密卷。在安装程序中(至少在 12.04 版本中),您可以选择使用密码进行设置或者密钥文件。我想使用两者的组合;不是两者都有,而是两者都需要。
为什么?因为这可以增强安全性(双重认证);你需要有你需要知道解锁它。然后我想将密钥文件放在一个小型可移动存储设备(USB 闪存驱动器)上,并仅在启动时插入它。结果应该是需要放入正确的闪存驱动器和提供正确的密码来解锁根分区。
所以,换句话说,我希望在启动时被询问外部驱动器上的密钥文件加密的密码。
我看到一个/usr/share/initramfs-tools/hooks/cryptgnupg
可能有助于实现此目的的辅助脚本,但我不知道如何使用它。
为了避免混淆:我是不是寻求一种添加额外的键来解锁。
答案1
我也做同样的事情,但我担心我的答案不会令人满意,因为出于各种原因,我选择了完全定制的初始化文件系统。
而不是GnuPG
,这是一个必须包含在中的额外二进制文件初始化文件系统(在 的情况下GnuPG-2
,这是一个相当复杂的问题),我只是使用了已有的内容。这显然是dm-crypt/LUKS
。
假设你有一个keyfile
。最好是带有随机数据的。
# dd if=/dev/urandom of=keyfile count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000189802 s, 2.7 MB/s
使用 LUKS 为其添加加密(可以随意添加您选择的密码设置)。
# truncate -s 2M keyfile.luks
# cryptsetup luksFormat keyfile --header keyfile.luks
WARNING!
========
This will overwrite data on keyfile.luks irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase: bananas
Verify passphrase: bananas
现在您有一个密钥文件(512 字节)和一个 keyfile.luks(2MB,cryptsetup 由于某种原因需要写入 192k LUKS 标头)。由于 Initramfs 无论如何都会被压缩,所以这还不算太糟(仍然小于GnuPG
)。
现在您可以解密密钥文件:
# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas
并且您在中有 512 字节的随机数据/dev/mapper/lukskey
。(如果您想更改它,您可以写入它,因此我们可以早点用零初始化文件。)
# blockdev --getsize64 /dev/mapper/lukskey
512
在初始化文件系统 init
然后您可以继续使用它打开真正的 LUKS 卷(假设您首先添加了密钥)。
cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up
这种方法让 GnuPG 变得完全多余,而且你还可以获得 LUKS 的所有优势,例如密钥的多个密码短语、你选择的密码等等。更不用说一个带有多次重试的漂亮(大部分是常规)密码提示。