跳转至内容

YubiKey

来自 ArchWiki

YubiKey 是一款小型 USB 安全令牌。根据型号不同,它可以

虽然提供了许多功能,但较新版本的 YubiKey 不以开源形式发布。替代品有 SoloTKeyNitrokey

安装

管理工具

  • YubiKey Manager — Python 库和命令行工具 (ykman),用于通过 USB 配置和查询 YubiKey。
https://developers.yubico.com/yubikey-manager/ || yubikey-manager
注意 安装后,启用 pcscd.service;或者,启用 pcscd.socket 可能很有用。
警告 yubikey-manager-qtAUR 曾经有一个 GUI 版本,但现在已被 Yubico 弃用。由于与 Python 和 ykman 的新版本不兼容,该软件包也完全损坏
  • Yubico Authenticator — GUI 工具,用于访问和重置信息、配置 基于插槽的凭据,以及读取 YubiKey 的 OATH 代码。
https://developers.yubico.com/yubioath-flutter/ || yubico-authenticatorAUR
  • YubiKey Personalization — 库和工具,用于通过 OTP USB 连接配置和查询 YubiKey。比 ykman 功能更强大,但更难使用。有一个可选的 GUI。
https://developers.yubico.com/yubikey-personalization/ || yubikey-personalization, yubikey-personalization-gui
警告 Yubico 宣布 YubiKey Personalization 于 2025 年 2 月 19 日结束生命周期。将在 2026 年 2 月 19 日后停止更新。

认证工具

  • pam-u2f — Yubico 的 PAM 用户认证,支持 U2F。补充或替换使用 YubiKey 进行密码认证。
https://developers.yubico.com/pam-u2f/ || pam-u2f
  • libfido2 — 客户端 U2F 支持。使 Web 浏览器能够使用 U2F 协议通过 YubiKey 进行身份验证。
https://developers.yubico.com/libfido2/ || libfido2
  • YubiKey Full Disk Encryption — 使用挑战-响应模式创建强大的 LUKS 密码。支持全盘加密。
https://github.com/agherzan/yubikey-full-disk-encryption || yubikey-full-disk-encryption

输入

YubiKey 通过 USB 接收 API 调用输入,并通过按键进行输入。

按钮非常敏感。根据上下文,触摸它会执行以下操作之一

  • 触发静态密码或一次性密码 (OTP)(短按插槽 1,长按插槽 2)。这是默认行为,容易被意外触发。
  • 确认/允许功能或访问。LED 会亮起提示用户。
  • 插入/弹出智能卡

输出

YubiKey 将这些输入转换为输出

  • 击键(模拟 USB 键盘),用于输入静态密码和 OTP。(请注意,静态密码容易受到键盘记录器的攻击。)
  • 内置 LED
    • 插入时闪烁一次,有助于故障排除。
    • 需要按下按钮以允许 API 响应时,会持续闪烁。
  • USB 上的 API 响应。这用于
    • 挑战-响应请求(使用 Yubico OTP 模式或 HMAC-SHA1 模式计算)
    • U2F 挑战-响应请求
    • CCID 智能卡相关请求

USB 连接模式

根据 YubiKey 型号,设备提供多达三种不同的 USB 接口。其中两个接口实现了 USB HID(人类接口设备)设备类;第三个是智能卡接口(CCID)。所有三个都可以独立启用或禁用,从而控制其关联的协议。

下表显示了哪些协议使用哪些接口

协议 接口
OTP 键盘 HID
FIDO 其他 HID
PIV CCID
OpenPGP CCID
OATH CCID

ykman 使用“模式”一词,命名为 OTP、FIDO 和 CCID。

注意 ykman 在 0.6.1 版本(2018-04-16)中将“U2F”重命名为“FIDO”。https://developers.yubico.com/yubikey-manager/Release_Notes.html

获取已启用的模式

对于 5 版本之前的 YubiKey

$ ykman config mode
Current connection mode is: OTP+FIDO+CCID
注意 ykman mode 命令已被弃用,将来可能会被移除。

对于 YubiKey 5 版本

$ ykman info
Device type: YubiKey 5 NFC
Serial number: XXXXXXXXX
Firmware version: 5.4.3
Form factor: Keychain (USB-A)
Enabled USB interfaces: OTP, FIDO, CCID
NFC transport is enabled.

