主页 > imtoken官方版下载手机版 > 如何识别文件的真伪

如何识别文件的真伪

imtoken官方版下载手机版 2023-06-23 06:21:38

每个人都下载文件。你有没有想过这些文件可能是假的,尤其是来自云盘或专门的下载站点。

本文将讨论如何识别文件的真实性。

如何识别文件的真假

一、XcodeGhost 事件

让我们从一场真正的风暴开始。

2015 年 9 月,发现一些 Apple 移动应用程序 [1] 将数据发送到可疑网站。进一步调查证实,可疑代码是在打包 Xcode 时植入的。也就是说,开发者的编程工具Xcode是被动的。

如何识别文件的真假

腾讯安全团队发布调查报告[2],应用商店前 5000 款应用中有 76 款被感染。360应用商店检测到[3]后,共有1076个应用被感染,包括陌陌、网易云音乐、滴滴打车、高德地图、1230同花顺等热门应用。Apple 已从官方软件商店中删除了所有受感染的版本。这种干扰称为 XcodeGhost 事件 [4]。

国家互联网应急响应中心发布特别预警通知。

如何识别文件的真假

追根溯源,那些移动四肢的Xcode并不是从官方渠道下载的,而是从云盘或下载网站下载的。一个化名“coderfun”的人在各种iOS开发者峰会或微博上留言,引诱其他开发者下载修改后的Xcode,版本从Xcode6.1到6.4。

如何识别文件的真假

如何识别文件的真假

如何识别文件的真假

随后,coderfun发布了道歉公告,称这只是自己的一个实验,没有恶意。但是,这种动荡足以引起警惕,任何下载的文件都不一定安全,并且可能已被更改或植入了恶意代码。

二、软件防伪措施

为了避免来历不明的软件,许多平台都有签名机制。软件版本必须由经过认证的开发人员使用平台的密钥进行签名。如果用户安装了未签名的软件,平台会弹出警告,阻止安装。以下是 MacOS 的警告。

如何识别文件的真假

但是,不可能所有的开发者都去认证,特别是如果认证是收费的。此外,用户不注意这些警告,通常会忽略或自动关闭它们。因此,这种方法的效果并不显着。

目前常见的做法是在软件发布时同时给出哈希码和签名文件。前者保证它没有被第三方篡改,后者保证它确实来自原作者。

例如,Linux 发行版 Manjaro 提供了除原始 iso 文件之外的其他三个文件:一个 sha1 哈希文件、一个 sha 256 哈希文件和一个 sig 签名文件。他们保证软件的真实性。

如何识别文件的真假

三、哈希码校验

哈希码意味着文件的内容由哈希函数评估并返回一个唯一的字符串。即使原始内容只改变了一个字节,哈希码也会完全不同。用户下载软件后,只需要估算哈希码哈希官方网站,与作者给出的哈希码进行比较,就可以知道软件是否被改动过。

目前常用的三种哈希函数是MD5、SHA1和SHA256。其中SHA256最安全,SHA1和MD5次之。通常,软件将提供这些哈希码中的至少一个。

如何识别文件的真假

以下是验证哈希码的方式。

(1)Linux系统

Linux系统直接使用md5sum、sha1sum、sha256sum这三个命令来计算哈希码。

$ md5sum foo.zip
$ sha1sum foo.zip
$ sha256sum foo.zip

上面的命令返回文件 foo.zip 的三个哈希码。然后用户将其与作者给出的哈希码进行比较。如果它们不一致,则文件已被更改,或未完成完整下载。

有时,如上面的 Manjaro 案例,哈希码不会写在网页上,而是作为单独的文本文件下载。在这种情况下,可以使用 -c 参数。

$ md5sum -c foo.zip.md5file
$ sha1sum -c foo.zip.sha1file
$ sha256sum -c foo.zip.sha256file

上面的命令会返回哈希码的比较结果,直接告诉用户是否一致。

(2)Mac系统

MacOS的认证命令需要自己安装。

$ brew install md5sha1sum

执行上一条命令后,就可以使用md5sum和sha1sum了。至于 sha256sum,请改用 shasum -a256 命令。

(3)视窗

Windows 可以下载和安装免费软件 Quick hash[5] 或 Raymond 的 MD5 & SHA Checksum Utility[6]。其中,Quich hash 是跨平台的,也支持 Linux 和 MacOS。

如何识别文件的真假

四、签名验证

哈希码只能保证文件的内容没有发生变化,但是哈希码本身也有可能是伪造的哈希官方网站,可能和原文件一起伪造。

文件签名可以解决这个问题。软件发布时,作者使用自己的公钥为发布的软件生成签名文件(Manjaro示例的sig文件),用户使用作者的私钥对签名文件进行验证。

第一步是下载私钥。

该软件的官网通常也会给出作者私钥的下载方法。例如,Manjaro 可以从 GitHub 存储库下载私钥。

$ wget github.com/manjaro/packages-core/raw/master/manjaro-keyring/manjaro.gpg

公钥也可以放在专用的私钥服务器中,在这种情况下,可以使用 gpg 命令从私钥服务器下载。

$ gpg --keyserver hkp://eu.pool.sks-keyservers.net --search-keys [公钥 ID]

上面的命令会列出搜索结果,让你选择是否下载某个私钥。--keyserver 参数指定私钥服务器,search-keys 参数给出搜索参数,可以是作者姓名,也可以是私钥的指纹。

gpg 命令可以在 Linux 下直接使用,MacOS 和 Windows 需要安装 GnuPG[7]。

第二步是导入私钥。

下载私钥后,将其导出到操作系统。

$ gpg --import [公钥文件]

如果有完整的私钥指纹,gpg命令的--recv-key参数可以直接从服务器导出私钥。

$ gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key "27DE B156 44C6 B3CF 3BD7 D291 300F 846B A25B AE09"

第三步,验证签名。

导入私钥后,即可验证签名文件(扩展名为 sig 的文件)。

# 用法一
$ gpg --verify [签名文件]

# 用法二
$ gpg --verify [签名文件] [原始文件]

上述命令的两种用法具有相同的效果。但是,用法一要求原始文件与签名文件同名,并且在同一目录下。例如,如果签名文件是 foo.iso.sig,则原始文件必须是 foo.iso 在同一目录下。

签名文件通常包含完整的私钥指纹,因此也可以跳过前面的第一步和第二步,直接从私钥服务器获取私钥来验证签名。

$ gpg --keyserver-options auto-key-retrieve --verify [签名文件]

(结束)

参考

[1]

找到:150920191633/http://drops.wooyun.org/news/8864

[2]

调查报告:.com/index.php/blog/msg/96

[3]

找到:www.anquanke.com/post/id/82436

[4]

XcodeGhost 事件:%E9%A3%8E%E6%B3%A2

[5]

快速哈希:

[6]

Raymond 的 MD5 和 SHA 校验和实用程序:.com/MD5-SHA-Checksum-Utility/3000-2092_4-10911445.html

[7]

GnuPG: