Linux 内核版本 PGP 签名

所有内核版本都使用符合 OpenPGP 标准的签名进行加密签名。强烈建议每个人通过验证相应的签名来验证下载的内核版本的完整性。

基本概念

每个内核版本都带有发布者的加密签名。此加密签名允许任何人验证文件在开发人员创建和签名后是否被修改或以其他方式篡改。签名和验证过程使用公钥加密,并且在没有首先获得开发人员私钥的情况下,几乎不可能伪造 PGP 签名。如果确实发生这种情况,开发人员将撤销被泄露的密钥,并使用新密钥重新签署他们之前签署的所有版本。

要了解有关 PGP 工作方式的更多信息,请参阅 维基百科

Kernel.org 信任网

kernel.org 成员使用的 PGP 密钥由 Linux 内核开发社区的其他成员(以及经常由许多其他人)交叉签名。如果您想验证属于 kernel.org 成员的任何密钥的有效性,您可以查看其公钥上的签名列表,然后决定是否信任该密钥。请参阅关于信任网主题的 维基百科文章

使用 Web 密钥目录

如果您觉得维护自己的信任网的任务过于艰巨,您可以选择通过使用“首次使用时信任”(TOFU)方法并依赖 kernel.org Web 密钥目录(WKD)来简化此过程。

要导入属于许多内核开发人员的密钥,您可以使用以下命令

$ gpg2 --locate-keys [username]@kernel.org

例如,要导入属于 Linus Torvalds 和 Greg Kroah-Hartman 的密钥,您将使用

$ gpg2 --locate-keys [email protected] [email protected]

此命令将在将这些密钥导入到您的密钥环之前,验证 kernel.org 提供的 TLS 证书。

使用 GnuPG 验证内核签名

通过 kernel.org 发布的所有软件都具有分离的 PGP 签名,您可以使用这些签名来验证下载的完整性。

为了说明验证过程,让我们以 Linux 4.6.6 版本为例进行演示。首先,使用“curl”下载版本和相应的签名

$ curl -OL https://linuxkernel.org.cn/pub/linux/kernel/v4.x/linux-4.6.6.tar.xz
$ curl -OL https://linuxkernel.org.cn/pub/linux/kernel/v4.x/linux-4.6.6.tar.sign

您会注意到,签名是针对未压缩的存档版本进行的。这样做是为了使 .gz 和 .xz 压缩版本的发布只需要一个签名。首先,使用unxz解压缩存档,在本例中

$ unxz linux-4.6.6.tar.xz

现在,针对签名验证 .tar 存档

$ gpg2 --verify linux-4.6.6.tar.sign

您可以将这些步骤组合成一行命令

$ xz -cd linux-4.6.6.tar.xz | gpg2 --verify linux-4.6.6.tar.sign -

您可能会收到“No public key error”错误

gpg: Signature made Wed 10 Aug 2016 06:55:15 AM EDT using RSA key ID 38DBBDC86092693E
gpg: Can't check signature: No public key

请使用上面列出的“gpg2 --locate-keys”命令下载 Greg Kroah-Hartman 和 Linus Torvalds 的密钥,然后重试

$ gpg2 --locate-keys [email protected] [email protected]
$ gpg2 --verify linux-4.6.6.tar.sign
gpg: Signature made Wed 10 Aug 2016 06:55:15 AM EDT
gpg:                using RSA key 38DBBDC86092693E
gpg: Good signature from "Greg Kroah-Hartman <[email protected]>" [unknown]
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: 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 6092 693E

要使“警告”消息消失,您可以指示您选择使用 TOFU 信任该密钥

$ gpg2 --tofu-policy good 38DBBDC86092693E
$ gpg2 --trust-model tofu --verify linux-4.6.6.tar.sign
gpg: Signature made Wed 10 Aug 2016 06:55:15 AM EDT
gpg:                using RSA key 38DBBDC86092693E
gpg: Good signature from "Greg Kroah-Hartman <[email protected]>" [full]
gpg: [email protected]: Verified 1 signature in the past 53 seconds.  Encrypted
     0 messages.

请注意,您可能需要在第一次运行验证命令时传递“--trust-model tofu”,但之后应该不再需要。

脚本版本

如果您需要在自动化环境中执行此任务,或者只是更喜欢更方便的工具,您可以使用以下辅助脚本来正确下载和验证 Linux 内核 tarball

在将其用于您的需求之前,请查看该脚本。

重要的指纹

以下是 Linus Torvalds、Greg Kroah-Hartman、Sasha Levin 和 Ben Hutchings 的密钥指纹,他们最有可能发布内核

开发人员 指纹
Linus Torvalds ABAF 11C6 5A29 70B1 30AB  E3C4 79BE 3E43 0041 1886
Greg Kroah-Hartman 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 6092 693E
Sasha Levin E27E 5D8A 3403 A2EF 6687  3BBC DEA6 6FF7 9777 2CDC
Ben Hutchings AC2B 29BD 34A6 AFDD B3F6  8F35 E7BF C8EC 9586 1109

在信任以上信息之前,请在您的浏览器中验证此站点的 TLS 证书。

如果您收到“BAD signature”

如果您在任何时候看到“gpg2 --verify”输出“BAD signature”,请首先检查以下内容

  1. 确保您正在针对存档的 .tar 版本验证签名,而不是压缩的 (.tar.xz) 版本。
  2. 确保下载的文件正确且未被截断或以其他方式损坏。

如果您反复收到相同的“BAD signature”输出,请发送电子邮件至 [email protected],以便我们调查该问题。

Kernel.org 校验和自动签名器和 sha256sums.asc

我们有一个专用的脱机系统,该系统直接连接到我们的中央附加存储,并计算所有上传软件版本的校验和。生成的sha256sums.asc文件随后使用为此目的生成的 PGP 密钥进行签名,该密钥不存在于该系统之外。

这些校验和并非旨在取代开发人员签名。它只是一种让某人快速验证众多 kernel.org 镜像之一上的内容是否与主镜像上的内容匹配的方法。虽然您可以使用它们来快速验证您下载的内容是否与我们中央存储系统上的内容匹配,但您应继续使用开发人员签名以获得最佳保证。

2011 年 9 月之前的内核版本

在 2011 年 9 月之前,所有内核版本都由同一个 PGP 密钥自动签名

pub   1024D/517D0F0E 2000-10-10 [revoked: 2011-12-11]
      Key fingerprint = C75D C40A 11D7 AF88 9981  ED5B C86B A06A 517D 0F0E
uid                  Linux Kernel Archives Verification Key <[email protected]>

由于 kernel.org 系统遭到破坏,此密钥已停用并被撤销。它将不再用于签署未来的版本,您不应使用此密钥来验证任何存档的完整性。几乎可以肯定的是,此密钥已落入恶意之手。

先前使用此密钥签名的所有内核版本都经过交叉检查,并使用专门为此目的创建的另一个密钥进行了签名

pub   3072R/C4790F9D 2013-08-08
      Key fingerprint = BFA7 DD3E 0D42 1C9D B6AB  6527 0D3B 3537 C479 0F9D
uid   Linux Kernel Archives Verification Key
      (One-off resigning of old releases) <[email protected]>

用于此目的的私钥已销毁,无法用于签署 2011 年之后生成的任何版本。

其他资源

社交