GPG签名是什么?

看着像这个, 这个这个这样的问题,我向公众知识提出以下问题:

  1. GPG签名有什么作用?

  2. 签名给用户提供了什么额外的安全级别?

  3. 与Launchpad中的PPA相关的GPG签名常见问题有哪些,为什么会产生这些问题?

1个回答

GPG是什么?

GPG,或GNU Privacy Guard,是一套加密软件。它可以用于加密或签名数据和通信,以确保其真实性。

这种加密方法是基于密钥对的。公钥存储在密钥服务器上(例如keyserver.ubuntu.com),而私钥则保密。使用公钥,可以验证由私钥生成的签名。同样地,如果你知道某人的公钥,你可以使用该公钥加密一条只有对应私钥持有者才能阅读的消息。

进一步阅读:GnuPG进行日常使用的小指南...

这与我有什么关系?

在这个情境中,你从中下载软件包的apt存储库应该由秘密密钥签名,这样你就可以验证所安装的软件包来自其声称的来源。

实际上,在存储库中签名的文件是“Release”文件。该文件包含存储库中其他文件的校验和。例如,这是官方Ubuntu 12.10存储库的文件及其相应的GPG签名。当您安装软件包时,apt会验证签名。 进一步阅读:关于安全apt的全部内容

常见问题

官方Ubuntu存档的公钥已经被您的计算机知道,但是如果您想要添加PPA或第三方存储库,则必须导入他们的密钥。如果您尝试更新一个您没有密钥的存储库,您将看到以下警告信息:

W: GPG error: http://ppa.launchpad.net oneiric Release: The following signatures
couldn't be verified because the public key is not available: NO_PUBKEY B725097B3ACC3965

当您从该软件仓库安装一个软件包时,您也会收到一个警告提示:
WARNING: The following packages cannot be authenticated!
  dropbox
Install these packages without verification [y/N]?

虽然可以通过在运行时使用--allow-unauthenticated标志来消除这些警告,但最好将密钥添加到您的系统中,以便您可以利用增加的安全性。 在添加PPA时,您应该使用add-apt-repository工具,因为这将自动处理为您添加密钥。如果需要手动添加密钥,请使用以下命令:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID_HERE

如果你不想使用终端来完成这个操作,可以参考这个答案