ger*_*ijk 9 encryption luks initramfs gnupg
在 Ubuntu 中使用全盘加密时(与 homedir 加密相反),使用 dm-crypt 和 LUKS 来加密卷。在安装程序中(至少在 12.04 替代版本中),您可以选择使用密码短语或密钥文件进行设置。我想结合使用两者;两者都不是,但两者都需要。
为什么?因为这增强了安全性(两因素);你需要拥有一些东西,你需要知道一些东西来解锁它。然后我想将密钥文件放在一个小的可移动存储设备(USB 闪存驱动器)上,并且只在启动时插入它。结果应该是需要放入正确的闪存驱动器并提供正确的密码来解锁根分区。
因此,换句话说,我想在启动期间询问外部驱动器上的密钥文件加密的密码。
我看到一个/usr/share/initramfs-tools/hooks/cryptgnupg帮助脚本可能有助于完成它,但我不知道如何使用它。
只是为了避免混淆:我不是在寻求一种方法来向卷添加额外的密钥来解锁它。
我做了同样的事情,但是我担心我的答案不会令人满意,因为出于各种原因,我使用了完全自定义的Initramfs。
而不是GnuPG,这是一个必须包含在Initramfs 中的额外二进制文件(如果是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
Run Code Online (Sandbox Code Playgroud)
使用 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
Run Code Online (Sandbox Code Playgroud)
现在您有一个密钥文件(512 字节)和一个 keyfile.luks(2MB,由于某种原因,cryptsetup 需要写入 192k LUKS 标头)。由于 Initramfs 无论如何都会被压缩,这还不错(仍然小于GnuPG)。
现在您可以解密密钥文件:
# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas
Run Code Online (Sandbox Code Playgroud)
并且你有 512 字节的随机数据/dev/mapper/lukskey。(如果你想改变它,你可以写入它,所以我们可以早点用零初始化文件。)
# blockdev --getsize64 /dev/mapper/lukskey
512
Run Code Online (Sandbox Code Playgroud)
在Initramfs 中, init您可以继续用它打开真正的 LUKS 卷(假设您先添加了密钥)。
cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up
Run Code Online (Sandbox Code Playgroud)
这种方法使 GnuPG 完全多余,而且您可以获得 LUKS 的所有优势,例如密钥的多个密码短语、您选择的密码等。更不用说多次重试的不错的(主要是常规的)密码提示。
| 归档时间: |
|
| 查看次数: |
5519 次 |
| 最近记录: |