使用 GPG 加密时,我可以指定公钥文件而不是收件人吗

信息安全 加密 gnupg
2021-08-11 01:15:51
  1. 我可以做类似的事情:

    gpg --public-key my.pub  -e file.txt
    
  2. 如果可以,有什么理由不应该这样做?

P/s:我想我不需要知道收件人,因为我的机器一次只有一个公钥。
但是那个密钥很快就会改变(我可以删除所有旧的加密文件,所以不需要保留它们)。

4个回答

GnuPG 不支持加密到由密钥文件指定的收件人。必须提前导入密钥,并使用其邮件地址或密钥 ID 定义收件人。

我建议使用 GnuPG 所期望的更简洁的方法,并对密钥的指纹或该密钥提供的用户 ID 进行硬编码,然后照常导入。

如果您真的不想导入密钥,则可以执行以下解决方法(实际上是导入密钥,但导入到临时 GnuPG 主目录):

  1. 将密钥导入临时文件夹,例如使用

    gpg --homedir /tmp/gnupg --import my.pub
    
  2. 确定文件中存储的密钥的密钥 ID:

    KEYID=`gpg --list-public-keys --batch --with-colons --homedir /tmp/gnupg | head -n1 | cut -d: -f5`
    
  3. 加密发给收件人的消息

    gpg --homedir /tmp/gnupg --recipient ${KEYID} --encrypt
    
  4. 清理临时 GnuPG 主目录

    rm -f /tmp/gnupg
    

您当然可以将其保存为脚本,以便更方便地使用。

从 GnuPG 2.1.14 开始,有一个新选项允许从密钥文件进行加密: --recipient-file FILENAME. 它适用于二进制或 ascii 装甲文件。

检查发行说明开发邮件列表

从查看您的问题看来,您有兴趣使用您已经拥有的自己的公钥(示例中的my.pub)进行加密。

事实上,这不仅是可能的,而且是可取的,因为它用于提供加密的非交互式自动化如果它是的公钥,那么您隐含地信任它,并且可以放心地执行以下操作:

gpg --batch --yes --trust-model always -r $GPGPUBKEYRECIPIENTEMAIL -e ./file.txt

没有需要答案的交互式提示,因此可以编写加密脚本。注意:我将我的PUBLIC密钥上传到我想要保护数据的公共服务器,将PRIVATE密钥与它分开。

但是,如果您使用自己的密钥进行加密,则该--trust-model always开关可能是狡猾的。另请注意,在解密时,系统会提示您输入密码,除非您自动执行此操作。HTH bud- Terrence Houlahan

据我所知,收件人的公钥 ID、密钥有效期、姓名和电子邮件地址都嵌入在 GPG ASCII Armor 文件中(GnuPG 手册

pub  1024D/BB7576AC 1999-06-04 Alice (Judge) <alice@cyb.org>

所以使用 pub key file/Key ID/Name/Email 来识别使用哪个公钥应该都是等价的。

但是我现在无法访问 linux 机器,所以无法检查。