标签 Yubikey 下的文章

FIDO U2F 安全密钥是一种小型的基于 USB/NFC 的设备。它是一种硬件安全令牌,具有多个安全相关的用途模块。FIDO U2F 标准兼容的密钥品牌有多种,包括 NitroKey、SoloKey v2 和 YubiKey。与类似 Yubico OTP 的专有协议相比,FIDO 协议是不依赖特定硬件令牌的,并且使用的工具也不依赖特定制造商。

本文介绍了 FIDO 协议,并展示了如何安装和启用 FIDO U2F 安全密钥作为替代身份验证因素,以用于登录终端、GDM 或进行 sudo 认证。

对于 YubiKey,特别是其不支持 FIDO2/U2F 的旧版设备,请参阅之前的文章:

如何在 Fedora Linux 上使用 YubiKey

本文不涵盖存储 OpenPGP 密钥或 X.509 证书的操作,因为这些功能与硬件相关,不属于 FIDO U2F 标准的一部分。

保留备用安全密钥

一旦你开始使用安全令牌,就必须考虑到自己可能会被锁定在与这些令牌相关联的账户之外的情况。由于硬件安全令牌是独特的,并且被设计为非常难以复制,你不能像在使用 KeePass 或 AndOTP 等软件保险库时那样制作备份。因此,你使用主要密钥进行的所有注册都应立即使用第二个备份密钥重复进行,并将其存储在安全的位置,甚至可能是保险箱中。

在实践中,这意味着你需要将两个硬件令牌注册到你的 Linux 和 Web 账户中,并生成两份 OpenSSH 私钥,并将这两份 OpenSSH 公钥上传到你使用的服务器和服务(例如 GitHub)中。

如果你丢失了一个密钥,你将需要使用第二个密钥登录与密钥注册的每个服务,删除丢失的密钥,并注册一个新密钥。对于使用 FIDO2 协议的无密码登录尤其如此。

FIDO2、U2F 和 FIDO 联盟

FIDO2 是由 FIDO 联盟 维护的一系列标准。FIDO 联盟希望最终完全摒弃密码,并提供通过多个因素安全验证用户身份的过程,而无需使用密码。

该标准包括万维网联盟(W3C)的 网页认证 Web Authentication (WebAuthn)和 FIDO 联盟的 客户端到认证器协议 Client-to-Authenticator Protocol (CTAP)。WebAuthn 是一种用于请求和处理公钥挑战进行认证的标准 API。通过这个标准,浏览器会向客户端发送一个 挑战 challenge ,然后客户端使用私钥生成一个 响应 response ,挑战者再使用之前交换的公钥进行验证。如何生成挑战答案对于服务来说是不可知的,而是由 CTAP 控制。用户可能会被要求使用多种验证方法,如生物识别、PIN 或存在性检查(或这些方法的组合)。这些验证方式在认证时与注册密钥时的方式相同。

为了保护与硬件令牌的任何交互,可以选择设置一个访问 PIN,并且默认情况下未设置。大多数密钥在连续八次输入访问 PIN 失败后将自动失效。恢复失效的密钥并设置新 PIN 的唯一方法是重置密钥。然而,当密钥重置时,所有其服务注册将丢失!

FIDO2 密钥还支持 FIDO U2F 协议(现已更名为 CTAP1)。该协议旨在提供第二或多因素(但非无密码)认证。Linux 的 PAM 认证系统也可以配置为使用 U2F 协议。虽然 FIDO U2F 不是为无密码认证设计的,但 U2F PAM 模块允许无密码认证。

安全影响

FIDO2 / U2F 通过将安全密钥与用户账户绑定来工作。大多数密钥默认启用/使用基本的存在性检查。它们通常通过点亮并提示你触摸密钥来进行存在性检查。FIDO2 PIN 是可选的,默认情况下未设置。当密钥用于登录 Linux 帐户或用于使用 sudo 时,只需确保设备和密钥物理上存在即可。FIDO2 PIN 是一个重要的附加验证步骤,用于确保只有你才能使用密钥进行身份验证。

