为什么 gpg 不需要我们指定加密和解密的密钥?

Tim*_*Tim 3 gpg

GNU 隐私手册说:

命令行选项 --sign 用于进行数字签名。输入要签署的文件,输出签署的文件。

alice% gpg --output doc.sig --sign doc

You need a passphrase to unlock the private key for
user: "Alice (Judge) <alice@cyb.org>"
1024-bit DSA key, ID BB7576AC, created 1999-06-04

Enter passphrase:
Run Code Online (Sandbox Code Playgroud)

为什么不询问使用哪个私钥?运行命令的用户不能持有多个私钥吗?

可以使用 --symmetric 选项使用对称密码对文档进行加密。

alice% gpg --output doc.gpg --symmetric doc
Enter passphrase:
Run Code Online (Sandbox Code Playgroud)

gpg 是否使用密码对输入文件进行对称加密?或者它是否仅使用密码来访问将用于对称加密输入文件的密钥?如果是后者,为什么不询问使用哪个密钥进行对称加密?用户不能持有多个可用于对称加密的密钥吗?

解密对称加密文件时,

alice% gpg --descrypt doc.gpg 
Run Code Online (Sandbox Code Playgroud)

将会成功。为什么它不要求密码(和解密密钥)?doc.gpg 我给别人之后,别人怎么解密 呢?

谢谢。

Kus*_*nda 8

如果既没有指定也没有指定,GnuPG 将使用在密钥环中找到的第一个密钥。您还可以定义要使用的默认密钥--default-user--local-user

default-key KEYID
Run Code Online (Sandbox Code Playgroud)

~/.gnupg/gpg.conf

对称加密并没有涉及任何公共或私有密钥。您输入的密码用于加密和解密消息(因此是“对称的”)。

在您的示例中,解密时不会要求您输入密码,因为该gpg-agent进程已缓存您在加密消息时使用的密码。如果您终止代理并再次尝试解密消息,系统会要求您输入密码。

如果您共享doc.gpg文件并且使用对称加密对其进行加密,则您还需要以某种方式共享密码,以便收件人能够解密邮件。任何拥有密码短语的人都可以解密该消息。

当使用带签名的密钥加密时,共享您的公钥就足够了(用于验证签名)。无需签名,您就不必共享您的密钥。使用密钥加密,将为一个或多个特定收件人加密消息,因此您需要拥有他们的公钥来执行加密。如果无法访问特定收件人的私钥,则无法解密该消息。