我最近买了一个 Yubikey Neo——一个漂亮的小型硬件第二因素身份验证设备。它主要用于一次性密码和新兴的 U2F 协议——但从 Yubikey 版本 2 开始,它还支持 HMAC-SHA1 质询-响应身份验证。HMAC-SHA1 结合了一个秘密密钥(存储在 Yubikey 中)并将其与密码短语结合以生成响应。
我如何将 Yubikey 与我的 Ubuntu FDE 设置结合起来,以将 2FA 与我的加密硬盘一起使用?
我最近买了一个 Yubikey Neo——一个漂亮的小型硬件第二因素身份验证设备。它主要用于一次性密码和新兴的 U2F 协议——但从 Yubikey 版本 2 开始,它还支持 HMAC-SHA1 质询-响应身份验证。HMAC-SHA1 结合了一个秘密密钥(存储在 Yubikey 中)并将其与密码短语结合以生成响应。
我如何将 Yubikey 与我的 Ubuntu FDE 设置结合起来,以将 2FA 与我的加密硬盘一起使用?
一个名为PrivacyIdea的小组创建了一个小程序包,用于向 initramfs 添加HMAC-SHA1挑战-响应例程,这意味着 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 上
打开一个终端,然后运行以下命令:
出现提示时按 Enter,然后运行:
然后安装包:
在 Ubuntu 16.04、18.04 上
不需要 PPA,你可以安装包:
在 Ubuntu 19.04 上
有关如何从 Ubuntu 19.04 的源代码构建包的信息,请参阅此答案。
yubikey-luks
2.安装Yubikey软件
如果您将 Yubikey 的 HMAC-SHA1 功能用于其他用途,则可以跳过本节。它会擦除第二个 Yubikey 插槽中的任何配置,因此如果您将 HMAC-SHA1 用于此 Yubikey 的其他目的,请不要执行此步骤。
您需要通过从 Ubuntu 14.04 上的 Yubico PPA或 16.04 及更高版本上的主 Ubuntu 存储库安装所需的软件来设置 Yubikey 以与 Ubuntu 一起使用。
在 Ubuntu 14.04 上
如果您之前没有这样做,请添加 PPA 并使用以下命令安装软件包:
在 Ubuntu 16.04、18.04(及更高版本)上
3. 为 HMAC-SHA1 初始化 Yubikey Slot
现在我们需要使用 HMAC-SHA1 配置对 Yubikey 的第二个插槽进行编程。这将清除您之前的插槽配置,默认情况下为空。同样,如果您将 HMAC-SHA1 用于其他用途,请不要发出此命令 - 它会清除您的配置。您可以安全地在 Yubikey 中使用与其他用途相同的密钥来设置此 LUKS。(比如用另一台电脑使用LUKS+Yubikey)。
终端将显示有关所做更改的一些信息。您无需记下这一点,但它会显示 HMAC-SHA1 算法中 Yubikey 使用的密钥,用于在给定挑战时计算响应。
4. 将 Yubikey 注册到 LUKS Slot
现在我们将编辑 LUKS 配置以附加来自 Yubikey 的响应作为解密密钥之一。
我们需要指定的分区取决于您是使用 BIOS 还是 UEFI 来引导您的机器。对于 BIOS,加密卷
/dev/sda5
默认位于 ,对于 UEFI,它位于/dev/sda3
。您可以通过打开disks
实用程序并确认分区的路径来检查这一点 - 它应该是sda3
或sda5
。注意:在带有 NVMe 磁盘的较新计算机上,路径类似于/dev/nvme0n1p3
.在终端中运行:
这将写入 LUKS 配置的插槽 7,按照安装程序中的提示进行操作(它们会根据您运行的版本略有不同)。
然后你就大功告成了!您应该能够重新启动您的计算机,如果您的 Yubikey 已插入,那么您可以输入您的挑战密码并使用 Yubikey 作为第二个因素来解锁 LUKS 分区并启动系统。解密硬盘后,您可以删除 Yubikey。
如果你丢失了你的 Yubikey,你仍然可以输入你原来的(希望很长)密码来解密硬盘,然后你可以再次按照这个过程来注册一个新的 Yubikey。
更改加密质询密码
以后更改密码非常简单,只需使用此命令重置密钥即可。重置密钥并非完全必要,但不会有任何坏处。请记住,这会破坏以前的密钥,如果您将 HMAC-SHA1 用于此 Yubikey 的其他用途,请不要这样做。(比如用另一台电脑使用LUKS+Yubikey)。
然后,类似于上面的第 4 步,将新密码注册到 LUKS 密钥槽中,除了选择使用以下命令清除槽 7:
当出现提示时
Enter any remaining passphrase
,请使用您的备份密码 - 而不是 Yubikey 挑战密码。然后输入一个新的Yubikey 挑战密码,两次,最后你需要最后一次输入备份密码。现在您的旧 Yubikey 挑战密码已被删除,只有您的新密码才能解密硬盘。您之前的备份密码仍将保持不变。您可以通过步骤 0中的链接更改该密码。
关于安全隐患的说明
添加 Yubikey 将为您的系统增加一定程度的安全性 - 有人必须知道挑战密码并拥有您的 Yubikey 才能解锁您的硬盘(或找到您的初始密码,您现在将其用作备份) . 但是,如果攻击者知道您的挑战密码(例如,在您输入密码时通过“肩膀冲浪”)并且只能在短时间内访问您的 Yubikey,那么攻击者解密硬盘在技术上是可行的。使用challenge passphrase他们可以得到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 20.04 更新:
省略 1 和 2 步骤
因为现在在 Ubuntu 20.04 repo 中所有的包都可用,所以只需安装 yubikey-luks 为:
步骤 3
这里需要注意一件事,您可能希望向
-ochal-btn-trig
命令添加一个参数ykpersonalize
。它有什么作用?它将等待 15 秒以等待 YubiKey 上的按钮按下(如果你在 yubikey 上有按钮,则为 ofc),up2u。
步骤 5
当您重新启动计算机时,您不会看到来自 的消息
/etc/ykluks.cfg
,为什么?因为不知何故,这个脚本不会修改一个/etc/crypttab
.好的,所以现在我们必须修改一个
/etc/crypttab
, 来添加:keyscript=/usr/share/yubikey-luks/ykluks-keyscript
,修改前的样子?
您的分区可以是任何东西,fe:,
sda3_crypt
即使您的系统处于打开状态,sdb
也不要担心,忽略它。修改后的样子?
只需添加带有keyscript的部分。
非常重要:不要错过选项之间的逗号,因为你会搞砸配置。
非常重要 v2:在下一步之前,验证 keyscript 路径,检查你是否有这个文件,如果没有,idk 抱歉。
第 6 步:
sudo update-initramfs -u
学分
知识分享自:https ://infosec-handbook.eu/blog/yubikey-luks/
就是这样,不客气。
Ubuntu 19.04 更新:
似乎从 Ubuntu 19.04(也许是 18.10,我没有尝试那个版本)开始,
cryptsetup
已经发生了足以打破yubikey-luks
过去工作方式的变化。来自上游存储库的这个提交似乎实现了一个修复,但原始存储库自 2018 年 10 月以来似乎没有更新。我发现这个 repo 的分支有修复,以及其他一些整理 -起来,并设法构建了一个适用于 19.04 的包。由于我找不到更新后的分支的现有版本,
yubikey-luks
开始工作的方法包括获取源代码并在本地构建 DEB 包,然后安装它。按照我之前的回答中的步骤进行操作,除了将步骤 1 替换为以下内容:
1. 获取 yubikey-luks 源码,构建并安装包
使用以下命令安装构建依赖项:
然后下载并解压缩源存档:
构建包:
然后安装它:
然后继续执行我第一个答案中的其余步骤。
希望在 19.10 之前
yubikey-luks
可以更新主要 Ubuntu 存档中的版本,这样就不需要手动构建了。作为奖励,新版本有一个配置文件,可以在
/etc/ykluks.cfg
. 启动时显示的消息可以在此文件中配置。即使您使用 2FA,有人仍然可以在您解锁卷后获得您的 LUKS 密钥,并在以后使用它来解锁。
有两个项目(非 Ubuntu)使用 yubikey 并且每次用户登录时也会更改 LUKS 密钥。这样即使以前的密钥和/或密码以某种方式已知,也很难访问系统攻击者。这是为真正偏执的人准备的:)
这些项目是:
虽然它们不能直接用于 Ubuntu,但它们仍然可以进行调整。