如何使用 asc 签名文件验证文件?

use*_*013 27 gpg pgp digital-signatures checksum

例如,该项目提供了一个*.asc带有 PGP 签名的文件来验证下载的内容(与校验和相反,您可以看到空列):https : //ossec.github.io/downloads.html

我将如何使用这个文件?我尝试了gpg --verify其他变体,但它似乎将名称与文件匹配,但是下载的文件名并不完全相同......不确定它应该如何工作。

Евг*_*ков 27

  • 下载密钥文件:
wget https://ossec.github.io/files/OSSEC-ARCHIVE-KEY.asc
Run Code Online (Sandbox Code Playgroud)
  • 检查密钥文件以确认它具有EE1B0E6B2D8387B7作为其 keyid。
gpg --keyid-format long --list-options show-keyring OSSEC-ARCHIVE-KEY.asc
Run Code Online (Sandbox Code Playgroud)
  • 如果正确,则导入密钥:
gpg --import OSSEC-ARCHIVE-KEY.asc
Run Code Online (Sandbox Code Playgroud)
  • 下载软件包
wget https://github.com/ossec/ossec-hids/archive/2.9.3.tar.gz
Run Code Online (Sandbox Code Playgroud)
  • 下载签名文件
https://github.com/ossec/ossec-hids/releases/download/2.9.3/ossec-hids-2.9.3.tar.gz.asc
Run Code Online (Sandbox Code Playgroud)
  • 验证一下
gpg --verify ossec-hids-2.9.3.tar.gz.asc 2.9.3.tar.gz
Run Code Online (Sandbox Code Playgroud)

输出

