OpenPGP-card-tools
Openpgp-card-tools 是一个软件包,提供命令行工具 oct(1),用于与 OpenPGP 智能卡 交互 (使用 ccid)。
安装
安装 openpgp-card-tools 软件包。
配置
oct(1) 工具依赖于 pcsclite 和 ccid。它需要启用并启动 pcscd.socket
。
与 OpenPGP 卡交互
oct(1) 工具提供了几个子命令,它们提供与 OpenPGP 卡相关的功能
- oct-list(1) 列出已连接的卡
- oct-status(1) 显示关于卡上数据的信息
- oct-info(1) 显示关于卡的技术细节
- oct-ssh(1) 将卡的身份验证密钥显示为 SSH 公钥
- oct-admin(1) 管理卡上需要管理员 PIN 码的数据
- oct-pin(1) 管理卡的 PIN 码
- oct-decrypt(1) 使用卡解密数据
- oct-sign(1) 使用卡签名数据
- oct-attestation(1) 证明密钥已在卡上生成 (YubiKey 仅限)
- oct-system(1) 与底层卡功能交互
技巧与诀窍
机器可读输出
oct(1) 工具为所有子命令提供机器可读输出格式,通过使用 --output-format
选项。
以 JSON 输出格式列出已连接的卡
$ oct --output-format=json list
导入 OpenPGP 私钥
使用 oct-admin-import(1) 可以直接导入 OpenPGP 私钥。
导入指纹为 0123456789012345678901234567890123456789
的私钥到标识符为 0123:01234567
的卡
$ oct admin --card 0123:01234567 import <(gpg --export-secret-key 0123456789012345678901234567890123456789)
导出 SSH 公钥
使用 oct-ssh(1) 可以导出卡的身份验证槽的 SSH 公钥 (以及其他数据)。
以下提供了一个使用虚拟数据的示例
$ oct ssh OpenPGP card 0123:01234567 Authentication key fingerprint: D3C4B18828E34FE079273C27DFEA102BC0BF7122 SSH public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN3SwnYBGotQMbGxG6VRWc8vj6uq24Q2tUGvjkU4BGCd opgpcard:0123:01234567
要剥离所有不必要的数据以用于 ~/.ssh/authorized_keys
文件 (参见 ssh(1) § FILES),请使用 --key-only
选项
$ oct ssh -c 0123:01234567 --key-only ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN3SwnYBGotQMbGxG6VRWc8vj6uq24Q2tUGvjkU4BGCd opgpcard:0123:01234567
签名数据
使用 oct-sign(1) 可以使用卡上的签名密钥签名数据。
以下命令使用示例卡签名文件 hello.txt
$ echo "hello world" > hello.txt $ oct sign --card 0123:01234567 detached hello.txt 2>/dev/null Enter User PIN: -----BEGIN PGP MESSAGE----- wr0EABYKAG8FgmVcxgQJEHwxCjP5RdJLRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ8BSR6PrXSIRnrQl6r6HEetWVjCVXQtR1Z3PzD9EfbWY FiEEuFXqMwYb6iFIyl2ufDEKM/lF0ksAAOY2AQC7+Tuh8Gal+kCCfVChD0VV+GUA yd+leLeylIySXV7qVwD9H2x5QBrgyF/vODNp1tdorTvPwieV/Bop9FCkHYbHJg8= =cOQ/ -----END PGP MESSAGE-----
解密加密数据
使用 oct-decrypt(1) 可以使用卡的加密槽解密数据。
在以下示例中,消息使用 sq-encrypt(1) 和 OpenPGP 公钥 alice.pub
加密。
$ echo "hey alice" | sq encrypt --recipient-file alice.pub > message.pgp $ oct decrypt --card 0123:01234567 message.pgp Enter User PIN: hey alice
切换 Nitrokey Start 的身份
Nitrokey Start 允许在单个硬件令牌上使用三个独立的身份,每个身份都有其独立的签名、加密和身份验证槽。实际上,这相当于拥有三个独立的 OpenPGP 智能卡,具有独立的卡标识符。
使用 oct-system-set-identity(1) 可以切换这些身份。
要切换到第二个身份,请使用
$ oct system set-identity --card FFFE:01234567 1
要切换回第一个身份,请使用
$ oct system set-identity --card FF01:01234567 0
故障排除
调试智能卡设置
使用 oct-list(1) 列出所有连接到 pcscd(8) 且可用的卡。如果连接的卡未显示,则很可能被另一个进程阻止,例如 scdaemon。scdaemon(1) 可以使用以下命令终止
$ gpgconf --kill scdaemon