等一下!现在我还要记住额外的 PIN 吗?这不就是一个更短的密码吗?

—— 担心的读者

FIDO2 PIN 不是密码,它是一个简短、容易记住的短语。这并不是一个问题,因为:

  1. 你需要物理访问密钥 需要知道 PIN。
  2. 输入 PIN 错误达到八次会使密钥失效,这使得暴力破解变得困难。

相反地,现在你可以使用存储在密码管理器中的安全密码,而无需记住它。

谷歌在 2016 年进行的一项案例研究,题为 《安全密钥:现代网络的实用密码学第二因素》,显示了安全密钥有效地保护用户免受密码重用、钓鱼和中间人攻击的影响。

使用 PAM 进行用户认证

本地系统认证使用 可插拔认证模块(PAM)。U2F 设备的 PAM 模块(因此进行认证)是 pam_u2f。你的密钥是否支持 FIDO2 或 FIDO U2F 取决于其固件版本和硬件型号。

设置如下:

  1. 安装 PAM 模块。
  2. 将密钥注册到你的用户账户上。
  3. 使用 authselect 在 PAM 中激活智能卡支持。

authselect 是一个用于配置带有可重现配置文件的 PAM 的工具。使用 authselect 的配置文件可以避免手动修改 /etc/pam.d 目录下的配置文件。

依赖项

所需的软件包可在官方仓库中获取。

[…]$ sudo dnf install pam-u2f pamu2fcfg fido2-tools

在密钥上设置 FIDO2 PIN

FIDO2 标准定义了一种用于访问保护的可选 PIN。如果 PIN 丢失或失效,没有 PUK 或其他恢复方式,请确保你有一种备用的身份验证方法。如果通过连续输入无效的 PIN 使 PIN 失效,恢复的唯一方法是重置密钥。然而,重置密钥会删除其所有凭据,并将其与以前注册的所有服务断开连接。

fido2-tools 包含一个用于设置密钥的 FIDO2 PIN 的工具: fido2-token。使用 fido2-token -L 获取当前连接的 FIDO2 设备列表,并使用 fido2-token -C </path/to/device> 设置一个新的 PIN:

[…]$ fido2-token -L
/dev/hidraw1: vendor=0x1050, product=0x0407 (Yubico YubiKey OTP+FIDO+CCID)
[…]$ fido2-token -C /dev/hidraw1
Enter current PIN for /dev/hidraw1:
Enter new PIN for /dev/hidraw1:

将安全密钥注册到本地账户

使用工具 pamu2fcfg 检索一个配置行,该行将放入 ~/.config/Yubico/u2f_keys 中。pam_u2f 是由 Yubico 提供的通用 U2F 密钥模块,因此使用 Yubico 特定的默认配置路径。该文件中的每个配置行由用户名和密钥特定的凭据/配置部分以冒号分隔。确保每个用户仅使用一行。

fedora-user:owBYtPIH2yzjlSQaRrVcxB...Pg==,es256,+presence+pin[:该用户另外的密钥]

如果密钥受 PIN 保护,你将被要求输入 PIN 来进行此操作。对于第一个密钥的初始注册,请使用以下命令:

[…]$ mkdir -p ~/.config/Yubico
[…]$ pamu2fcfg --pin-verification > ~/.config/Yubico/u2f_keys

要将另一个密钥(例如备份密钥)添加到此单用户配置中,请使用以下命令:

[…]$ pamu2fcfg --nouser --pin-verification >> ~/.config/Yubico/u2f_keys

pam_u2f 还支持使用一个中心身份验证文件。在这种情况下,请确保每个用户使用一行,并将给定用户的所有密钥保持在同一行上。如果两行引用相同的用户名,那么只有最后一行将被使用!请参阅 pam\_u2f 手册页 获取所有可用选项的详细信息。

使用 authselect 配置 PAM

