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) 可以使用卡的加密槽位来解密数据。
在下面的示例中,一条消息被使用 OpenPGP 公钥 archie.pub 和 sq-encrypt(1) 加密。
$ echo "hey archie" | sq encrypt --recipient-file archie.pub > message.pgp $ oct decrypt --card 0123:01234567 message.pgp Enter User PIN: hey archie
切换 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