我对 PGP 还不熟悉。以下是我的问题:
确认
当我这样做时,系统会显示“此密钥未通过受信任的签名认证”的消息。有没有办法让它变得可信,更好的方法是什么?
[root@dev /]# gpg --verify bind-9.9.4-P2.tar.gz.sha512.asc bind-9.9.4-P2.copiedlink.tar.gz
gpg: Signature made Fri 03 Jan 2014 01:58:50 PM PST using RSA key ID 189CDBC5
gpg: Good signature from "Internet Systems Consortium, Inc. (Signing key, 2013) <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 2B48 A38A E1CF 9886 435F 89EE 45AC 7857 189C DBC5
管理密钥
我下载并保存了一个公钥作为isc.public.key,然后使用以下命令导入它:
gpg –import isc.public.key
我确信它有一个有效期,那么我该怎么做以下事情:
- 查明密钥何时过期?事实上,当我执行“gpg --verify”时,GPG 是否会告诉我导入的密钥是否已过期?
- 更新密钥。发生这种情况时我是否必须删除密钥并重新导入?
谢谢!
答案1
当我这样做时,系统会显示“此密钥未通过受信任的签名认证”的消息。有没有办法让它变得可信,更好的方法是什么?
“受信任签名”是来自您信任的密钥的签名,因为 (a) 您已亲自验证它属于其声称属于的人员,或者 (b) 因为它已由您信任的密钥签名,可能通过一系列中间密钥。
您可以通过运行“gpg --edit-key”,然后使用命令来编辑密钥的信任级别trust
。 本节GPG 手册讨论了密钥信任,值得一读:良好的安全性很难。
请注意,“此密钥未通过受信任的签名认证”这一警告基本上意味着“此密钥可能由任何人签名”。我可以创建一个声称属于“Internet Systems Consortium, Inc. (Signing key, 2013)”的密钥,并使用该密钥对内容进行签名,GPG 会很乐意确认,我所签名的内容确实是用我的密钥签名的。为了避免此问题,您大概可以从以下网址下载 ISC GPG 密钥:网站要么最终信任它(“我相信这个实体可以证明自己”),要么用你最终信任的私钥签名。如果没有对密钥信任进行适当的管理,签名验证基本上就是一场闹剧。
查明何时到期?
运行gpg -k <keyid>
将显示给定密钥的到期时间。例如,我创建了一个明天到期的密钥,并gpg -k <keyid>
显示:
$ gpg -k 0xD4C2B757C3FAE256
pub 2048R/0xD4C2B757C3FAE256 2014-01-26 [expires: 2014-01-27]
uid [ultimate] Test User <[email protected]>
sub 2048R/0xE87A56CDCC670D7A 2014-01-26 [expires: 2014-01-27]
您可以看到子密钥上的到期日期已清楚标记。请注意,用于签名和加密的子密钥的到期日期可能与主密钥不同。您可以阅读有关子密钥的更多信息这里。
事实上,当我执行“gpg --verify”时,GPG 是否会告诉我我导入的密钥是否已经过期?
是的,GPG 会通知您密钥已过期。请注意,这并不一定表示存在问题:文档签署时签名是有效的。
更新密钥。发生这种情况时我是否必须删除密钥并重新导入?
你应该将 GPG 环境配置为使用密钥服务器,并定期运行gpg --refresh-keys
。这将使用密钥服务器的新信息更新密钥环中的所有密钥,其中可能包括:
- 新的到期日期
- 密钥上的附加签名
如果个人或组织开始使用新密钥,您只需将其添加到钥匙串中 - 而无需删除现有密钥。
答案2
如果我们导入文件签名者的公钥,并尝试使用以下命令验证该文件的签名:
gpg --verify some-download.zip.asc some-download.zip
并看到如下警告:
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
这可能意味着我们还没有签签名者的公钥。 对其他人的公钥进行签名是 GPG 的一种方式,表明我们认为该密钥是准确、真实、有效的(还有一个“信任网”可以避免这种警告情况,但这很可能不是您的问题/情况。)
修复
到签署/认证/确认该签名者的密钥后我们已经导入了他们的公钥,后我们已经设定相信根据它们的关键(无、边际、完全、最终之间的某个值),我们需要:
gpg --lsign-key <signers-pubkey-ID>
这是我们使用我们的私人 GPG 密钥亲自签署并证明那我们信任/验证/证实/认证/郑重宣誓该签名者的密钥以及他们用该密钥所做的签名属于该密钥命名/识别的人。
如果有多个电子邮件/身份与签名者的公钥相关联,我们将被询问:
Really sign all user ID's? (y/N)
回答y
并按回车键。
我们会被问到:Really sign? (y/N)
。
回答y
并按回车键。
以上--lsign-key
是对公钥进行签名/证明仅在本地在我们自己的机器上。如果我们想公开这样做并将我们的担保上传到密钥服务器,我们可以使用--sign-key
。
笔记/想法
当我们--lsign-key
/--sign-key
时,我们应该非常确定该密钥属于我们认为属于的人 / 被列为所有者。我们在该密钥上盖上个人印章,确认其合法且由列出的人拥有。
当我们符号其他人的公钥,因为我们被要求使用我们的私钥到认证/确认。私钥(希望)应该只有所有者可以访问,并且(希望)受密码保护,因此无法伪造,因此我们亲自担保此人的公钥和由该密钥生成的签名。
“信任”与“有效性”
gpg --edit-key <some-key-ID>
使用然后设置编辑“信任”(将其从无设置为最终)相信从 0 到 5并不是我们对那把钥匙的信任程度。 那相信我们对这把钥匙的主人的信任程度为他人及其钥匙担保(创建“信任网络”)。
不幸的是相信和有效性在 GPG 文档/命令中,设置公钥的“信任”功能很令人困惑,但它却不影响我们的我们对这个精确密钥的信任程度,而是我们对这个人对其他密钥的验证的重视程度(信任程度)。
当我们在 GPG 中设置“信任”时,我们(在自己的脑海中)说:
“我(比利)最终还是信任简。”
GPG 将其解释为:
“Billy 非常信任 Jane,担保对于 GPG 密钥她自己已签字有效。”
而我们真正想让 GPG 听到的是:
“我(比利)最终相信这把钥匙就是简的钥匙。”
为了让 GPG 理解这一点,我们需要:
--sign-key
或者是--lsign-key
Jane 的公钥,而不是trust
她的。
例子
新导入的密钥
导入其他用户的公钥。
$ gpg --import OtherU_pubkey.asc
gpg: key 70E670E670E670E6: public key "Other User (https://somesite.org) <[email protected]>" imported
gpg: Total number processed: 1
gpg: imported: 1
如果我们现在编辑密钥,它将不再具有信任度和有效性:
$ gpg --edit-key 70E670E670E670E6
pub rsa4096/70E670E670E670E6
created: 2011-06-15 expires: never usage: SC
trust: unknown validity: unknown
sub rsa4096/CD84CD84CD84CD84
created: 2011-06-15 expires: never usage: E
[ unknown] (1). Other User (https://somesite.org) <[email protected]>
[ unknown] (2) OtherU <[email protected]>
[ unknown] (3) Other User <[email protected]>
请注意三件事:trust: unknown
和validity: unknown
和[ unknown ]
。
信任≠有效性
如果我们设置trust
为4
,则键将会显示trust: full
但validity
将保留unknown
。
gpg> trust
pub rsa4096/70E670E670E670E6
created: 2011-06-15 expires: never usage: SC
trust: unknown validity: unknown
sub rsa4096/CD84CD84CD84CD84
created: 2011-06-15 expires: never usage: E
[ unknown] (1). Other User (https://somesite.org) <[email protected]>
[ unknown] (2) OtherU <[email protected]>
[ unknown] (3) Other User <[email protected]>
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
Your decision? 4
pub rsa4096/70E670E670E670E6
created: 2011-06-15 expires: never usage: SC
trust: full validity: unknown
sub rsa4096/CD84CD84CD84CD84
created: 2011-06-15 expires: never usage: E
[ unknown] (1). Other User (https://somesite.org) <[email protected]>
[ unknown] (2) OtherU <[email protected]>
[ unknown] (3) Other User <[email protected]>
Please note that the shown key validity is not necessarily correct
unless you restart the program.
请注意,密钥现在为trust: full
validity: unknown
。这validity: unknown
就是导致问题中出现警告的原因。
s[ unknown]
还表示我们尚未验证密钥/其关联的用户 ID(通过姓名、电子邮件、网站等识别)。
如果我们sign
(或lsign
即本地签名)密钥,其有效性将会full
:
gpg> lsign
Really sign all user IDs? (y/N) y
pub rsa4096/70E670E670E670E6
created: 2011-06-15 expires: never usage: SC
trust: full validity: unknown
Primary key fingerprint: 70E6 70E6 70E6 EE56 31BE D950 70E6 70E6 70E6 70E6
Other User (https://somesite.org) <[email protected]>
OtherU <[email protected]>
Other User <[email protected]>
Are you sure that you want to sign this key with your
key "Me MyKey <[email protected]>" (L0LCAT5HA58URG3R)
The signature will be marked as non-exportable.
Really sign? (y/N) y
gpg> save
记住save
这也将使你退出 GPG。
如果您再次编辑密钥:
$ gpg --edit-key 70E670E670E670E6
pub rsa4096/70E670E670E670E6
created: 2011-06-15 expires: never usage: SC
trust: full validity: full
sub rsa4096/CD84CD84CD84CD84
created: 2011-06-15 expires: never usage: E
[ full ] (1). Other User (https://somesite.org) <[email protected]>
[ full ] (2) OtherU <[email protected]>
[ full ] (3) Other User <[email protected]>
我们会看到trust: full
和validity: full
。此外,用户 ID 前的方括号现在全部都是[ full ]
。
现在,当我们检查此公钥的签名时,我们将不会看到认证/有效性警告。(如果文件由多个密钥签名,您将看到Can't check signature: No public key
针对其他签名者的警告。)
$ gpg --verify some-download.zip.asc some-download.zip
gpg: Signature made Thu 17 Aug 12:09:32 2023 PDT
gpg: using RSA key 70E670E670E6EE5631BED95070E670E670E670E6
gpg: Good signature from "Other User (https://somesite.org) <[email protected]>" [full]
gpg: aka "OtherU <[email protected]>" [full]
gpg: aka "Other User <[email protected]>" [full]