Applications    USB     NFC
FIDO2           Enabled Enabled
OTP             Enabled Enabled
FIDO U2F        Enabled Enabled
OATH            Enabled Enabled
YubiHSM Auth    Enabled Enabled
OpenPGP         Enabled Enabled
PIV             Enabled Enabled

设置模式

所有模式均出厂启用。要更改它们

$ ykman mode [OPTIONS] MODE
  • MODE 可以是字符串,例如 OTP+FIDO+CCID,或缩写形式 o+f+c
  • MODE 可以是一个模式编号,它编码了多个已启用的模式。

如果您想使用它们,这里是一个模式编号的表格

0 仅 OTP 设备。
1 仅 CCID 设备。
2 OTP/CCID 复合设备。
3 仅 U2F 设备。
4 OTP/U2F 复合设备。
5 U2F/CCID 复合设备。
6 OTP/U2F/CCID 复合设备。
81 仅 CCID 设备,带触摸弹出。
注意 有些示例使用了模式编号 86,这是无效的。80 将被忽略,它会表现得像 6。

选项

  • --touch-eject — 按钮将插入和弹出智能卡。这仅在模式为仅 CCID 时有效;FIDO 和 OTP 必须禁用。
  • --autoeject-timeout SECONDS — 在一段时间后自动弹出智能卡。与 --touch-eject 具有相同的限制。
  • --chalresp-timeout SECONDS — 设置挑战-响应超时。

有关更多信息,请参阅 ykman mode --help

一次性密码

此功能名称有点误导,因为它还包括静态密码和挑战-响应功能。

此功能提供 2 个插槽,分别通过短按和长按按钮访问。每个插槽都可以配置为**一种**以下类型

  • Yubico OTP
  • OATH-HOTP
  • OATH-TOTP
  • 挑战-响应
  • 静态密码

每种功能在创建时都有几个配置选项,但一旦设置就无法读回。可以使用 ykman otp swap 交换插槽 1 和 2。

出厂配置

在新 YubiKey 上,插槽 1 预配置了 Yubico OTP。此初始 AES 对称密钥存储在 YubiKey 和 Yubico 身份验证服务器上。这允许针对 YubiCloud 进行验证,例如,可以使用 Yubico OTP 结合 Yubico Forum 网站或在 https://demo.yubico.com)。

警告 如果您覆盖了插槽 1 中的出厂密钥,则无法创建相同信任级别的密钥。出厂生成的 Yubico OTP 凭据以 CC 开头,而用户生成的凭据以 VV 开头。在安全或功能上没有根本区别,尽管某些服务仅信任 CC 凭据。有关更多信息,请参阅此论坛帖子

Yubico OTP

Yubico OTP 基于对称加密。更具体地说,每个 YubiKey 都包含一个该设备独有的 128 位 AES 密钥,该密钥也存储在验证服务器上。当需要密码时,YubiKey 会通过连接不同字段(如密钥 ID、计数器和随机数)并加密结果来创建令牌。

此 OTP 发送给目标系统,目标系统将其传递给验证服务器。验证服务器(也拥有密钥)解密它并验证其中的信息。结果返回给目标系统,目标系统然后可以决定是否授予访问权限。

YubiCloud 和验证服务器

Yubico 提供了一个免费无限访问的验证服务器,称为 YubiCloud。YubiCloud 了解所有 YubiKey 的出厂配置,并且是(例如)yubico-pam 使用的“默认”验证服务。Yubico 还提供开源实现[链接已失效 2025-08-16—HTTP 404]

注意 要验证 Yubico 验证服务器,您可以使用

配置和使用

在插槽 2 中生成新密钥,并将其上传到 YubiCloud(在浏览器中打开)

$ ykman otp yubiotp --generate-key --upload 2

有关更多信息,请参阅 ykman otp yubiotp --help

安全风险

AES 密钥泄露

您可以想象,AES 密钥应保持机密。它无法从 YubiKey 本身检索(至少不应该通过软件)。它也存在于验证服务器上,因此此服务器的安全性非常重要。

验证请求/响应篡改

由于目标系统依赖于验证服务器,可能的攻击是冒充它。为防止这种情况,目标系统需要验证服务器,可以使用 HMAC 或 HTTPS。

挑战-响应

