智能卡 + GnuPG:我的密钥环中存储了什么/如何采用智能卡?

信息安全 密钥管理 gnupg 智能卡 优比键
2021-09-08 04:41:32

我最近买了一个Yubikey Neo,它可以作为 OpenPGP 智能卡。我想用它来存储我的私人 GnuPG 密钥。我已经完成了初始设置,并且能够使用智能卡对文件进行签名和加密。设置完成后,智能卡的密钥会显示在gpg --list-secret-keys输出中。

如果我丢失了 GPG 密钥环(比如我的硬盘驱动器死了)或者我想在多台机器上使用它,我如何让 GPG 使用智能卡?

4个回答

你需要运行:

gpg --card-status

gpg 会为你做这件事:

/tmp$ mkdir gpgtmp
/tmp$ chmod go-rwx gpgtmp

/tmp$ GNUPGHOME=/tmp/gpgtmp gpg --keyserver pgp.mit.edu --recv F8713BDF 
gpg: sleutelring ‘/tmp/gpgtmp/secring.gpg’ is aangemaakt
gpg: sleutelring ‘/tmp/gpgtmp/pubring.gpg’ is aangemaakt
gpg: opvragen sleutel F8713BDF van hkp sleutelserver pgp.mit.edu
WARNING: gnome-keyring:: couldn't connect to: /run/user/robin/keyring-55e9Rg/pkcs11: No such file or directory
gpg: /tmp/gpgtmp/trustdb.gpg: trustdb created
gpg: sleutel F8713BDF: publieke sleutel “Robin Sheat <robin@kallisti.net.nz>” geimporteerd
gpg: no ultimately trusted keys found
gpg: Totaal aantal verwerkt: 1
gpg:               Geimporteerd: 1  (RSA: 1)

/tmp$ GNUPGHOME=/tmp/gpgtmp gpg --list-secret
*nothing here*

/tmp$ GNUPGHOME=/tmp/gpgtmp gpg --card-status
*snip boring card info*
General key info..: pub  2048R/F8713BDF 2013-09-24 Robin Sheat <robin@kallisti.net.nz>
sec>  2048R/F8713BDF  aangemaakt: 2013-09-24  vervaldatum: nooit     
*etc*

/tmp$ GNUPGHOME=/tmp/gpgtmp gpg --list-secret
/tmp/gpgtmp/secring.gpg
-----------------------
sec>  2048R/F8713BDF 2013-09-24
      Serienummer van de kaart = ....
uid                  Robin Sheat <robin@kallisti.net.nz>
*etc*

当您开始全新安装时,您有两个选择:

  1. 插入智能卡(Yubikey)并运行

    gpg --card-edit
    fetch
    quit
    

    然后,gpg使用--card-status为密钥创建存根选项运行

    gpg --card-status
    
  2. 从密钥服务器导入您的公钥(上面的 fetch 命令自动执行相同操作),然后

    gpg --card-status
    

这些方法仅在导入公钥的方式上有所不同,即自动或手动。

当您在智能卡上设置密钥对时,加密、解密和签名操作所需的所有数据都存储在卡上。因此,即使丢失了您的密钥环,您也只需将智能卡放在手边即可执行这些操作。

不过,我建议您不要简单地相信我的话,而是自己进行实验。重新配置 GPG 以查看一个空的密钥环目录并尝试使用智能卡解密您的重要文件。您可能需要先将卡中的证书导入您的密钥环,这些步骤取决于您使用的密钥管理器。

@Askford - 我假设您在 3 年后设法解决了这个问题?

对于其他有类似问题的人来说,对我有用的是:

gpg2 --import public_key.key

这将我所有的密钥从全新安装中带回来,只有 yubikey

这个命令给了我:

gpg2 --import key.asc 
gpg: key 0AAD23DD518496D1: public key "Lee Fenlan <lee@fenlan.uk>" imported
gpg: Total number processed: 1
gpg:               imported: 1

然后gpg2 -k给了我:

---------------------------------
pub   rsa4096 2016-08-09 [SC]
      7F5F963D411B8E2FC7BB33150AAD23DD518496D1
uid           [ unknown] Lee Fenlan <lee@fenlan.uk>
sub   rsa4096 2016-08-09 [S]
sub   rsa4096 2016-08-09 [E]
sub   rsa4096 2016-08-09 [A]

现在,如果我尝试加密/解密/签名或 ssh 到任何需要我的私钥的东西,它都会按预期工作。