当前位置: 首页>>技术教程>>正文


password – Yubikey Two-factor 认证 Full-disk 通过 LUKS 加密

, , , ,

问题描述

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

如何将 Yubikey 与我的 Ubuntu FDE 设置结合使用 2FA 和我的加密硬盘?

最佳方法

一个名为 PrivacyIdea 的小组创建了一个小包,用于将 HMAC-SHA1 challenge-response 例程添加到 initramfs,这意味着 Ubuntu 可以向您询问要传递给 Yubikey 的挑战,然后使用响应来解锁 LUKS 卷。大多数情况下, I’m following these instructions ,并添加了一些注释。这个过程实际上很容易做到。

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

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

更新:自 Ubuntu 19.04 起,主存储库中的软件在更新到 cryptsetup 后似乎已损坏。有关如何解决该问题的详细信息,请参阅 my other answer

如果您有任何问题,请添加评论!


0. 先决条件

为此,您必须已经设置并运行 LUKS full-disk 加密。您可以通过在安装 Ubuntu 时选择适当的选项来做到这一点。为了获得最大的安全性,您应该在安装过程中选择一个非常强大的密码。如果您的密码不符合要求,您应该在继续之前 change it to a better one ( more detailed instructions here )。

下面的方法不会替换任何现有的密码短语,而是将另一个密码短语添加到其中一个 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 包的信息,请参阅 this answer


2.安装Yubikey软件

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

您需要通过安装所需的软件(在 Ubuntu 14.04 上为 from the 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 Slot

现在我们需要使用 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 Slot

现在我们将编辑 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。


更改加密质询密码

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

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

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

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

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

现在您的旧 Yubikey 挑战密码已被删除,只有您的新密码才能解密硬盘。您以前的备份密码仍然是相同的。您可以按照步骤 0 中的链接更改该密码。


关于安全影响的说明

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

次佳方法

Ubuntu 20.04 更新:

省略第 1 步和第 2 步

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

sudo apt install yubikey-luks

第 3 步

这里需要关注的一件事是,您可能希望将参数 -ochal-btn-trig 添加到命令 ykpersonalize 中。

它有什么作用?它将等待 YubiKey 上的按钮按下 15 秒(如果你在 yubikey 上有按钮,则为 ofc),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

您的分区可以是任何东西,fe: sda3_crypt ,即使您的系统在 sdb 上也不要担心,忽略它。

修改后会是什么样子?

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

只需添加带有 keyscript 的部分。

非常重要:不要错过选项之间的逗号,因为你会搞砸配置。

非常重要的 v2:在下一步之前,验证 keyscript 路径,检查你是否有这个文件,如果没有,对不起。

第 6 步:

sudo update-initramfs -u

Credits

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

就是这样,不客气。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12648.html,未经允许,请勿转载。