#yubi-key #age #encryption #cli

应用 age-plugin-yubikey

age客户端的YubiKey插件

8个版本 (4个破坏性更新)

0.5.0 2024年8月4日
0.4.0 2023年4月9日
0.3.3 2023年2月11日
0.3.2 2023年1月3日
0.0.0 2020年8月30日

#364 in 加密学

Download history 4/week @ 2024-05-20 2/week @ 2024-06-17 18/week @ 2024-07-01 184/week @ 2024-07-29 58/week @ 2024-08-05

每月242次 下载

MIT/Apache

110KB
2.5K SLoC

age客户端的YubiKey插件

age-plugin-yubikey 是一个用于 age 客户端(如 agerage)的插件,它允许将文件加密到存储在YubiKey上的age身份。

安装

环境 CLI命令
Cargo (Rust 1.67+) cargoinstall age-plugin-yubikey
Homebrew (macOS或Linux) brewinstall age-plugin-yubikey
Arch Linux pacman -S age-plugin-yubikey
Debian Debian软件包
NixOS 添加到配置
环境.系统软件包= [
软件包.age-插件-yubikey
];
或者运行 nix-env -i age-plugin-yubikey
Ubuntu 20.04+ Debian软件包
OpenBSD pkg_add age-plugin-yubikey (security/age-plugin-yubikey)

在Windows、Linux和macOS上,您可以使用预构建的二进制文件

欢迎新打包者的帮助。

Linux、BSD等

在非Windows、非macOS系统上,您需要确保已安装并运行了 pcscd 服务。

环境 CLI命令
Debian或Ubuntu sudoapt-get install pcscd
Fedora sudodnf install pcsc-lite
OpenBSD root 身份执行
pkg_add pcsc-lite ccid
rcctl enable pcscd
rcctl start pcscd
FreeBSD root 身份执行
pkg install pcsc-lite libccid
service pcscd enable
service pcscd start
Arch sudopacman -Spcsclite pcsc-tools yubikey-manager
sudosystemctl enable pcscd
sudosystemctl start pcscd

当通过Cargo安装时,您还需要确保提供了 pcsc-lite 库的开发头文件,以便编译 pcsc-sys 库。

环境 CLI命令
Debian或Ubuntu sudoapt-get install libpcsclite-dev
Fedora sudodnf install pcsc-lite-devel

Windows Subsystem for Linux (WSL)

WSL目前不支持USB设备。然而,可以在WSL环境中运行安装在主机上的Windows二进制文件。这意味着您可以使用YubiKey在WSL环境中加密或解密文件

  1. 在Windows主机上安装age-plugin-yubikey
  2. 在WSL环境中安装age客户端。
  3. 确保age-plugin-yubikey.exe在WSL环境的PATH中可用。对于默认的WSL配置,Windows主机的PATH会自动添加到WSL环境的PATH中(有关更多详细信息,请参阅这篇Microsoft博客文章)。

配置

age-plugin-yubikey身份有两个部分

  • 存储在YubiKey中的密钥材料。
  • 一个age身份文件,其中包含age客户端可以使用的信息,以确定应使用哪个YubiKey密钥。

有两种方法可以将YubiKey配置为age身份。您可以直接运行插件二进制文件以使用简单的文本界面,这将创建一个age身份文件

$ age-plugin-yubikey

或者,您可以使用命令行标志以编程方式生成身份并打印到标准输出

$ age-plugin-yubikey --generate \
    [--serial SERIAL] \
    [--slot SLOT] \
    [--name NAME] \
    [--pin-policy PIN-POLICY] \
    [--touch-policy TOUCH-POLICY]

一旦创建了一个身份,就可以稍后重新生成它

$ age-plugin-yubikey --identity [--serial SERIAL] --slot SLOT

要使用age客户端使用该身份,它需要存储在文件中。在Unix系统(如macOS或Ubuntu)上使用上述编程标志时,可以通过将标准输出重定向到文件来实现这一点

$ age-plugin-yubikey --identity --slot SLOT > yubikey-identity.txt

用法

所有连接的YubiKey中包含的age接收者可以打印到标准输出

$ age-plugin-yubikey --list

要加密文件到这些YubiKey接收者,请确保age-plugin-yubikey在您的PATH中可用,然后像平常一样使用age客户端使用接收者(例如rage -r age1yubikey1...)。

--list命令的输出也可以直接用于加密所有接收者(例如age -R filename.txt)。

要解密加密到YubiKey身份的文件,以正常方式将身份文件传递给age客户端(例如rage -d -i yubikey-identity.txt)。

高级主题

代理支持

age-plugin-yubikey不提供或与解密代理交互。然而,它通过在解密或只读操作后不软重置YubiKey来尝试保留PIN缓存,这使得具有once PIN策略的YubiKey身份在每次解密时不需要提示PIN。这对于YubiKey 4系列不适用。

once策略对应的会话可以通过多种方式结束,并非所有方式都一定直观

  • 拔掉YubiKey(显然的方式)。
  • 使用不同的小程序(例如FIDO2)。这会导致PIV小程序关闭,从而清除其状态。
    • 这就是为什么YubiKey 4系列不支持PIN缓存保留:它们的序列号只能通过切换到OTP小程序来获取。
  • 通过age-plugin-yubikey --generate或CLI界面生成新的age身份。这是为了避免让YubiKey使用管理密钥进行认证。

如果当前PIN UX证明不足,则很可能将实施一个作为独立插件的安全插件,该插件与yubikey-agent交互,使YubiKey可以同时与age和SSH一起使用。

手动设置和技术细节

age-plugin-yubikey仅官方支持以下YubiKey变体,通过文本界面或--generate标志进行设置

  • YubiKey 4系列
  • YubiKey 5系列

注意:上述Nano和USB-C变体也受支持。预-YK4的YubiKey NEO系列不支持。蓝色“Yubico安全密钥”也不适用(因为它不支持PIV)。

实际上,任何具有ECDSA P-256密钥和证书的PIV令牌,其中一个20个“已退役”插槽应工作。您可以使用以下命令列出所有与age兼容的密钥

$ age-plugin-yubikey --list-all

age-plugin-yubikey实现了几个自动安全管理功能

  • 如果它检测到正在使用默认PIN,则会提示用户更改PIN。然后PUK设置为与PIN相同的值。
  • 如果它检测到正在使用默认管理密钥,则会生成一个随机管理密钥并将其存储在PIN受保护元数据中。age-plugin-yubikey不支持自定义管理密钥。

许可

根据您的选择,许可为以下之一

贡献

除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,均应双许可,如上所述,无任何额外条款或条件。

依赖关系

~22-37MB
~532K SLoC