gpg: Signature made Sat Dec 23 16:13:01 2017 UTC
gpg:                using RSA key EE1B0E6B2D8387B7
gpg: Good signature from "Scott R. Shinn <scott@atomicorp.com>" [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: B50F B194 7A0A E311 45D0  5FAD EE1B 0E6B 2D83 87B7
Run Code Online (Sandbox Code Playgroud)

  • 我得到 `gpg: 警告: "--show-keyring" 是一个已弃用的选项 gpg: 请改用 "--list-options show-keyring"` (3认同)
  • 似乎 --verify 选项需要签名文件 (2认同)

aef*_*aef 5

这进一步细化?????????????的回答。它不使用已弃用的 GnuPG 命令并避免使用潜在的可欺骗密钥 ID 进行身份验证:

下载文件

获取作者用来签发签名的OpenPGP证书:

wget https://ossec.github.io/files/OSSEC-ARCHIVE-KEY.asc
Run Code Online (Sandbox Code Playgroud)

然后获取作者签发的分离签名:

wget https://github.com/ossec/ossec-hids/releases/download/2.9.3/ossec-hids-2.9.3.tar.gz.asc
Run Code Online (Sandbox Code Playgroud)

最后获取您要进行身份验证的文件:

wget https://github.com/ossec/ossec-hids/archive/2.9.3.tar.gz
Run Code Online (Sandbox Code Playgroud)

显示并彻底比对指纹

在导入证书之前,显示完整的 40 个字符长的 OpenPGP 证书指纹,并确保它与作者证书的指纹完全匹配。

注意:您应该通过作者的安全渠道获取指纹。除了亲自与作者会面以交换指纹之外,下一个最好的方法是在作者的网站上显示指纹并通过设计的https:URI访问。作者确实在这里发表了一篇。

注意:如果作者只显示短ID(例如8个字符2D8387B7)或长ID(长16个字符,例如EE1B0E6B2D8387B7)最好持怀疑态度并要求作者发布完整指纹,因为短ID和长ID都有已被证明是可欺骗的(在此处阅读更多信息

gpg --import --import-options show-only OSSEC-ARCHIVE-KEY.asc
Run Code Online (Sandbox Code Playgroud)

默认情况下,旧版本的 GnuPG 不显示完整指纹。--fingerprint如果未显示该标志,请尝试添加该标志。

输出应该是这样的:

pub   rsa4096 2011-03-10 [SC]
      B50FB1947A0AE31145D05FADEE1B0E6B2D8387B7
uid                      Scott R. Shinn <scott@atomicorp.com>
sub   rsa4096 2011-03-10 [E]
Run Code Online (Sandbox Code Playgroud)

本例中的 OpenPGP 证书指纹为:

B50FB1947A0AE31145D05FADEE1B0E6B2D8387B7
Run Code Online (Sandbox Code Playgroud)

有时,指纹以 4 个字符为一组显示,每个字符带有空格,以便于人类阅读。在这种情况下,忽略空格进行比较是安全的:

B50F B194 7A0A E311 45D0  5FAD EE1B 0E6B 2D83 87B7
Run Code Online (Sandbox Code Playgroud)

注意:一定不要只比较指纹的各个部分,因为这再次为欺骗攻击打开了空间。

为了简单和彻底的比较,只需在您选择的文本编辑器中复制在后续行中格式相同的两个指纹,并在视觉上匹配它们。

导入证书

如果完整指纹完全匹配,请将证书导入本地 GnuPG 密钥环:

gpg --import OSSEC-ARCHIVE-KEY.asc
Run Code Online (Sandbox Code Playgroud)

验证文件

现在,您可以加密验证文件与作者发布和签名的文件完全匹配。

gpg --verify ossec-hids-2.9.3.tar.gz.asc 2.9.3.tar.gz
Run Code Online (Sandbox Code Playgroud)

注意:请务必始终在此处列出分离的签名和要验证的文件。除了分离的签名之外,还有其他类型的签名,如果仅列出签名文件,则没有意识到这可能导致对真实性的错误假设。

输出应该是这样的:

gpg: Signature made Sa 23 Dez 2017 17:13:01 CET
gpg:                using RSA key EE1B0E6B2D8387B7
gpg: Good signature from "Scott R. Shinn <scott@atomicorp.com>" [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: B50F B194 7A0A E311 45D0  5FAD EE1B 0E6B 2D83 87B7
Run Code Online (Sandbox Code Playgroud)

注意:如果文件已被操作,您应该会看到如下内容:

gpg: Signature made Sa 23 Dez 2017 17:13:01 CET
gpg:                using RSA key EE1B0E6B2D8387B7
gpg: BAD signature from "Scott R. Shinn <scott@atomicorp.com>" [unknown]
Run Code Online (Sandbox Code Playgroud)

如果发生这种情况,作为预防措施,您不应使用或执行该文件的内容并与作者联系。如果无法联系到作者,那么公开提高认识是次佳的选择。

一次次验证作者发布的文件

最后一步中显示的警告提示,在确定其合法后,最好使用您自己的个人 OpenPGP 证书来验证导入的作者的签名证书。

如果您长时间保留和维护您的 GnuPG 密钥库,您就不需要再次验证每个新文件的作者证书,并使整个过程更容易,并且在未来更不容易受到攻击。

注意:为此,个人 OpenPGP 证书是必需的。创建一个的说明不是这个答案的主题。

颁发证书的工作方式如下:

gpg --lsign B50FB1947A0AE31145D05FADEE1B0E6B2D8387B7
Run Code Online (Sandbox Code Playgroud)

它告诉 GnuPG 和您将来您已经彻底验证了该作者的证书。

之后,输出gpg --verify ossec-hids-2.9.3.tar.gz.asc 2.9.3.tar.gz看起来更加干净和可靠,如下所示:

gpg: Signature made Sa 23 Dez 2017 17:13:01 CET
gpg:                using RSA key EE1B0E6B2D8387B7
gpg: Good signature from "Scott R. Shinn <scott@atomicorp.com>" [full]
Run Code Online (Sandbox Code Playgroud)

  • 至少从 2013 年起,就有记录发现随机冲突,而现在我们生活在云计算无处不在的时代,即使对于资金不足的不良行为者来说,拥有巨大计算能力的 AWS 账户也被盗。当然,如果您愿意,您可以继续使用长 ID,但老实说,我认为这足以成为更喜欢指纹的理由。至少人们应该知道这一点并决定他们喜欢什么,这就是我给出这个精致答案的原因之一。 (2认同)