Answers:
一个名为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。
如有疑问,请添加评论!
为此,您必须已经设置并运行LUKS全盘加密。您可以通过在安装Ubuntu时选择适当的选项来执行此操作。为了获得最大的安全性,在安装过程中应该选择一个非常强大的密码短语。如果您的密码不符合要求,则应在继续操作之前将其更改为更好的密码(此处有更详细的说明)。
下面的方法不会替换任何现有的密码短语,而是将另一个密码短语添加到LUKS插槽之一。因此,如果您丢失了Yubikey,仍然可以使用任何现有密码来解锁计算机-我建议您记下该密码并将其隐藏在安全的地方-在此过程中,您还将需要几次。您新的Yubikey挑战密码短语应该仍然足够强大,但不必与安装Ubuntu时使用的密码短语一样长。
打开一个终端,然后运行以下命令:
sudo add-apt-repository ppa:privacyidea/privacyidea
出现提示时按Enter,然后运行:
sudo apt-get update
然后使用以下命令安装软件包:
sudo apt-get install yubikey-luks
不需要PPA,您可以通过以下方式安装软件包:
sudo apt-get install yubikey-luks
有关如何从Ubuntu 19.04的源代码构建软件包的信息,请参见此答案yubikey-luks
。
如果您将Yubikey的HMAC-SHA1功能用于其他用途,则可以跳过本节。它将删除第二个Yubikey插槽中的任何配置,因此,如果您将此Hubikey与HMAC-SHA1一起用于其他目的,请不要执行此步骤。
您需要通过从 Ubuntu 14.04上的Yubico PPA或16.04及更高版本上的主要Ubuntu存储库安装所需的软件来设置Yubikey与Ubuntu一起使用。
如果您以前没有这样做,请添加PPA并使用以下命令安装软件包:
sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization
sudo apt-get install yubikey-personalization
现在,我们需要使用HMAC-SHA1配置对Yubikey的第二个插槽进行编程。这将删除您以前的插槽配置,默认情况下为空。同样,如果您将HMAC-SHA1用于其他用途,请不要发出此命令-它会删除您的配置。您可以安全地在Yubikey内部使用与该LUKS设置相同的秘密密钥,以用于其他用途。(例如,在另一台使用LUKS + Yubikey的计算机上)。
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
终端将显示有关所做更改的一些信息。您无需特别注意,但是它将显示出Yubikey在HMAC-SHA1算法中使用的秘密密钥,以在受到挑战时计算响应。
现在,我们将编辑LUKS配置,以附加来自Yubikey的响应作为解密密钥之一。
我们需要指定的分区取决于您是使用BIOS还是UEFI引导计算机。对于BIOS,/dev/sda5
默认情况下加密卷为,对于UEFI则为/dev/sda3
。您可以通过打开disks
实用程序并确认分区的路径进行检查-它应该为sda3
或sda5
。注意:在具有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卷来保护您的数据。
Ubuntu 19.04的更新:
好像从Ubuntu 19.04(也许是18.10,我没有尝试过该版本)开始,cryptsetup
已经进行了足够的更改以打破yubikey-luks
以前的工作方式。这种承诺从上游资源库似乎实现修复,但原来的仓库似乎并没有被更新自2018年十月,我发现这个叉回购的具有修复,以及tidying-的几个其他位并设法建立一个适用于19.04的软件包。
由于我找不到更新后的fork的现有内部版本,因此开始yubikey-luks
工作的方法包括获取源代码并在本地构建DEB软件包,然后进行安装。
请按照我之前的回答中的步骤进行操作,但将步骤1替换为以下内容:
使用以下命令安装构建依赖项:
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
。引导中显示的消息可以在此文件中配置。