如何在 Linux 上验证下载文件的真实性和完整性如何在 Linux 上验证下载文件的真实性和完整性如何在 Linux 上验证下载文件的真实性和完整性如何在 Linux 上验证下载文件的真实性和完整性
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上验证下载文件的真实性和完整性

“当您从网络下载文件(例如安装程序、ISO 映像或压缩存档)时,该文件可能会在各种错误情况下被损坏,例如由于线路传输错误、下载中断、存储硬件故障、文件系统错误等。除了此类故障情况之外,文件也可能在下载期间或下载之前被确定的攻击者故意篡改。例如,证书颁发机构受损的攻击者可能会发起中间人 (MITM) 攻击,诱骗您从伪造的 HTTPS 网站下载充满恶意软件的文件。

为了防止出现此类问题,通常建议您在从网络下载文件时验证文件的真实性和完整性。特别是当您下载相当敏感的文件(例如操作系统映像、应用程序二进制文件、可执行安装程序等)时,盲目信任下载的文件不是一个好习惯。

验证下载文件完整性的一种快速简便的方法是使用各种校验和工具(例如,md5sum、sha256sum、cksum)来计算和比较校验和(例如,MD5、SHA 或 CRC)。然而,校验和很容易受到碰撞攻击,并且也不能用于验证文件的真实性(即所有者)。

如果您想验证下载文件的真实性(所有者)和完整性(内容),则需要依赖加密签名。在本教程中,我将介绍如何使用 GnuPG (GNU Privacy Guard) 检查文件的真实性和完整性。

在此示例中,我将验证可从 https://onionshare.org 下载的磁盘映像文件。在此网站中,发布者提供其官方公钥以及用于密钥验证目的的指纹。

对于要下载的文件,发布者也会提供相应的 PGP 签名。

安装 GnuPG 并生成密钥对

让我们首先在 Linux 系统上安装 GnuPG。

在 Ubuntu、Debian 或任何其他 Debian 衍生产品上:


$ sudo apt-get install gnupg

在 Fedora、CentOS 或 RHEL 上:


$ sudo yum install gnupg

安装后,生成您将在本教程中使用的密钥对。


$ gpg --gen-key

在密钥生成过程中,系统会要求您提供您的姓名和电子邮件地址,以及用于保护您的私钥的密码。您还可以选择密钥对何时过期(默认情况下不会过期)。根据您选择的密钥大小(1024 到 4096 位之间),密钥生成过程可能需要几分钟或更长时间,因为它需要收集足够数量的随机数据,这些数据来自您的桌面活动(例如键盘输入、鼠标移动、磁盘访问)。

密钥生成完成后,公钥和私钥将存储在~/.gnupg目录中供使用。

导入文件所有者的公钥

验证下载文件的第一步是导入文件所有者的公钥,并(可选)与所有者建立信任。

首先,下载文件所有者的公钥:


$ wget https://onionshare.org/signing-key.asc

然后继续使用 gpg 命令将公钥导入到您的密钥环中:


$ gpg --import signing-key.asc

导入所有者的公钥后,它将打印出密钥 ID(例如,EBA34B1C),如上所示。记下此密钥 ID。

现在,通过运行以下命令检查导入的公钥的指纹:


$ gpg --fingerprint EBA34B1C

您将看到公钥的指纹字符串。将此字符串与网站中显示的指纹进行比较,看看它们是否匹配。

一般来说,验证公钥的所有者是否是他或她所声称的人必须经过比简单指纹比较更严格的过程,因为网站可能被伪造以匹配指纹。仅当密钥经过充分审查确实属于该人时(例如,您遇到了该人,通过电话交谈以确认他/她的身份等),您才信任某人的公钥。

一旦您通过其他方式验证了公钥的有效性,并决定信任该公钥,您就可以明确地将您的信任分配给该密钥,如下所示。请注意,此步骤是可选的,并且您不需要在使用它之前分配显式信任。


