智能卡上的 PGP 密钥:为什么我需要磁盘上的“密钥”?

信息安全 pgp 硬件 gnupg 智能卡
2021-08-24 03:38:55

我有一个 YubiKey NEO,上面有 OpenPGP 小程序,并且安装了 PGP 密钥。我在 3 台不同的计算机上工作,并在计算机上初始化了卡bob我现在在电脑前rob有人给我发了一个加密文件,所以我把我的 YubiKey NEO 放进去,然后运行gpg --decrypt.

我得到以下输出:

gpg: encrypted with RSA key, ID DEADBEEF
gpg: decryption failed: secret key not available

好的,所以也许我需要在这里安装我的 PGP 公钥。我这样做了,然后得到:

gpg: decryption failed: secret key not available

然后我通过 SSH 进入bobfromrob并运行,然后瞧瞧gpg --list-secret-keys

sec>  2048R/DEADDEAD 2015-02-31
      Card serial no. = 0000 12345678
uid                  Naftuli Tzvi Kay <canhas@spam.com>
ssb>  2048R/BEEFBEEF 2015-02-31
ssb>  2048R/DEADBEEF 2015-02-31

到底是什么?我复制了这个“密钥” bobrob现在一切正常,但我仍然需要输入我的 PGP 密钥的 PIN。

创建密钥时,我从未将其导入磁盘,因此它应该只存在于卡上如果密钥不应该在智能卡之外的任何地方,为什么磁盘上存在密钥(!)?

1个回答

实际上不是密钥,而是一种引用卡上密钥的存根。这个存根包含你私钥的几乎所有“元数据”(包括属于它的公钥),但实际的私钥只存储在你的卡上(并且永远不会离开它)。

这很重要,因为卡只存储实际密钥(并使用这些密钥执行基本的加密操作),而不存储其他元信息,如创建日期、使用标志、用户 ID 等。

(再次阅读规范,我意识到这是错误的。卡片存储了密钥的指纹和创建时间。)

这个密钥存根帮助 GnuPG 管理密钥,并让它在必要时查找卡片/请求卡片。由于公钥的指纹存储在卡上,如果公钥可用,可以轻松地重新生成私有“存根”密钥。GnuPG 通过运行菜单fetch中的命令使这变得简单,该命令--card-edit查询密钥服务器网络以获取公钥。