将挑战发送到 YubiKey,YubiKey 根据某些秘密计算响应。相同的挑战始终产生相同的响应。没有秘密,即使有很多挑战-响应对,这种计算也是不可行的。

这可用于

  • 真正 2FA:向用户提供挑战,他们必须提供正确的响应以及密码。双方都必须拥有密钥。
  • “半”2FA:挑战充当密码,服务器存储正确的响应。这不是 OTP,如果任何人获得响应,他们将获得访问权限,但这更简单,因为服务器不需要密钥。

有两种挑战-响应算法

  • HMAC-SHA1
  • Yubico OTP

您可以使用 yubikey-personalization-gui 使用 GUI 进行设置,或按照以下说明进行操作

HMAC-SHA1 算法

在挑战响应模式下设置插槽 2,并使用生成的密钥

$ ykman otp chalresp --generate 2

您可以省略 --generate 标志以提供密钥,请参阅 ykman otp chalresp --help。提供密钥的主要优点是它可以用于设置第二个设备作为备份。例如,命令 openssl rand -hex 20 可以生成一个合适的密钥。

Yubico OTP 算法

ykman 似乎不支持设置 chal-yubico 算法,但您可以使用 ykpersonalize。在插槽 2 中生成随机密钥

$ ykpersonalize -2 -ochal-resp -ochal-yubico

有关更多信息,请参阅 ykpersonalize(1)

发送挑战

要发送挑战并获得响应,可以使用 ykchalresp -slot challenge 命令。例如,

$ ykchalresp -2 archie
12a19763be77d75af46fb76f0b737c117fa47205

返回一个 40 字节的 SHA1 哈希,该哈希对编程的插槽 2 是唯一的。不同的挑战会产生不同的唯一响应。

静态密码

您可以生成一个静态密码

$ ykman otp static --generate slot

或提供一个

$ ykman otp static slot password

您有多种选择;您可以设置生成密码的长度和字符集,以及是否发送 Enter 击键。有关更多信息,请参阅 ykman otp static --help

提示 大多数 YubiKey 只提供有限的(2 个)插槽来保存静态密码。设置一个挑战-响应插槽可以为无限的挑战提供静态哈希响应。虽然这些只是数字和较小字母,但响应长度提供了相当大的熵。

模拟 USB 键盘的局限性,或“为什么我的密码看起来这么弱?”

为了让 YubiKey 与大多数键盘布局兼容,密码默认限制为 ModHex 字母表(cbdefghijklnrtuv)、数字 0-9!。这些字符在大量键盘布局中使用的扫描码相同,从而确保了与大多数计算机的兼容性。

Yubico 发布了关于此主题的白皮书

OATH

YubiKey 提供 2 个 OATH 实现

OATH API
较新方法,根据型号可存储大约 30 个凭据。(YubiKey 4、NEO 及更新型号)
OTP 插槽
较旧方法,两个 OTP 插槽都可以存储一个凭据。(所有支持挑战-响应的型号)

OATH API

如果您更喜欢 GUI,可以使用 yubico-authenticatorAUR

ykman 可以使用 ykman oath uri 以 URI 格式添加代码。这是一个单行命令,可以从 QR 码图像添加凭据

$ zbarimg qr_code.png --quiet --raw | xargs ykman oath accounts uri

您也可以手动操作。编程一个 TOTP 密钥,需要触摸按钮才能生成代码

$ ykman oath accounts add --touch name secret

编程一个 HOTP 密钥

$ ykman oath accounts add --oath-type HOTP name secret

列出凭据

$ ykman oath accounts list

生成代码

$ ykman oath accounts code query

要查看所有可用的子命令,请参阅 ykman oath --help。要查看每个命令的信息,请使用 ykman oath subcommand --help

OTP 插槽实现

在插槽 2 中编程一个 HOTP

$ ykman otp hotp 2 key

编程一个 TOTP

$ ykman otp chalresp --totp slot key

生成一个 HOTP

$ ykman otp calculate slot

生成一个 TOTP

$ ykman otp calculate --totp slot

另请参阅:ykman otp --helphttps://developers.yubico.com/OATH/

U2F

使用 YubiKey 进行通用二次验证 (U2F) 非常简单,无需对密钥本身进行配置。请注意,此模式在某些文档和工具中也称为“FIDO”。您可以通过 ykman 工具进行一些有限的管理操作

  • 设置 PIN:ykman fido access change-pin
  • 删除单个凭据:ykman fido credentials delete QUERY
  • 重置所有凭据和 PIN:ykman fido reset

