创建新的 GPG 子密钥后,如何使用以前的 GPG 子密钥进行加密?

Cal*_*leb 6 gpg pgp

我最近生成了两个新的子密钥来放在外部钥匙卡上。我以前有一个主密钥(使用标记为 SC)和一个子密钥(标记为 E)。这种安排非常适合我需要将一些本地文件保密。刚才我使用创建了两个新的子密钥addkey,一个签名密钥和一个加密密钥。我使用keytocard. 这似乎运行良好,并且该卡符合我的预期。

现在的问题是我不知道如何使用我的第一个子密钥(密钥 1)加密文件。无论我指定的收件人或用户(包括子密钥 ID)是什么,结果文件都显示为根据他们现在在我卡上的密钥(并且仅在我的卡上!)进行加密。

我的钥匙圈现在看起来像这样:

??? gpg --list-secret-keys
/home/caleb/.gnupg/pubring.gpg
------------------------------
sec   rsa4096/75267693 2014-07-31 [expires: 2016-02-02]
uid         [ultimate] Caleb Maclennan <caleb@alerque.com>
ssb   rsa4096/B89B1E86 2014-07-31 [expires: 2018-07-30]
ssb>  rsa2048/85BD5AD1 2015-10-06 [expires: 2016-10-05]
ssb>  rsa2048/DFE6D89D 2015-10-06 [expires: 2016-10-05]
Run Code Online (Sandbox Code Playgroud)

为了加密,我正在运行这样的东西:

??? gpg --recipient B89B1E86 -a -e test.txt
Run Code Online (Sandbox Code Playgroud)

但我已经尝试了所有--default-key, --local-user( -u) 和--recipient( -r) 包括组合。无论如何我摇晃它,解密结果告诉它是用我的卡密钥编码的:

??? gpg -d test.txt.asc
gpg: encrypted with 2048-bit RSA key, ID DFE6D89D, created 2015-10-06
      "Caleb Maclennan <caleb@alerque.com>"
gpg: public key decryption failed: Card error
gpg: decryption failed: No secret key
Run Code Online (Sandbox Code Playgroud)

使用特定子密钥加密的正确程序是什么?

Jen*_*rat 7

要使用特定的子键,并且没有 GnuPG 将子键解析为主键,请附加!到键。例如,要加密子密钥DEADBEEF,请使用--recipient DEADBEEF!.

重要提示:由于碰撞攻击,不建议使用短密钥 ID ,而是使用长密钥 ID 或指纹

  • 你确定 `!` 不是 [由外壳解释](https://www.gnu.org/software/bash/manual/html_node/Event-Designators.html)? (2认同)