OpenPGP-card-tools

来自 ArchWiki

Openpgp-card-tools 是一个软件包,提供命令行工具 oct(1),用于与 OpenPGP 智能卡 交互 (使用 ccid)。

安装

安装 openpgp-card-tools 软件包。

配置

oct(1) 工具依赖于 pcscliteccid。它需要启用启动 pcscd.socket

注意: GnuPG 默认使用其自身的内部 CCID 驱动程序。建议将其配置为改为使用 pcsclite

与 OpenPGP 卡交互

oct(1) 工具提供了几个子命令,它们提供与 OpenPGP 卡相关的功能

技巧与诀窍

机器可读输出

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) 且可用的卡。如果连接的卡未显示,则很可能被另一个进程阻止,例如 scdaemonscdaemon(1) 可以使用以下命令终止

$ gpgconf --kill scdaemon