0. 先决条件

0. 先决条件

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

如何将 Yubikey 与我的 Ubuntu FDE 设置结合起来以便对我的加密硬盘使用 2FA?

答案1

一个叫隐私理念已经创建了一个小包来添加哈希算法质询-响应例程到 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。

更新:自 Ubuntu 19.04 以来,主存储库中的软件在更新后似乎出现故障cryptsetup。请参阅我的其他答案有关如何解决该问题的详细信息..

如果您有疑问,请添加评论!


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 上

这个答案有关如何yubikey-luks为 Ubuntu 19.04 从源代码构建软件包。


2.安装Yubikey软件

如果你将 Yubikey 的 HMAC-SHA1 功能用于其他用途,则可以跳过此部分。它将清除第二个 Yubikey 插槽中的所有配置,因此如果您将此 Yubikey 用于其他目的的 HMAC-SHA1,请执行此步骤。

你需要安装所需的软件来设置 Yubikey 以与 Ubuntu 配合使用,方法是:来自 Yubico PPA在 Ubuntu 14.04 上或从 16.04 及更高版本的主 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 用于其他用途,请执行此操作。(例如,在另一台使用 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 主密钥,然后使用它来解密您的硬盘,即使您将来更改了密码。cryptsetup 的手册页解释这一点,看看luksHeaderBackup部分。如果您怀疑发生了这种情况,那么您必须创建一个全新的 LUKS 卷来保护您的数据。

答案2

Ubuntu 20.04 更新:

省略1和2步骤

因为现在在 Ubuntu 20.04 repo 中所有的软件包都可用,所以只需安装 yubikey-luks 即可:

sudo apt install yubikey-luks

步骤3

这里需要关注一件事,您可能需要-ochal-btn-trig向命令添加一个参数ykpersonalize

它有什么作用?它将等待 15 秒,让 YubiKey 上的按钮按下(当然,如果 yubikey 上有按钮的话),up2u。

步骤5

当您重新启动计算机时,您将看不到来自 的消息/etc/ykluks.cfg,为什么?因为不知何故此脚本不会修改/etc/crypttab

好的,现在我们必须修改/etc/crypttab,以添加:keyscript=/usr/share/yubikey-luks/ykluks-keyscript

修改之前它可能是什么样子的?

cat /etc/crypttab  
[partition] UUID=1b2c1618-dc62-4d32-ab30-ebc23cb28cea none luks,discard

您的分区可以是任何东西,例如:sda3_crypt,即使您的系统已打开也sdb不要担心,请忽略它。

修改之后会是什么样子?

cat /etc/crypttab  
[partition] UUID=1b2c1618-dc62-4d32-ab30-ebc23cb28cea none luks,keyscript=/usr/share/yubikey-luks/ykluks-keyscript,discard

只需添加部分关键脚本

很重要:不要错过选项之间的逗号,否则您会搞砸配置。

非常重要 v2:在下一步之前,请验证密钥脚本路径,检查您是否有此文件,如果没有,抱歉。

第 6 步:

sudo update-initramfs -u

致谢

知识分享自:https://infosec-handbook.eu/blog/yubikey-luks/

就这样吧,别客气。

答案3

Ubuntu 19.04 更新:

从 Ubuntu 19.04(也许是 18.10,我没有尝试该版本)开始,似乎cryptsetup已经发生了足够的变化,破坏了yubikey-luks以前的工作方式。这次提交来自上游存储库似乎实现了修复,但是原始存储库自 2018 年 10 月以来似乎没有更新过。我找到了这个仓库的分支它有修复程序以及其他一些整理功能,并设法构建了一个可在 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 时,Ubuntu 主档案中的版本yubikey-luks可以更新,这样就不需要手动构建了。

作为额外福利,新版本有一个配置文件,可在 找到/etc/ykluks.cfg。可在此文件中配置启动时显示的消息。

答案4

即使您使用 2FA,某人仍然可以在您解锁卷后获取您的 LUKS 密钥,并在以后使用它来解锁。

有两个项目(非 Ubuntu)使用 yubikey,并且每次用户登录时都会更改 LUKS 密钥。这样,即使攻击者以某种方式知道了以前的密钥和/或密码,也很难访问系统。这适用于真正偏执的人 :)

这些项目是:

虽然它们不能直接在 Ubuntu 上运行,但仍可以进行调整。

相关内容