通过LUKS进行Yubikey两因素身份验证全盘加密


27

我最近购买了Yubikey Neo-一种漂亮的小硬件第二因素身份验证设备。它主要用于一次性密码和新兴的U2F协议-但自Yubikey版本2起,它还支持HMAC-SHA1挑战-响应身份验证。HMAC-SHA1组合了一个秘密密钥(存储在Yubikey内部),并将其与密码短语结合在一起以生成响应。

如何将Yubikey与Ubuntu FDE设置结合使用,以将2FA与加密的硬盘驱动器一起使用?

Answers:


30

一个名为PrivacyIdea的小组创建了一个小程序包,将一个HMAC-SHA1挑战响应例程添加到initramfs中,这意味着Ubuntu可以查询您要传递给Yubikey的挑战,然后使用响应来解锁LUKS卷。在大多数情况下,我会按照这些说明进行操作,并添加一些注释。该过程实际上很容易做到。

我已经在Ubuntu 14.04、16.04和18.04上对此进行了测试;使用Yubikey Neo。它应与任何最新的Yubikey,固件2.0+及14.04之后的任何版本的Ubuntu一起使用。我还用Yubikey 5C测试了Ubuntu 19.04,还需要做一些额外的工作,但是可以使其正常工作。也可能有其他与之兼容的硬件HMAC-SHA1质询响应设备,但我不知道存在任何此类设备。与往常一样,在继续操作之前,请确保已备份了数据-这里应该没有任何问题,但是总有可能会破坏计算机上的所有内容。这些说明不附带任何保证。

更新:从Ubuntu 16.04开始,所需的软件包位于主存储库中,不需要PPA。

如有疑问,请添加评论!


0.先决条件

为此,您必须已经设置并运行LUKS全盘加密。您可以通过在安装Ubuntu时选择适当的选项来执行此操作。为了获得最大的安全性,在安装过程中应该选择一个非常强大的密码短语。如果您的密码不符合要求,则应在继续操作之前将其更改为更好的密码(此处有更详细的说明)。

下面的方法不会替换任何现有的密码短语,而是将另一个密码短语添加到LUKS插槽之一。因此,如果您丢失了Yubikey,仍然可以使用任何现有密码来解锁计算机-我建议您记下该密码并将其隐藏在安全的地方-在此过程中,您还将需要几次。您新的Yubikey挑战密码短语应该仍然足够强大,但不必与安装Ubuntu时使用的密码短语一样长。


1.添加PrivacyIdea PPA并安装软件包

在Ubuntu 14.04上

打开一个终端,然后运行以下命令:

sudo add-apt-repository ppa:privacyidea/privacyidea 

出现提示时按Enter,然后运行:

sudo apt-get update

然后使用以下命令安装软件包:

sudo apt-get install yubikey-luks

在Ubuntu 16.04、18.04上

不需要PPA,您可以通过以下方式安装软件包:

sudo apt-get install yubikey-luks

在Ubuntu 19.04上

有关如何从Ubuntu 19.04的源代码构建软件包的信息,请参见此答案yubikey-luks


2.安装Yubikey软件

如果您将Yubikey的HMAC-SHA1功能用于其他用途,则可以跳过本节。它将删除第二个Yubikey插槽中的任何配置,因此如果您将此Hubikey与HMAC-SHA1一起用于其他目的,请不要执行此步骤。

您需要通过 Ubuntu 14.04上的Yubico PPA或16.04及更高版本上的主要Ubuntu存储库安装所需的软件来设置Yubikey与Ubuntu一起使用。

在Ubuntu 14.04上

如果您以前没有这样做,请添加PPA并使用以下命令安装软件包:

sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization

在Ubuntu 16.04、18.04(及更高版本)上

sudo apt-get install yubikey-personalization

3.初始化HMAC-SHA1的Yubikey插槽