authselect 是一个用于控制系统 PAM 配置的工具。它引入了配置文件作为额外的抽象层。一个 authselect 配置文件可以更改多个 PAM 配置文件。配置文件具有控制附加功能和行为的参数,例如启用 FIDO U2F 安全密钥。有关 authselect 的详细介绍计划在未来的文章中进行。

显示当前活动的 authselect 配置文件。如果选择了 SSSD(系统安全服务守护程序)配置文件并启用了 U2F 支持,则输出可能类似于以下内容:

[…]$ authselect current
Profile ID: sssd
Enabled features:
- with-pam-u2f

使用 authselectwith-pam-u2f 标志,在 PAM 中激活 FIDO U2F 支持:

[…]$ sudo authselect select sssd with-pam-u2f

如果你还想使用指纹读取器,必须同时启用这两个功能:

[…]$ sudo authselect select sssd with-pam-u2f with-fingerprint

这会在 PAM 中激活具有 pam_u2f 和指纹读取器支持的 SSSD 配置文件。例如,当使用上述 authselect 配置文件在终端上使用 sudo 时,首先会要求你提供指纹,如果指纹识别失败,则使用 U2F 密钥。然而,GDM 将首先使用 U2F 密钥。

解锁 GNOME 钥匙环守护程序

当使用生物识别、U2F 密钥或任何其他不需要密码短语登录 GNOME 的方法时,无法自动解锁“登录”钥匙环。这是因为,默认情况下,钥匙环的密码短语设置为与你的登录密码短语相同。通常,PAM 将你的登录密码短语传递给钥匙环守护程序。由于你在通过生物识别或 U2F 密钥进行身份验证时不需要输入密码短语,因此 PAM 没有密码短语可以传递给钥匙环守护程序。这个问题没有简单直接的解决方法。

如果你为家目录使用 LUKS 加密并且操作的是单用户系统,你可以从钥匙环中移除密码短语。这将使你的 GNOME 钥匙环在文件级别上保持未加密。但它仍然在块级别上由 LUKS 加密,因为 LUKS 加密与单用户系统上的默认基于文件的钥匙环加密等效。由于钥匙环的加密仅旨在保护其内容免受离线访问,钥匙环在登录后将被解密/解锁,任何运行时应用程序或恶意软件在解锁后都有可能访问钥匙环的内容。由于 LUKS 也是一种离线保护机制,因此可以认为它是钥匙环正常基于文件的加密的替代选择。

如果你的系统被多个用户使用,则 LUKS 加密和钥匙环的正常基于文件的加密不是等效的。在具有只由 LUKS 保护的钥匙环的多用户系统中,具有解密磁盘和引导系统授权的任何用户都能够访问同一系统上的任何其他用户的钥匙环。

移除 GNOME “登录”钥匙环密码短语非常简单。只需设置一个新的空密码,钥匙环将被解锁,并且其内容将以未加密的方式存储在文件级别上。可以使用图形实用程序 Seahorse(也称为“密码和密钥”)来在 GNOME “登录”钥匙环上设置一个空密码。

警惕和其他用例

即将发布的文章将探讨如何使用 U2F Dracut 插件使用 FIDO2/U2F 密钥解锁 LUKS 加密的磁盘。

OpenSSH 8.2+ 支持使用 ed25519-sk 安全密钥。这个主题已经在之前的文章《如何在 Fedora Linux 上使用 YubiKey》中涉及到。

需要注意的是,FIDO2/U2F 是一种认证标准。还有其他用于安全令牌的用例(主要由 Yubico 建立),例如 (T)OTP、PIV(用于 x509 密钥管理)或 OpenPGP,这些用例不是一般性的,而是具体硬件上的用例。

(题图:MJ/4bd195dc-130b-4ef2-af6c-9a6ef5d54223)


via: https://fedoramagazine.org/use-fido-u2f-security-keys-with-fedora-linux/