要使用 U2F 进行身份验证,请参阅 U2F 中的说明。

另请参阅 WebAuthn

CCID 智能卡

CCID(芯片卡接口设备)是一种 USB 标准设备类,供用作智能卡读卡器或直接通过 USB 连接的安全令牌(如 YubiKey)的 USB 设备使用。HID(人类接口设备)和 CCID 都是 USB 设备类,即它们属于同一类 USB 规范。HID 是针对计算机外围设备(如键盘)的规范。YubiKey 在 OTP 和 FIDO 模式下工作时,行为就像一个 USB(HID)键盘,但在使用 PIV 应用程序或作为 OpenPGP 设备时,会切换到 CCID 协议。

自 2015 年 11 月以来发货的所有 YubiKeys 默认应启用 CCID 模式[1][链接已失效 2025-04-06—HTTP 404]。至少启用 CCID 模式。请参阅 #获取已启用的模式

PIV

从 YubiKey NEO 开始,YubiKeys 在芯片中包含 PIV(个人身份验证)应用程序。PIV 是美国政府标准(FIPS 201),规定了使用 RSA 或 ECC(椭圆曲线密码学)的令牌如何用于个人电子识别。YubiKey NEO 仅支持 RSA 加密,后来的型号(YubiKey 4 和 5)支持 RSA 和 ECC。确切支持的算法取决于固件。例如,只有固件 5.7 及以上版本的 YubiKeys 才支持 RSA 3072、RSA 4096、Ed25519 和 X25519 密钥[2]。PIV 令牌的特点是它旨在保护私钥并在芯片上运行。私钥在安装到令牌后,永远不会离开令牌。可以选择在片上随机数生成器的帮助下在片上生成私钥。如果是在片上生成的,私钥将永远不会在芯片外处理,并且无法从令牌中恢复。使用 PIV 机制时,YubiKey 的行为就像一个 CCID 设备。

OpenPGP 智能卡

YubiKey 可以作为标准的 OpenPGP 智能卡;有关如何设置和使用它的说明,请参阅 GnuPG#SmartcardsGnuPG。Yubico 还提供了一些文档,请访问 https://developers.yubico.com/PGP/

如果您不想使用其他功能(U2F 和 OTP),可以将按钮配置为插入和弹出它,还可以设置自动弹出超时。有关更多信息,请参阅 #USB 连接模式

默认用户 PIN 为 123456,管理员 PIN 为 12345678。默认 PUK 也是 12345678。请记住更改所有 3 个。

用例

本节详细介绍如何将 YubiKey 用于各种身份验证目的。这绝不是详尽的列表。

全盘加密与 LUKS

您有几种选择

  • 挑战-响应: 对某个挑战的响应用作 LUKS 密钥。挑战可以作为密码用于真正的 2FA,或以明文形式存储用于 1FA。
  • GnuPG: 使用 yubikey 的PGP 智能卡功能。提供强大的 2FA,而无需复杂的密码。
  • FIDO HMAC 密钥: 如果您的 YubiKey 支持 U2F,它可以配置为返回一个对称密钥。
注意 磁盘的加密强度与其最弱的密钥一样强。配置好这些工具之一后,请考虑删除初始密码,或将其替换为一个非常长的密码。

通用先决条件

  • 一个可启动的 LUKS 加密系统,使用 encrypt mkinitcpio hook,并至少有一个空闲的密钥槽。
    • 除了 mkinitcpio-ykfdeAUR 之外,sd-encrypt hook 不受这些工具的任何支持。
  • 备份的 LUKS 头(可选,但建议)

挑战-响应

有关完整说明,请参阅 yubikey-full-disk-encryption官方文档。大致步骤如下

  1. 安装 yubikey-full-disk-encryption
  2. 配置 /etc/ykfde.conf
  3. 注册磁盘:# ykfde-enroll -d /dev/DISK -s LUKS_SLOT
  4. encrypt hook 之前添加 ykfde mkinitcpio hook
  5. 重新生成 initramfs.
注意 Plymouth 用户:将 plymouth-encrypt hook 替换为 ykfde hook。