现在,我们需要使用HMAC-SHA1配置对Yubikey的第二个插槽进行编程。这将删除您以前的插槽配置,默认情况下为空。同样,如果您将HMAC-SHA1用于其他用途,请不要发出此命令-它会删除您的配置。您可以安全地在Yubikey内部使用与该LUKS设置相同的秘密密钥,以用于其他用途。(例如,在另一台使用LUKS + Yubikey的计算机上)。

ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

终端将显示有关所做更改的一些信息。您无需特别注意,但是它将显示出Yubikey在HMAC-SHA1算法中使用的秘密密钥,以在受到挑战时计算响应。


4.将Yubikey注册到LUKS老虎机

现在,我们将编辑LUKS配置,以附加来自Yubikey的响应作为解密密钥之一。

我们需要指定的分区取决于您是使用BIOS还是UEFI引导计算机。对于BIOS,/dev/sda5默认情况下加密卷为,对于UEFI则为/dev/sda3。您可以通过打开disks实用程序并确认分区的路径进行检查-它应该为sda3sda5注意:在具有NVMe磁盘的较新计算机上,路径将类似于/dev/nvme0n1p3

在终端中运行:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7

这将写入LUKS配置的插槽7,按照安装程序中的提示进行操作(根据所运行的版本,它们会略有不同)。

然后,您都完成了!您应该能够重新引导计算机,并且如果插入了Yubikey,则可以输入质询密码,并使用Yubikey作为解锁LUKS分区并引导系统的第二个因素。解密硬盘驱动器后,即可删除Yubikey。

如果您丢失了Yubikey,您仍然可以输入原始(希望很长)密码来解密硬盘驱动器,然后您可以再次按照此过程注册新的Yubikey。


更改加密挑战密码

以后更改密码非常简单,只需使用此命令即可重置密钥。重置密钥并不是完全必要的,但不会造成伤害。请记住,这将破坏先前的密钥,如果将此Yubikey与HMAC-SHA1一起用于其他用途,则不要这样做。(例如,在另一台使用LUKS + Yubikey的计算机上)。

 ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

然后,类似于上面的步骤4,将新密码注册到LUKS密钥槽中,但选择使用以下命令清除插槽7:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c

当提示Enter any remaining passphrase您输入时,请使用您的备用密码-而不是Yubikey挑战密码。然后输入一个新的 Yubikey挑战密码,两次,最后,您将需要最后一次输入备份密码。

现在,您旧的Yubikey挑战密码已被删除,只有新密码会解密硬盘。您以前的备份密码仍然相同。您可以通过遵循步骤0中的链接来更改该密码。


注意安全隐患

