sea*_*ano 30 encryption security password luks yubikey
我最近买了一个 Yubikey Neo——一个漂亮的小硬件第二因素身份验证设备。它主要用于一次性密码和新兴的 U2F 协议 - 但从 Yubikey 版本 2 开始,它也支持 HMAC-SHA1 质询-响应身份验证。HMAC-SHA1 结合了一个秘密密钥(存储在 Yubikey 中)并将其与密码短语结合以生成响应。
如何将 Yubikey 与我的 Ubuntu FDE 设置相结合,以将 2FA 与我的加密硬盘一起使用?
sea*_*ano 38
一个名为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。
更新:从 Ubuntu 19.04 开始,主存储库中的软件在更新到cryptsetup. 有关如何解决该问题的详细信息,请参阅我的其他答案。
如果您有问题,请添加评论!
为此,您必须设置 LUKS 全盘加密并使其正常工作。您可以通过在安装 Ubuntu 时选择适当的选项来执行此操作。为了获得最大的安全性,您应该在安装过程中选择一个非常强大的密码。如果您的密码不符合标准,您应该在继续之前将其更改为更好的密码(此处有更详细的说明)。
下面的方法不会替换任何现有的密码,而是将另一个密码添加到 LUKS 插槽之一。因此,如果您丢失了 Yubikey,您仍然可以使用任何现有密码解锁您的计算机 - 我建议您记下它并将其隐藏在安全的地方 - 在此过程中您还需要几次。您的新 Yubikey 挑战密码应该仍然相当强大,但不必与您在安装 Ubuntu 时使用的密码一样长。
打开终端,然后运行以下命令:
sudo add-apt-repository ppa:privacyidea/privacyidea
Run Code Online (Sandbox Code Playgroud)
出现提示时按 Enter,然后运行:
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令安装软件包:
sudo apt-get install yubikey-luks
Run Code Online (Sandbox Code Playgroud)
不需要 PPA,您可以使用以下命令安装软件包:
sudo apt-get install yubikey-luks
Run Code Online (Sandbox Code Playgroud)
有关如何从 Ubuntu 19.04 的源代码构建包的信息,请参阅此答案yubikey-luks。
如果您将 Yubikey 的 HMAC-SHA1 功能用于其他用途,则可以跳过此部分。它将擦除第二个 Yubikey 插槽中的任何配置,因此如果您将此 Yubikey 用于其他目的的 HMAC-SHA1 ,请不要执行此步骤。
您需要通过安装所需的软件来设置您的 Yubikey 以与 Ubuntu 一起使用,无论是从Ubuntu 14.04 上的 Yubico PPA还是从 16.04 及更高版本上的主 Ubuntu 存储库。
如果您之前没有这样做,请添加 PPA 并使用以下命令安装软件包:
sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization
Run Code Online (Sandbox Code Playgroud)
sudo apt-get install yubikey-personalization
Run Code Online (Sandbox Code Playgroud)
现在我们需要使用 HMAC-SHA1 配置对 Yubikey 的第二个插槽进行编程。这将清除您之前的插槽配置,默认情况下该配置为空。同样,如果您将 HMAC-SHA1 用于其他用途,请不要发出此命令 - 它会清除您的配置。对于此 LUKS 设置,您可以安全地在 Yubikey 中使用与其他用途相同的密钥。(例如,使用 LUKS+Yubikey 的另一台计算机)。
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
Run Code Online (Sandbox Code Playgroud)
终端将显示有关所做更改的一些信息。您不需要记下这一点,但它会显示 Yubikey 在 HMAC-SHA1 算法中使用的密钥,以在收到质询时计算响应。
现在我们将编辑 LUKS 配置以附加来自 Yubikey 的响应作为解密密钥之一。
我们需要指定的分区取决于您是使用 BIOS 还是 UEFI 来引导您的机器。对于 BIOS,加密卷/dev/sda5默认为 at ,对于 UEFI ,加密卷为/dev/sda3。您可以通过打开disks实用程序并确认分区的路径来检查这一点- 它应该是sda3或sda5。注意:在带有 NVMe 磁盘的较新计算机上,路径类似于/dev/nvme0n1p3.
在终端中运行它:
sudo yubikey-luks-enroll -d /dev/sda3 -s 7
Run Code Online (Sandbox Code Playgroud)
这将写入 LUKS 配置的插槽 7,按照安装程序中的提示进行操作(根据您运行的版本,它们会略有不同)。
那你就大功告成了!您应该能够重新启动您的计算机,如果您的 Yubikey 已插入,那么您可以输入您的挑战密码并使用 Yubikey 作为第二个因素来解锁 LUKS 分区并启动系统。解密硬盘驱动器后,您可以删除 Yubikey。
如果您丢失了 Yubikey,您仍然可以输入您的原始密码(希望很长)来解密硬盘驱动器,然后您可以再次按照此步骤注册新的 Yubikey。
以后更改密码非常简单,只需使用此命令重置密钥即可。重置密钥并不是完全必要的,但不会有什么坏处。请记住,这会破坏之前的密钥,如果您将 HMAC-SHA1 用于此 Yubikey 的其他用途,请不要这样做。(例如,使用 LUKS+Yubikey 的另一台计算机)。
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
Run Code Online (Sandbox Code Playgroud)
然后,类似于上面的第 4 步,将新密码注册到 LUKS 密钥槽中,除了选择使用以下命令清除槽 7:
sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c
Run Code Online (Sandbox Code Playgroud)
当提示时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 卷来保护您的数据。
小智 5
因为现在在 Ubuntu 20.04 repo 中所有软件包都可用,所以只需将 yubikey-luks 安装为:
sudo apt install yubikey-luks
Run Code Online (Sandbox Code Playgroud)
这里需要关注的一件事是,您可能希望向-ochal-btn-trig命令中添加一个参数ykpersonalize。
它有什么作用?它将等待 15 秒以等待 YubiKey 上的按钮按下(如果您在 yubikey 上有按钮,则为关闭),up2u。
当您重新启动计算机时,您将看不到来自 的消息/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
Run Code Online (Sandbox Code Playgroud)
你的分区可以是任何东西, fe: sda3_crypt,即使你有你的系统sdb也不要担心,忽略它。
修改后的效果如何?
cat /etc/crypttab
[partition] UUID=1b2c1618-dc62-4d32-ab30-ebc23cb28cea none luks,keyscript=/usr/share/yubikey-luks/ykluks-keyscript,discard
Run Code Online (Sandbox Code Playgroud)
只需添加部分keyscript。
非常重要:不要错过选项之间的逗号,因为你会搞砸配置。
非常重要的 v2:在下一步之前,验证 keyscript 路径,检查您是否有这个文件,如果没有,对不起。
sudo update-initramfs -u
知识分享自:https : //infosec-handbook.eu/blog/yubikey-luks/
就是这样,不客气。
| 归档时间: |
|
| 查看次数: |
34137 次 |
| 最近记录: |