$ gpg --edit-key EBA34B1C

此命令将显示 GPG 提示符:

在 GPG 提示符下输入 trust,这将允许您选择此密钥的信任级别,范围为 1 到 5。

在这种情况下,我决定分配信任 4。之后,通过输入 sign 使用您自己的私钥对其进行签名,然后在 GPG 提示符下输入 save 来完成:

同样,这种显式向公钥分配信任的方式并不是必需的,通过简单地导入密钥来隐式信任通常就足够了。

为密钥分配完全信任的含义是,如果另一个密钥 X 使用此完全信任的密钥进行签名,则您也将认为该密钥 X 有效。一般来说,密钥验证依赖于一种称为“信任网络”的复杂机制。

回到教程,现在让我们检查导入的密钥列表。


$ gpg --list-keys

您应该至少看到两个密钥:一个具有深度 0 和最终信任 (1u) 的密钥,这是您自己的密钥,另一个具有深度 1 和完全信任 (1f) 的密钥,这是您之前签署的密钥。

验证文件的真实性/完整性

一旦您使用文件所有者的公钥与文件所有者建立了信任关系,我们现在就可以验证您从所有者下载的文件的真实性和完整性。

在我们的示例中,文件所有者分别发布文件和相应的 PGP 签名 (*.asc)。签名的作用是证明文件并在文件上打上时间戳。

典型的签名 (*.asc) 如下所示。


-----BEGIN PGP SIGNATURE-----

iQIcBAABCgAGBQJUJGhsAAoJEP1yCtnro0sc1jUP/ixNY/lKdrcMIAUoqlWKNE8f
sj4SFiwREMew76w66GASDF03fa5zPX6EsS2kucgx8ZsfEiSmN5T0y2P/aSaXwZqF
kywZVEzirKtca5AJ4DBzu6qrt9GgSw6JBJVv1oBJCMNyO+eAj341paR3MudvnyQz
H/N5tc4Qcilzy6M184opGIzy4ipEmMXfLHsd7WJpAyn+tO/z3uhh9NkNuygZpaFr
olpSWPE8revdDJyfMfSmb3ZrFmhLn7FCEltOi+a7SluvrMclizfnbec9rgLJtjo0
CPDZY7tsWmmL0DA3VvpMVqGvkg/Dyhpn2IIDrNaLAlvGQ5aovf+4tjad5IHvyaWx
4Gds93G6Hqvv5RwGx7OR3hgt2o0Y+qFsVDxVnPxerGhXeJXHzSDwLQMpdj9IoSU
Ae/53XXnxqSN6POZcwHiHvbsv0pdlg0Ea0dDAAN0ZeINNyZf1R0tLjWkcgpvGCtv
qkJuYFF9W9cWHraPY2ov5Hs/JZzPcG0eVpnDdzfOOH1gDKADq9A5D2X5QJCulsh9
WwU3X+E43OqIsoRzBucItD9HhZbEH7t8Q0xAqnAkgU3hriZp3dN4cnMfhM6I9hli
EmpSpLKCceMexu2o9QgzGXVm+AGZJe4QkuwAhRIccp5JDMVny61UlKTasjy6co8h
5GBhhYybPEFM+G1BODMd
=c9wo
-----END PGP SIGNATURE-----

让我们下载该文件及其签名:


$ wget https://onionshare.org/files/0.6/OnionShare.dmg
$ wget https://onionshare.org/files/0.6/OnionShare.dmg.asc

现在验证下载文件的 PGP 签名。


$ gpg --verify OnionShare.dmg.asc OnionShare.dmg

如果命令的输出包含 Good Signature from ,则下载的 .dmg 文件已成功通过身份验证和验证。如果下载的文件在生成签名后被任何方式篡改,验证将失败。

此时您可以放心并信任下载的文件。

©2015-2025 艾丽卡 support@alaica.com