添加Yubikey会为您的系统增加一定程度的安全性-某人必须既了解挑战密码又要使您的Yubikey能够解锁硬盘驱动器(或找到您的初始密码,您现在将其用作备份)。 。但是,如果攻击者知道您的挑战密码(例如,在键入密码时通过“肩膀冲浪”)并可以在短时间内访问Yubikey,则从技术上讲,解密该硬盘驱动器是可行的。使用质询密码短语,他们可以从Yubikey获得响应并将其存储,然后在没有Yubikey的情况下随时使用它来解密硬盘。或者,如果攻击者或恶意软件再次知道您的密码短语,并且能够在连接到Yubikey的计算机上运行代码,它们也可能发出挑战并存储响应。因此,输入挑战密码时保持警惕并确保您始终将Yubikey放在安全位置仍然非常重要。您也应该只将其插入您信任的计算机中。如果您忘记了Yubikey的密码,并且怀疑有人可能正在使用它尝试学习解密密钥,请再次执行步骤2和3,以重置Yubikey内的秘密密钥,然后选择一个新的挑战密码。请注意,如果对手设法学习了您的密码之一(来自Yubikey的HMAC-SHA1响应或您的备份),他们可以备份LUKS主密​​钥,然后使用该密钥解密您的硬盘,即使您将来会更改密码。并确保您始终将Yubikey放在安全的位置。您也应该只将其插入您信任的计算机中。如果您忘记了Yubikey的密码,并且怀疑有人可能正在使用它尝试学习解密密钥,请再次执行步骤2和3,以重置Yubikey内的秘密密钥,然后选择一个新的挑战密码。请注意,如果对手设法学习了您的密码之一(来自Yubikey的HMAC-SHA1响应或您的备份),他们可以备份LUKS主密​​钥,然后使用该密钥解密您的硬盘,即使您将来会更改密码。并确保您始终将Yubikey放在安全的位置。您也应该只将其插入您信任的计算机中。如果您忘记了Yubikey的密码,并且怀疑有人可能正在使用它尝试学习解密密钥,请再次执行步骤2和3,以重置Yubikey内的秘密密钥,然后选择一个新的挑战密码。请注意,如果对手设法学习了您的密码之一(来自Yubikey的HMAC-SHA1响应或您的备份),他们可以备份LUKS主密​​钥,然后使用该密钥解密您的硬盘,即使您将来会更改密码。再次执行第2步和第3步,以重置Yubikey内部的密钥并选择新的挑战密码。请注意,如果对手设法学习了您的密码之一(来自Yubikey的HMAC-SHA1响应或您的备份),他们可以备份LUKS主密​​钥,然后使用该密钥解密您的硬盘,即使您将来会更改密码。再次执行第2步和第3步,以重置Yubikey内部的密钥并选择新的挑战密码。请注意,如果对手设法学习了您的密码之一(来自Yubikey的HMAC-SHA1响应或您的备份),他们可以备份LUKS主密​​钥,然后使用该密钥解密您的硬盘,即使您将来会更改密码。cryptsetup的手册页对此进行了解释,请查看luksHeaderBackup部分。如果您怀疑发生了这种情况,则必须创建一个全新的LUKS卷来保护您的数据。


更新:我也在15.04上尝试过,看来PPA没有所需软件包的构建,因此我必须更改软件源中的DEB行以使用“可信任”存储库而不是“ vivid” ”。进行此更改后,我的LUKS + Yubikey设置现在可以在15.04上运行了。
seanlano

4
不要再使用privacyidea存储库!该软件包现在包含在上游debian中!
cornelinux '16

1
有一种避免不使用yubikey登录的方法:每次用户登录时更改luks密码。这里有Gentoo的实现:github.com/flowolf/initramfs_ykfde可以在短时间内适应Ubuntu。
Unnamed_1'October

1
我猜相同的过程适用于新的18.04 LTS版本吗?
马克·文斯特拉

2
我已经尝试过Ubuntu 18.04,并且工作正常。
jetole

0

Ubuntu 19.04的更新:

好像从Ubuntu 19.04(也许是18.10,我没有尝试过该版本)开始,cryptsetup已经进行了足够的更改以打破yubikey-luks以前的工作方式。这种承诺从上游资源库似乎实现修复,但原来的仓库似乎并没有被更新自2018年十月,我发现这个叉回购的具有修复,以及tidying-的几个其他位并设法建立一个适用于19.04的软件包。

由于我找不到更新后的fork的现有内部版本,因​​此开始yubikey-luks工作的方法包括获取源代码并在本地构建DEB软件包,然后进行安装。

请按照我之前的回答中的步骤进行操作,但将步骤1替换为以下内容:


1.获取yubikey-luks源代码,构建并安装软件包

使用以下命令安装构建依赖项:

sudo apt install dh-exec devscripts expect yubikey-personalization

然后下载并解压缩源存档:

mkdir ~/tmp
cd ~/tmp
wget -O yubikey-luks.zip https://github.com/thuandt/yubikey-luks/archive/master.zip
unzip yubikey-luks.zip
cd yubikey-luks-*

使用以下方法构建软件包:

make builddeb NO_SIGN=1

然后安装:

sudo dpkg -i DEBUILD/yubikey-luks_*.deb

然后继续按照我的第一个答案中的其余步骤进行操作。

希望在19.10之前yubikey-luks可以更新Ubuntu主归档文件中的,以便不需要手动构建。

另外,较新的版本还有一个配置文件,该文件可以在处找到/etc/ykluks.cfg。引导中显示的消息可以在此文件中配置。

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.