作者:Alexander Wellbrock 选题:lujun9972 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你格外谨慎,会使用最好的认证方法来保护你的在线帐户的安全,你可能知道 Yubico。他们制作的硬件认证安全密钥可以取代双因素认证,并摆脱在线账户的密码认证系统。

基本上,你只需将安全密钥插在电脑上,或者使用智能手机上的 NFC 来解锁访问账户。这样一来,你的认证方式就会完全保持离线状态。

当然,你可以随时使用 Linux 中好用的密码管理器。但如果你拥有一家公司,或为公司工作,或者只是对自己的隐私和安全格外谨慎,想增加一层额外的安全保护,这些硬件安全密钥可能值得一试。这些设备最近得到的进一步普及。

Yubico 的最新产品 YubiKey 5C NFC 可能令人印象深刻,因为它既可以作为 Type-C 的 USB 密钥使用,也可以作为 NFC 使用(只要用密钥碰触你的设备)。

下面,让我们来看看这款安全密钥的概况。

(LCTT 译注:请注意本文中的购买连接是原文作者的受益链接,如果你对此担心,请阅读其受益政策。)

Yubico 5C NFC:概述

YubiKey 5C NFC 是最新的产品,它同时使用 USB-C 和 NFC。因此,你可以轻松地将它插入 Windows、macOS 和 Linux 电脑。除了电脑,你还可以将其与 Android 或 iOS 智能手机或平板电脑配合使用。

不仅仅局限于 USB-C 和 NFC 的支持(这是件好事),它也恰好是世界上第一个支持智能卡的多协议安全密钥。

对于普通消费者来说,硬件安全密钥并不那么常见,因为它的成本很高。但在疫情流行的过程中,随着远程办公的兴起,一个更安全的认证系统肯定会派上用场。

以下是 Yubico 在其新闻稿中提到的内容:

Yubico 首席产品官 Guido Appenzeller 表示:“如今人们工作和上网的方式与几年前大不相同,尤其是在过去几个月内。用户不再仅仅被一种设备或服务所束缚,也不再希望受限于此。这就是为什么 YubiKey 5C NFC 是我们最受欢迎的安全密钥之一。它与大多数现代电脑和手机兼容,并可以在一系列传统和现代应用中良好运行。归根结底,我们的客户渴望的是无论如何都能“正常工作”的安全性。”

YubiKey 5C NFC 支持的协议有 FIDO2、WebAuthn、FIDO U2F、PIV(智能卡)、OATH-HOTP 和 OATH-TOTP (基于哈希和时间的一次性密码)、OpenPGP、YubiOTP 和挑战应答认证。

考虑到所有这些协议,你可以轻松地保护任何支持硬件认证的在线帐户,同时还可以访问身份访问管理 (IAM) 解决方案。因此,这对个人用户和企业来说都是一个很好的选择。

定价和渠道

YubiKey 5C NFC 的价格为 55 美元。你可以直接从他们的在线商店订购,或者从你所在国家的任何授权经销商处购买。花费可能也会根据运输费用的不同而有所不同,但对于那些想要为他们的在线账户提供最佳安全级别的用户而言,55 美元似乎是个不错的价格。

值得注意的是,如果你订购两个以上的 YubiKeys,你可以获得批量折扣。

总结

无论你是想保护你的云存储帐户还是其他在线帐户的安全,如果你不介意花点钱来保护你的数据安全,Yubico 的最新产品是值得一试的。

你是否使用过 YubiKey 或其他安全密钥,如 LibremKey 等?你对它的体验如何?你认为这些设备值得花钱吗?


via: https://itsfoss.com/yubikey-5c-nfc/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

介绍

今天,Fedora 提供了多种方式来提高我们账户的身份认证的安全性。当然,它有我们熟悉的用户名密码登录方式,它也同样提供了其他的身份认证选项,比如生物识别、指纹、智能卡、一次性密码,甚至是 询问-响应 challenge-response 身份认证。

每种认证方式都有明确的优缺点。这点本身就可以成为一篇相当冗长的文章的主题。Fedora 杂志之前就已经介绍过了这其中的一些选项:

