2 个版本
0.0.2 | 2023 年 6 月 24 日 |
---|---|
0.0.1 | 2023 年 6 月 15 日 |
#5 in #piv
65KB
859 行
openpgp-piv-tools
此包实现了 opgpiv
,一个探索性的命令行工具,它公开了在 openpgp-piv-sequoia 中的功能,以在 OpenPGP 环境中使用 PIV 设备。
将 OpenPGP 组件密钥上传到 YubiKey PIV 应用程序
可以通过 PIV 接口将密钥材料导入到卡片中。
默认情况下,upload
命令会自动从 OpenPGP 密钥中选择适当的子密钥(假设请求的功能只有一个子密钥),并将其上传到 PIV 应用程序中的适当密钥槽
- 身份验证子密钥:PIV 身份验证密钥
9A
- 签名子密钥:PIV 数字签名密钥
9C
- 加密子密钥:PIV 密钥管理密钥
9D
$ cargo run -- upload --serial 16019180 --slot dec --key /tmp/janus.key
目前支持的插槽标识符:sig, dec, aut, ret01, ret02, ret03, ret04, ret05
(已退役密钥的插槽 ["retXX"] 可以用于解密密钥)。
或者,可以显式指定组件密钥的 --fingerprint
,例如
$ cargo run -- upload --serial 16019180 --slot dec --key /tmp/janus.key --fingerprint 6771DFE6E3E7C57E36E67A8CBC64A0240E63DA8A
在上传 sig
子密钥之后
$ cargo run -- upload --serial 16019180 --slot sig --key /tmp/janus.key
让我们检查 PIV 应用程序的状态
$ cargo run -- status --serial 16019180
=== PIV device, Serial 16019180: Yubico YubiKey OTP+FIDO+CCID 01 00 (version: 5.2.7) ===
Slot 9A [Authentication]
Slot 9C [Signature]
Serial: 5f:84:ef:01:df:bc:a6:01:a1:a1:57:14:6b:f7:d1:56:0c:17:a9:ac
Issuer: CN=Janus <[email protected]>
Subject PKI: Rsa2048
Slot 9D [KeyManagement]
Serial: 67:71:df:e6:e3:e7:c5:7e:36:e6:7a:8c:bc:64:a0:24:0e:63:da:8a
Issuer: CN=Janus <[email protected]>
Subject PKI: Rsa2048
[..]
(添加 -v
标志还会输出完整的 X.509 证书信息,用于调试目的。)
解密
我们将消息加密到 "Janus" 密钥
$ sq key extract-cert /tmp/janus.key --output /tmp/janus.cert
$ echo "hello world" | sq encrypt --recipient-file /tmp/janus.cert > /tmp/enc
然后在 PIV 设备上解密它
$ cat /tmp/enc | cargo run -- decrypt --serial 16019180 --cert /tmp/janus.key
签名
类似地,我们可以在 PIV 设备上生成 OpenPGP 签名
$ echo "foo" | cargo run -- sign --serial 16019180 --cert /tmp/janus.cert > /tmp/sig
并验证签名
$ echo "foo" | sq verify --signer-file /tmp/janus.cert --detached /tmp/sig
依赖项
~42–58MB
~1M SLoC