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 |
|
#364 in 加密学
每月242次 下载
110KB
2.5K SLoC
age客户端的YubiKey插件
age-plugin-yubikey
是一个用于 age 客户端(如 age
和 rage
)的插件,它允许将文件加密到存储在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环境中加密或解密文件
- 在Windows主机上安装
age-plugin-yubikey
。 - 在WSL环境中安装age客户端。
- 确保
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 License,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可(LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,均应双许可,如上所述,无任何额外条款或条件。
依赖关系
~22-37MB
~532K SLoC