在现在的 Fedora 版本中,最安全的方法之一就是离线硬件询问-响应。它也同样是最容易部署的方法之一。下面是具体方法。

询问-响应认证

从技术上来讲,当你输入密码的时候,你就正在响应用户名询问。离线的询问、响应包含了这些部分:首先是需要你的用户名,接下来,Fedora 会要你提供一个加密的物理硬件的令牌。令牌会把另一个其存储的加密密钥通过 可插入式身份认证 Pluggable Authentication Module 模块(PAM)框架来响应询问。最后,Fedora 才会提示你输入密码。这可以防止其他人仅仅使用了找到的硬件令牌,或是只使用了账户名密码而没有正确的加密密钥。

这意味着除了你的账户名密码之外,你必须事先在你的操作系统中注册了一个或多个加密硬件令牌。你必须保证你的物理硬件令牌能够匹配你的用户名。

一些询问-响应的方法,比如一次性密码(OTP),在硬件令牌上获取加密的代码密钥,然后将这个密钥通过网络传输到远程身份认证服务器。然后这个服务器会告诉 Fedora 的 PAM 框架,这是否是该用户的一个有效令牌。如果身份认证服务器在本地网络上,这个方法非常好。但它的缺点是如果网络连接断开或是你在没有网的远程端工作。你会被锁在系统之外,直到你能通过网络连接到身份认证服务器。

有时候,生产环境会采用通过 Yubikey 使用一次性密码(OTP)的设置,然而,在家庭或个人的系统上,你可能更喜欢询问-响应设置。一切都是本地的,这种方法不需要通过远程网络调用。下面这些过程适用于 Fedora 27、28 和 29.

准备

硬件令牌密钥

首先,你需要一个安全的硬件令牌密钥。具体来说,这个过程需要一个 Yubikey 4、Yubikey NEO,或者是最近发布的、同样支持 FIDO2 的 Yubikey 5 系列设备。你应该购买它们中的两个,一个做备份,以避免其中一个丢失或遭到损坏。你可以在不同的工作地点使用这些密钥。较为简单的 FIDO 和 FIDO U2F 版本不适用于这个过程,但是非常适合使用 FIDO 的在线服务。

备份、备份,以及备份

接下来,为你所有的重要数据制作备份,你可能想在克隆在 VM 里的 Fedora 27/28/29 里测试配置,来确保你在设置你自己的个人工作环境之前理解这个过程。

升级,然后安装

现在,确定你的 Fedora 是最新的,然后通过 dnf 命令安装所需要的 Fedora Yubikey 包。

$ sudo dnf upgrade
$ sudo dnf install ykclient* ykpers* pam_yubico*

如果你使用的是 VM 环境,例如 Virtual Box,确保 Yubikey 设备已经插进了 USB 口,然后允许 VM 控制的 USB 访问 Yubikey。

配置 Yubikey

确认你的账户访问到了 USB Yubikey:

$ ykinfo -v
version: 3.5.0

如果 Yubikey 没有被检测到,会出现下面这些错误信息:

Yubikey core error: no yubikey present

接下来,通过下面这些 ykpersonalize 命令初始化你每个新的 Yubikey。这将设置 Yubikey 配置插槽 2 使用 HMAC-SHA1 算法(即使少于 64 个字符)进行询问响应。如果你已经为询问响应设置好了你的 Yubikey。你就不需要再次运行 ykpersonalize 了。

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

一些用户在使用的时候将 YubiKey 留在了他们的工作站上,甚至用于对虚拟机进行询问-响应。然而,为了更好的安全性,你可能会更愿意使用手动触发 YubiKey 来响应询问。

要添加手动询问按钮触发器,请添加 -ochal-btn-trig 选项,这个选项可以使得 Yubikey 在请求中闪烁其 LED。等待你在 15 秒内按下硬件密钥区域上的按钮来生成响应密钥。

$ ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -ochal-btn-trig -oserial-api-visible

