我们有一个包,正在尝试为其创建一个独立的签名,以确保另一端可以确信它来自我们。
我知道如何在创建密钥对时指定正确的身份,因为会gpg --gen-key
特别要求提供身份。我还知道如何导出给定身份的公钥和私钥:
gpg --export [email protected] --armour --output key.public
gpg --export-secret-keys [email protected] --armour --output key.private
并且应该在接收端分发和导入公钥以进行验证:
gpg --import key.public
但是(我的第一个问题),我不知道如何指定特别的在一个身份可能有多个密钥对的情况下,我们可以使用密钥对。例如,假设我们有两个密钥对[email protected]
,一个用于软件安装包,一个用于安全 shell 访问。我该如何导出其中的一个密钥对?
我的第二个问题与生成和验证文档上的签名有关。
命令如何执行:
gpg --detach-sig inputDoc --output detachedSigDoc
实际上知道要使用哪个密钥对来创建签名吗?我看到有一个--local-user
允许您“指定用于签名的用户 ID”的功能,但是当给定身份有多个密钥对时,该功能如何工作?
无论如何,该gpg --verify
选项似乎没有等效的操作,那么我们如何指定要使用的密钥对?检查文件的来源?
不管怎样,由于我们使用的是嵌入式系统,所以我们使用 GnuPG 版本 1。
答案1
签名:我不记得这是否是一个变化,但 v2 手册页说--local-user/-u
或者 --default-key
可以指定签名密钥。虽然这里没有明确说明,但只要您需要识别密钥,就可以使用用户 ID(通常但不一定是电子邮件地址)或密钥 ID。如果您有多个密钥用于同一个用户 ID,使用密钥 ID唯一地指定。
验证:keyid 在签名包中,并且找到了(公)钥自动地——除非你的密钥环中没有该密钥,在这种情况下它会说Can't check signature: No public key
,如果你想检查,你必须获取并导入密钥。
PS:你究竟如何使用 GPG/PGP 密钥进行 SSH?据我所知,OpenSSH 和商业 (Tectia) SSH 都不能使用 PGP 格式的密钥。