有几种可用变体

  • 2FA:默认行为。注册设备和启动时必须提供挑战作为密码。
  • 1FA:在 ykfde.conf 中设置 YKFDE_CHALLENGE。请注意,这以纯文本形式存储。考虑禁用对此文件的非 root 读取权限。
  • NFC 支持(实验性)
  • 挂起与恢复支持 (实验性) 自动锁定加密卷在挂起时,在恢复时解锁。

必须重新生成 initramfs 才能使配置更改生效。

基于 systemd 的 initramfs

`sd-encrypt` hook 的用户可以安装 mkinitcpio-ykfdeAURmkinitcpio-ykfde-gitAUR 并按照 项目文档 中的说明进行操作。该过程与 yubikey-full-disk-encryption 大致相似。

GnuPG 加密密钥文件

实现此目的的工具之一是 initramfs-scencrypt;有关完整说明,请参阅其文档。请注意,截至 2022 年 10 月,此软件包不在 AUR 中,且未经彻底测试,尽管 GitHub 存储库提供了 PKGBUILD。

dm-crypt 页面提供了一些替代方案,尽管它们大多是旧论坛帖子的链接。

FIDO2 协议的 HMAC 秘密扩展

使用 YubiKey 进行全盘加密的另一种方法是利用 HMAC 秘密扩展 从 YubiKey 中检索 LUKS 密码。这可以通过密码短语进行保护。此功能至少需要 固件为 5.2.3+ 的 YubiKey 5。对于受密码短语保护的解决方案,请安装 khefinAUR 并按照 项目文档 中的说明进行操作。对于单因素(可选 PIN 保护)解决方案,并且从 systemd 248 开始,可以将 FIDO2 密钥用作 LUKS2 密钥槽。说明可在 作者的博文 中找到。

KeePass

KeePass 可以配置为支持 YubiKey;有关说明,请参阅 YubiKey 部分

SSH 密钥

CCID

如果您的 YubiKey 支持 CCID 智能卡,您可以将其用作硬件支持的 SSH 密钥,无论是基于 GPG 还是 PIV 密钥。Yubico 提供了良好的文档。

注意 YubiKey 上的 PIV 应用程序的默认 PIN 码是 123456;您可能需要更改它,以及默认的管理密钥。有关更多信息,请参阅 设备设置说明

U2F

您还可以使用 YubiKey 的 U2F 功能来创建硬件支持的 SSH 密钥。有关说明,请参阅 SSH 密钥#FIDO/U2F

PIV

yubikey-agentAUR 将 SSH 密钥存储为 PIV token。有关设置指南,请参阅 https://github.com/FiloSottile/yubikey-agent#readme

Linux 用户通过 PAM 进行身份验证

PAM,以及因此任何使用 PAM 进行用户身份验证的程序,都可以配置为使用 YubiKey 作为用户身份验证过程的一个因素。这包括 sudo、su、ssh、屏幕锁定器、显示管理器以及几乎所有 Linux 系统需要身份验证用户的其他实例。其灵活的配置允许您为整个系统、特定应用程序或应用程序组设置适合您需求的身份验证要求。例如,您可以接受 YubiKey 作为本地会话密码的替代方案,同时要求远程会话同时需要两者。除了 Arch Wiki,建议您阅读 pam(8)pam.conf(5) 以了解其工作原理和配置方法。

有几个模块可用,它们将 YubiKey 支持的协议集成到 PAM 中。

警告 修改 PAM 配置文件时请谨慎操作。错误可能导致系统完全不安全,或者安全到无法进行任何身份验证。

PAM 配置超出了本文档的范围,但简要概述如下。

  • 创建包含授权密钥的文件,可以在用户的主目录中或集中创建。
  • 在适当的 PAM 配置文件中的适当位置添加一行,格式如下。
   auth [required|sufficient] [module_name].so [module arguments]
  • 多因素认证使用 `auth required`,单因素认证使用 `auth sufficient`。
  • module_name - 示例: `pam_u2f.so`。查看已安装模块列表: `ls /usr/lib/security`
  • 模块配置参数用于指定密钥文件的位置,或模块应使用的身份验证方法。