为你的每个新的硬件密钥执行此操作。每个密钥执行一次。完成编程之后,使用下面的命令将 Yubikey 配置存储到 ~/.yubico

$ ykpamcfg -2 -v
debug: util.c:222 (check_firmware_version): YubiKey Firmware version: 4.3.4

Sending 63 bytes HMAC challenge to slot 2
Sending 63 bytes HMAC challenge to slot 2
Stored initial challenge and expected response in '/home/chuckfinley/.yubico/challenge-9992567'.

如果你要设置多个密钥用于备份,请将所有的密钥设置为相同,然后使用 ykpamcfg 工具存储每个密钥的询问-响应。如果你在一个已经存在的注册密钥上运行 ykpersonalize 命令,你就必须再次存储配置信息。

配置 /etc/pam.d/sudo

现在要去验证配置是否有效,在同一个终端窗口中,你需要设置 sudo 来要求使用 Yubikey 的询问-响应。将下面这几行插入到 /etc/pam.d/sudo 文件中。

auth required pam_yubico.so mode=challenge-response

将上面的 auth 行插入到文件中的 auth include system-auth 行的上面,然后保存并退出编辑器。在默认的 Fedora 29 设置中,/etc/pam.d/sudo 应该像下面这样:

#%PAM-1.0
auth required pam_yubico.so mode=challenge-response
auth include system-auth
account include system-auth
password include system-auth
session optional pam_keyinit.so revoke
session required pam_limits.so
session include system-auth

保持这个初始的终端窗口打开,然后打开一个新的终端窗口进行测试,在新的终端窗口中输入:

$ sudo echo testing

你应该注意到了 Yubikey 上的 LED 在闪烁。点击 Yubikey 按钮,你应该会看见一个输入 sudo 密码的提示。在你输入你的密码之后,你应该会在终端屏幕上看见 “testing” 的字样。

现在去测试确保失败也正常,启动另一个终端窗口,并从 USB 插口中拔掉 Yubikey。使用下面这条命令验证,在没有 Yubikey 的情况下,sudo 是否会不再正常工作。

$ sudo echo testing fail

你应该立刻被提示输入 sudo 密码,但即使你输入了正确密码,登录也应该失败。

设置 Gnome 桌面管理器(GDM)

一旦你的测试完成后,你就可以为图形登录添加询问-响应支持了。将你的 Yubikey 再次插入进 USB 插口中。然后将下面这几行添加到 /etc/pam.d/gdm-password 文件中:

auth required pam_yubico.so mode=challenge-response

打开一个终端窗口,然后运行下面这些命令。如果需要,你可以使用其他的编辑器:

$ sudo vi /etc/pam.d/gdm-password

你应该看到 Yubikey 上的 LED 在闪烁,按下 Yubikey 按钮,然后在提示符处输入密码。

修改 /etc/pam.d/gdm-password 文件,在已有的 auth substack password-auth 行上添加新的行。这个文件的顶部应该像下面这样:

auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth required pam_yubico.so mode=challenge-response
auth substack password-auth
auth optional pam_gnome_keyring.so
auth include postlogin

account required pam_nologin.so

保存更改并退出编辑器,如果你使用的是 vi,输入键是按 Esc 键,然后在提示符处输入 wq! 来保存并退出。

结论

现在注销 GNOME。将 Yubikey 插入到 USB 口,在图形登录界面上点击你的用户名。Yubikey LED 会开始闪烁。触摸那个按钮,你会被提示输入你的密码。

如果你丢失了 Yubikey,除了重置密码之外,你还可以使用备份的 Yubikey。你还可以给你的账户增加额外的 Yubikey 配置。

如果有其他人获得了你的密码,他们在没有你的物理硬件 Yubikey 的情况下,仍然不能登录。恭喜!你已经显著提高了你的工作环境登录的安全性了。


via: https://fedoramagazine.org/login-challenge-response-authentication/

作者:nabooengineer 选题:lujun9972 译者:hopefully2333 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出