作为示例,该项目提供了一个*.asc
带有 PGP 签名的文件来验证下载的内容(与校验和相反,您可以看到空白列):https://ossec.github.io/downloads.html
我该如何使用这个文件?我尝试了gpg --verify
其他变体,但似乎将名称与文件匹配,但是下载的文件名并不完全相同...不确定它应该如何工作。
答案1
下载密钥文件:
wget https://ossec.github.io/files/OSSEC-ARCHIVE-KEY.asc
检查密钥文件以确认其具有
EE1B0E6B2D8387B7
其密钥 ID。gpg --keyid-format long --list-options show-keyring OSSEC-ARCHIVE-KEY.asc
如果正确,则导入密钥:
gpg --import OSSEC-ARCHIVE-KEY.asc
下载软件包
wget https://github.com/ossec/ossec-hids/archive/2.9.3.tar.gz
下载签名文件
https://github.com/ossec/ossec-hids/releases/download/2.9.3/ossec-hids-2.9.3.tar.gz.asc
验证一下
gpg --verify ossec-hids-2.9.3.tar.gz.asc 2.9.3.tar.gz
输出
gpg: Signature made Sat Dec 23 16:13:01 2017 UTC gpg: using RSA key EE1B0E6B2D8387B7 gpg: Good signature from "Scott R. Shinn <[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: B50F B194 7A0A E311 45D0 5FAD EE1B 0E6B 2D83 87B7
答案2
这进一步完善了 Евгений Новиков 的答案。它不使用已弃用的 GnuPG 命令,并避免使用可能被伪造的密钥 ID 进行身份验证:
下载文件
获取作者用于颁发签名的OpenPGP证书:
wget https://ossec.github.io/files/OSSEC-ARCHIVE-KEY.asc
然后获取作者签发的独立签名:
wget https://github.com/ossec/ossec-hids/releases/download/2.9.3/ossec-hids-2.9.3.tar.gz.asc
最后获取你要验证的文件:
wget https://github.com/ossec/ossec-hids/archive/2.9.3.tar.gz
显示并彻底比对指纹
在导入证书之前,显示完整的 40 个字符长的 OpenPGP 证书指纹,并确保它与作者证书的指纹完全匹配。
注意力:您应该通过安全渠道从作者处获取指纹。除了亲自与作者见面交换指纹外,下一个最好的办法是将指纹显示在作者的网站上并通过方案https:
URI 访问。作者确实发表了一个这里。
注意力:如果作者只显示短 ID(8 个字符长,例如2D8387B7
)或长 ID(16 个字符长,例如EE1B0E6B2D8387B7
),最好保持怀疑态度并要求作者发布完整指纹,因为短 ID 和长 ID 都已被证明是可伪造的(阅读更多这里)
gpg --import --import-options show-only OSSEC-ARCHIVE-KEY.asc
旧版本的 GnuPG 默认不显示完整指纹。--fingerprint
如果不显示,请尝试添加标记。
输出看起来应该是这样的:
pub rsa4096 2011-03-10 [SC]
B50FB1947A0AE31145D05FADEE1B0E6B2D8387B7
uid Scott R. Shinn <[email protected]>
sub rsa4096 2011-03-10 [E]
本例中的 OpenPGP 证书指纹是:
B50FB1947A0AE31145D05FADEE1B0E6B2D8387B7
有时指纹会以 4 个字符为一个段显示,每个段之间都有空格,以便于人类阅读。在这种情况下,可以安全地忽略空格进行比较:
B50F B194 7A0A E311 45D0 5FAD EE1B 0E6B 2D83 87B7
注意力:请确保不仅比较指纹的各个部分,因为这再次为欺骗攻击提供了空间。
为了进行轻松、彻底的比较,只需在您选择的文本编辑器中将两个指纹以相同的格式复制到后续行中,然后进行视觉匹配。
导入证书
如果完整指纹完全匹配,则将证书导入本地 GnuPG 密钥环:
gpg --import OSSEC-ARCHIVE-KEY.asc
验证文件
现在您可以通过加密方式验证该文件是否与作者发布和签名的文件完全匹配。
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 <[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: B50F B194 7A0A E311 45D0 5FAD EE1B 0E6B 2D83 87B7
注意力:如果文件已被篡改,你应该会看到类似这样的内容:
gpg: Signature made Sa 23 Dez 2017 17:13:01 CET
gpg: using RSA key EE1B0E6B2D8387B7
gpg: BAD signature from "Scott R. Shinn <[email protected]>" [unknown]
如果发生这种情况,您不应使用或执行文件内容,并联系作者。如果无法联系到作者,公开提高认识是下一个最佳选择。
一次又一次验证作者发布的文件的真实性
最后一步显示的警告提示您,在确保其合法后,最好使用您自己的个人 OpenPGP 证书来认证导入的作者签名证书。
如果您长期保存和维护 GnuPG 密钥库,则无需再次验证每个新文件的作者证书,并且可以使整个过程更容易,并且将来更不容易受到攻击。
注意力:为此,必须拥有个人 OpenPGP 证书。创建证书的说明不是本回答的主题。
颁发认证的流程如下:
gpg --lsign B50FB1947A0AE31145D05FADEE1B0E6B2D8387B7
它告诉 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 <[email protected]>" [full]