SSH 注意事项

  • Yubico 提供了 其他指导[死链接 2025-03-15—HTTP 404]。它写于旧版本的 Ubuntu,但其中大部分内容仍然适用于更新的 Arch 系统。
  • 如果您要为远程服务器配置 YubiKey,您应该至少打开一个额外的救援 SSH 会话,以便在配置失败时不会被锁定。
  • 检查 /etc/ssh/sshd_config 是否包含以下设置。由 openssh 提供的 sshd_config 默认情况下这些设置是正确的。
   ChallengeResponseAuthentication no
   UsePAM yes

浏览器/Web 集成

许多 Web 服务开始支持 FIDO 硬件令牌。有关更多信息,请参阅 U2FWebAuthn 页面,但通常您需要做的就是安装 libfido2尝试一下

技巧与提示

插入/移除 YubiKey 设备时执行操作

例如,当您将 YubiKey 从 USB 插槽拔出时执行操作,请创建以下内容。

/etc/udev/rules.d/80-yubikey-actions.rules
ACTION=="remove", ENV{ID_VENDOR}=="Yubico", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0010|0111|0112|0113|0114|0115|0116|0401|0402|0403|0404|0405|0406|0407|0410", RUN+="''/usr/local/bin/script args''"

请注意,大多数密钥都包含在此示例中,但可能不适用于所有 YubiKey 版本。您需要查看 lsusb 的输出以获取供应商和型号 ID,以及设备描述,或者可以使用 udevadm 获取信息。当然,要在插入时执行脚本,您需要将操作从“remove”更改为“add”。

插入时启动 Yubico Authenticator

该验证器是一个长期运行的 GUI 进程。如果直接在 udev 规则中运行,该进程会阻塞 udev 的处理。如果被 fork,udev 将在事件处理完成后无条件终止该进程。因此,您无法从 udev 规则启动该验证器。但是,systemd.device 可用于处理这种情况。

与上面类似,创建。

/etc/udev/rules.d/80-yubikey-actions.rules
ENV{ID_VENDOR}=="Yubico", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0010|0111|0112|0113|0114|0115|0116|0401|0402|0403|0404|0405|0406|0407|0410", SYMLINK+="yubikey", TAG+="systemd"

然后 创建 一个新的 systemd 用户单元

~/.config/systemd/user/yubioath-desktop.service
[Unit]
Description=Autostart Yubico Authenticator
# Uncomment if you want to stop the authenticator when unplugged.
#StopPropagatedFrom=dev-yubikey.device

[Install]
WantedBy=dev-yubikey.device

[Service]
Type=oneshot
ExecStart=/usr/bin/yubioath-desktop

启用 它。*systemctl* 会警告它已添加为不存在的单元 dev-yubikey.device 的依赖项。但这是可以的。一旦插入 YubiKey,该单元就会启动。

维护/升级

为 YubiKey NEO 安装 OATH Applet

这些步骤将允许您将 OATH applet 安装到您的 YubiKey NEO。这允许使用 Google Play 商店中的 Yubico Authenticator。

注意 这些步骤仅适用于固件版本 <= 3.1.2 的 NEO。当前一代 NEO(带 U2F)已预装 OpenPGP applet。

将 NEO 配置为 CCID 设备

本文或本章节已过时。

原因: yubikey-personalization-gui 已废弃且其存储库已被归档。显然 yubikey-manageryubico-authenticatorAUR 是推荐的替代方案。[3] (在 Talk:YubiKey 中讨论)
  1. 安装 yubikey-personalization-gui
  2. 添加 udev 规则并重新启动,以便您无需 root 即可管理 YubiKey。
  3. 运行 `ykpersonalize -m82`,输入 `y`,然后按 Enter 键。

安装 applet

  1. 安装 gpshellAURgppcscconnectionpluginAURglobalplatformAURpcsclite
  2. 启动 `pcscd.service`。
  3. ykneo-oath 网站下载最新的 CAP 文件。
  4. GitHub 下载 `gpinstall.txt`。
  5. 编辑 gpinstall.txt 中以 `install -file` 开头的行,以反映 CAP 文件所在的位置。
  6. 打开终端并运行 `gpshell path/to/gpinstall.txt`。
  7. 理想情况下,会滚动大量文本,最后会显示类似以下内容:
    Command --> 80E88013D7C000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A
    A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C
    010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44
    407326810B004B43103441003334002B102B404B3B403BB4003B440076820A4100221024405B4341008B44600000231066820A100
    Wrapped command --> 84E88013DFC000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A
    A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C
    010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44
    407326810B004B43103441003334002B102B404B3B403BB4003B440076820A4100221024405B4341008B44600000231066820A15D848CB77
    27D0EDA00
    Response <-- 009000
    Command --> 80E60C002107A000000527210108A00000052721010108A000000527210101010003C901000000
    Wrapped command --> 84E60C002907A000000527210108A00000052721010108A000000527210101010003C9010000B4648127914A4C7C00
    Response <-- 009000
    card_disconnect
    release_context
  8. 拔出 NEO,然后与 Yubico Authenticator 应用一起尝试。

