有没有办法告诉 GPG,如果它需要解密某些东西,它可以在两张智能卡中的一张上找到私有加密密钥?
我的(简化的)设置如下:
- 使用加密子密钥离线生成主密钥。
- 将加密子密钥转移到 Yubikey 1。
- 在 Yubikey 1 上,生成 auth 和 sign 子密钥。
- 将加密子密钥转移到 Yubikey 2。
- 在 Yubikey 2 上,生成 auth 和 sign 子密钥。
所以我只剩下:
gpg2 --list-keys
/Users/scott/.gnupg/pubring.gpg
-------------------------------
pub 3072R/600955C7 2016-09-09
uid [ultimate] Scott Cariss
uid [ultimate] Scott Cariss (msn.com)
uid [ultimate] Scott Cariss (bigfish.co.uk)
uid [ultimate] [jpeg image of size 12378]
sub 2048R/6FE6415F 2016-09-09
sub 2048R/D6DBBCAC 2016-09-09
sub 2048R/01A208C9 2016-09-09
sub 2048R/8D2A1368 2016-10-23
sub 2048R/65B08C5B 2016-10-23
我的加密子密钥在智能卡之间共享,并且在每个智能卡上都有单独的身份验证和签名密钥。
但是,当我来解密某些东西时,它总是会转到第一张智能卡,而不会在另一张智能卡上找到加密密钥。gpg-agent/pin 条目只会要求我插入正确的智能卡。
更新(解决方法)
正如已经回答的那样,这不是 GPG 支持的东西,但我找到了一个适合我的工作解决方案。
在 Mac OS XI 上,使用https://www.controlplaneapp.com/来检测我的一张智能卡(yubikeys)的到来并让它运行脚本:
#!/bin/bash
{
killall -9 ssh-agent gpg-agent
for keystub in $(/usr/local/MacGPG2/bin/gpg2 --with-keygrip --list-secret-keys {{EMAIL ADDRESS}} | grep Keygrip | awk '{print $3}'); do rm /Users/{{USERNAME}}/.gnupg/private-keys-v1.d/$keystub.key; done;
/usr/local/MacGPG2/bin/gpg2 --card-status
eval $(/usr/local/MacGPG2/bin/gpgconf --launch gpg-agent)
ssh-add -l
} &> /Users/{{USERNAME}}/bin/gpg-card-change-log.txt
exit 0
由于密钥都处于离线状态,删除它们然后运行不会有任何害处,--card-status
这会从当前插入的智能卡中引入密钥存根。