用于Ubuntu的具有双重身份验证的全盘加密:如何?


9

背景资料

我是Linux的新手,最近刚从Windows退出。我目前正在使用没有完整磁盘加密的Ubuntu 11.04。只有我的主目录是使用eCryptFS加密的。最近,我开始注意到加密并不像应该的那样透明。例如,VMWare有时会遇到存储在我的加密主目录中的虚拟机的问题,因此我只是将虚拟机移动到未加密的位置,并从我的加密主目录链接到该虚拟机。但这还不止于此:我已经意识到,让系统保持未加密状态实际上并不是很安全,因为像Ubuntu这样的开源操作系统很容易修改以泄露本应保密的信息。


目标

我希望能够将全盘加密与密钥设备和用于预启动身份验证的密码一起使用。


要求/细节

  1. 整个磁盘必须加密。磁盘至少由单独的分区组成,这些分区均已加密。如果甚至可以使用加密隐藏分区,我都会去做。加密越透明,效果越好。我不必以其他方式使用计算机或配置其他任何东西。
  2. 用于解锁和引导加密分区的设备必须是小型外部便携式设备。这有两个目的:出于恶意目的,更改引导加载程序的可能性要小得多,因为它在不使用时会留在我身边。并且在任何形式的加密磁盘上都找不到用于解密磁盘的密钥文件。
  3. 密钥文件应使用密码加密。如果我丢失了计算机和USB设备,数据和操作系统仍将是安全的。如果我丢失了USB密钥或它遭到破坏,则可以从备份中创建另一个干净的USB密钥。在两种情况下都不会泄露任何信息。当然,如果我丢失了计算机,那是无关紧要的。

是的,我从很多地方查看过指南,但是问题在于它们不能满足所有要求(尤其是第3条)。我很确定我的要求足够通用,以至于有人已经尝试并成功实现了这样的设置。如果有任何Linux专业人士可以共享一个解决方案,我将不胜感激。


2
关于“因为像Ubuntu这样的开源操作系统很容易修改,以泄露本应保密的信息。” -您会说服封闭源OS做到这一点如此容易,您会感到惊讶。一个程序是开源的,这意味着没有任何关于其安全或不安全针对本地攻击。
user1686 2011年

Answers:


2

有一种简单的方法来进行全磁盘加密,这需要特定的拇指驱动器和密码才能启动。

您要做的是从完全加密的硬盘驱动器上拆下LUKS标头,并将其存储在拇指驱动器上。

我假设您已经具有以下设置:

# /dev/sda1 is the boot partition (100MB)
# /dev/sda2 is the encrypted partition
parted /dev/sda mklabel msdos
parted /dev/sda -- mkpart primary ext2 1M 200M
parted /dev/sda -- mkpart primary ext4 200M -100M
cryptsetup luksFormat /dev/sda2

创建luks标头的副本并将其从本地设备中删除:

mkdir /media/ramdisk && mount -t tmpfs -osize=20m,rw tmpfs /media/ramdisk
cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/ramdisk/header.img
dd if=/dev/urandom of=/dev/sda2 bs=1M count=2

如果您是高预算代理商的目标,请多次运行最后一步。我还创建了一个ramdisk来临时保存标题,这样以后就不会再出现了。

将您的USB设备放在/ dev / sdb中,创建2MB分区并将标头加载到其中:

parted /dev/sdb -- mklabel MSDOS
parted /dev/sdb -- mkpart primary 1M 3M
dd if=/media/ramdisk/header.img of=/dev/sdb1

现在,/ dev / sda2中的所有内容看起来都像是随机数据,并且您的标头位于/ dev / sdb1中。要手动访问加密的驱动器,请使用:

cryptsetup luksOpen --header /dev/sdb1 /dev/sda2 rootfs
mount /dev/mapper/rootfs /target

下一步是让您的启动过程要求在启动时插入pendrive。我发现更容易假设它会在那里,否则失败。首先,找出您设备的ID和UUID:

find -L /dev/disk/by-id/ -samefile /dev/sdb1
/dev/disk/by-id/usb-Generic-_Compact_Flash-part1
find -L /dev/disk/by-id/ -samefile /dev/sda2
/dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2

blkid /dev/sdb1
/dev/sdb1: UUID="63347546-2db3-4bc1-9414-1142739a4c9f" TYPE="crypto_LUKS"

接下来编辑您的/etc/crypttab行,如下所示:

root /dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2 none luks,header=/dev/disk/by-id/usb-Generic-_Compact_Flash-part1

(您可能需要此补丁才能获得对中header选项的支持crypttab

最后但并非最不重要的一点是,更新您的initram:

update-initramfs -u

您可以更进一步,将整个启动分区实际加载到USB驱动器上。本文的作者正在该站点上进行后续跟踪

许多 不同的方法 可以采取,伴有不同程度的安全和舒适。

关于安全性的特别注意事项:如果您的密码短语遭到破坏,那么即使您稍后更改了密码短语,持有标头副本的任何人也都可以解密数据。


1

我知道TrueCrypt可用于OSX,Windows和Linux。您可以对整个驱动器进行两个级别的加密。我在带有AES完整磁盘加密的Debian上使用了它。它需要引导密码才能访问硬盘驱动器上的数据。


3
我认为TrueCrypt全盘加密仅适用于Windows。
Kevin Li

two levels of encryption for the whole drive!=two factor auth
GnP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.