(可选) 安装 Yubico Authenticator 桌面客户端

本文或本章节已过时。

原因: 该软件包已合并到 yubico-authenticatorAUR 中。(在 Talk:YubiKey 中讨论)

您可以通过安装 yubioath-desktopAUR[损坏的链接: 找不到软件包] 来获取 Yubico Authenticator 的桌面版本。

在 `pcscd.service` 运行时,运行 `yubioath-desktop`,并在提示时插入您的 YubiKey。

故障排除

重启,特别是如果您自上次 YubiKey 工作以来已完成更新。即使某些功能似乎正常工作,也请执行此操作。

YubiKey 未作为 HID 设备工作

注意systemd v244 起增加了对此功能的本机支持后,这些步骤不再是必需的。

按照 本文 中所述添加 udev 规则。

/etc/udev/rules.d/10-security-key.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="users", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0"

之后运行 `udevadm trigger`。

ykman 无法连接到 YubiKey

如果管理器无法连接到 YubiKey,请确保您已启动 `pcscd.service` 或 `pcscd.socket`。

错误:无法连接到 YubiKey 5 [OTP+FIDO+CCID]。请确保应用程序具有必需的权限。

当使用 `ykman` 访问设备上的 oath 凭据时,如果 `scdaemon` 已经独占控制了该设备,则可能会发生此情况。[4]

要解决此问题,您可以在 `~/.gnupg/scdaemon.conf` 中使用适用于您设备的正确值设置 `reader-port` 选项。[5]

注意 这将导致 gpgagent 在您每次通过 ykman 访问 YubiKey 后重新提示您解锁 YubiKey。

适用于 YubiKey NEO 和 YubiKey 4

reader-port Yubico Yubikey

或适用于 YubiKey 5

reader-port Yubico Yubi

YubiKey 在来宾 VM 中无法绑定

假定 YubiKey 可供来宾使用,该问题是由于驱动程序在主机上绑定到设备。要取消绑定设备,需要从主机上的 dmesg 获取总线和端口信息。

# dmesg | grep -B1 Yubico | tail -n 2 | head -n 1 | sed -E 's/^\[[^]]+\] usb ([^:]*):.*/\1/'

生成的 USB ID 格式应为 X-Y.ZX-Y。然后在主机上,使用 `find` 在 `/sys/bus/usb/drivers` 中搜索 YubiKey 绑定到的驱动程序(例如 usbhidusbfs)。

$ find /sys/bus/usb/drivers -name "*X-Y.Z*"

要取消绑定设备,请使用上一个命令的结果(即 /sys/bus/usb/drivers/DRIVER/X-Y.Z:1.0)。

# echo 'X-Y.Z:1.0' > /sys/bus/usb/drivers/DRIVER/unbind

错误:[key] 无法本地签名或 gpg:没有默认的秘密密钥:没有公钥

当尝试在非标准密钥环上签名密钥时发生,此时 YubiKey 已插入,例如 Pacman 在 `pacman-key --populate` 中执行的操作。解决方案是移除有问题的 YubiKey 然后重新开始。

YubiKey 在 Yubico Authenticator 中消失并重新出现

当 CCID 驱动程序未安装时会发生这种情况。您可能需要 安装 `ccid` 软件包。

YubiKey 核心错误:超时

您可能使用了错误的插槽。尝试另一个。

gpg: 设备不存在

gpg (scdaemon) 尝试获取对 yubikey 的独占访问。它需要配置为使用 PSCS 并进行共享访问。[6][7]

您的配置文件应包含:

~/.gnupg/scdaemon.conf
disable-ccid
pcsc-shared

对于旧版本的 GnuPG,`pcsc-shared` 选项不可用。仅保留 `disable-ccid` 并 重启 `pcscd.service` 作为一种变通方法。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.