在 macOS 上验证 ISO 镜像:总和与签名验证

  • 校验和和哈希函数可以通过检测数据中的任何更改来验证 ISO 和 DMG 的完整性。
  • 在 macOS 上,您可以使用 shasum 或 md5 等命令验证图像,并依靠数字签名和证书来验证真实性。
  • balenaEtcher 或 Ventoy 等工具会将 USB 驱动器上写入的内容与原始 ISO 进行比较,以确保副本的准确性。
  • 使用 SHA-256 等现代算法并从官方来源获取哈希值是最大限度降低数据损坏或篡改风险的关键。

在 macOS 上检查 ISO 映像校验和

当我们下载 ISO 镜像或 DMG 文件在 macOS、Windows 或 Linux 上安装软件时,仅仅一切“看起来”顺利是不够的。我们需要确保数据与开发者发布的内容完全一致,没有在下载过程中损坏,也没有人恶意篡改。

在这种情况下,校验和、加密哈希以及(对于 macOS 而言)数字签名和证书验证就显得尤为重要。透彻理解所有这些技术的工作原理,是信任安装程序、使用 balenaEtcher 或 Ventoy 验证要刻录到 U 盘的 ISO 镜像,以及顺利传输重要文件的关键所在。

校验和究竟是什么?它起什么作用?

校验和本质上是一串字母数字字符,它概括了文件的内容。它是通过对文件的每一位应用数学算法(加密哈希函数)而得到的,并作为验证文件完整性的唯一指纹。

软件供应商发布安装程序、ISO镜像或重大更新时,通常会包含校验和。用户下载文件后,在本地计算相同类型的哈希值,并将两个值进行比较:如果匹配,则该文件极有可能与原始文件完全相同;如果不匹配,则说明出现了问题(下载过程中文件损坏、恶意篡改、存储错误等)。

这些总和也称为哈希值、哈希码、哈希和或简称哈希值。它们的用途远不止于下载:它们用于验证网络上的数据包、在数据库中安全地存储密码、对电子邮件进行签名,或确保整个磁盘取证镜像的完整性。

校验

哈希函数的工作原理:从文件到指纹

加密哈希函数是单向算法:它们接受任意大小的输入,并生成固定长度的输出。无论输入文件是几千字节还是几千兆字节,例如,SHA-256 的结果始终是一个 256 位序列(64 个十六进制字符)。

一个关键特性是所谓的雪崩效应:输入数据哪怕发生微小的变化,都会导致哈希值完全不同。例如,如果你计算短语“This is a test.”的MD5哈希值,然后去掉末尾的句点,得到的值就会完全不同,这使得你能够检测到哪怕是最细微的变化。

此外,一个好的哈希函数旨在使从哈希值重建原始内容在计算上不可行,并且使找到两个产生相同值(即碰撞)的不同输入变得极其困难。当算法中发现实际存在的碰撞时,例如 MD5 或 SHA-1 中就出现过这种情况,该算法被认为不适用于某些特定用途。

校验和算法的类型及其区别

每个校验和背后都蕴含着特定的算法。并非所有算法都具有相同的用途或可靠性,因此了解至少最常见的几种类型有助于我们理解在任何特定时间点所使用的算法。

简单的错误控制算法

在基础网络和系统中,一些轻量级机制已被使用了几十年,这些机制虽然并非真正的加密机制,但有助于检测传输错误。一个经典的例子是纵向奇偶校验字或字节,它将数据分组为 n 位字,对所有字执行异或运算,并将结果作为额外的字附加到末尾。

接收到数据后,会重新计算包含求和字在内的异或运算结果。如果结果不全为零,则判定为故障。这种方法计算成本低,对单比特或奇数比特错误具有一定的检测效果,但对某些模式(例如两个字中的对称变化或数据块重排序)的检测效果不佳。

二进制补码算法是对先前方法的改进尝试。它将单词作为无符号二进制整数求和,并将该和的二进制补码作为校验和。在目标端,所有元素(包括校验和)再次相加,如果结果不是全零单词,则说明出现了错误。该算法简单易懂,与奇偶校验类似,可以检测简单的错误,但无法抵御人为篡改。

位置相关的校验和

为了减少错误未被发现的情况,出现了不仅考虑单词的值,还考虑其顺序的算法。位置相关的校验和根据每个块在序列中的位置为其分配不同的权重。

此类算法的例子包括Adler-32、各种类型的CRC(循环冗余校验)以及Fletcher校验和。它们在网络协议、压缩文件和存储系统中非常常见,因为它们能显著提高对重复错误、数据块插入或删除的检测能力,尽管它们在密码学上仍然不够强大。

模糊校验和

在垃圾邮件过滤和协同垃圾邮件检测领域,会用到一些不同的技术,例如模糊校验和。模糊校验和并非寻找任何微小的变化就能彻底改变校验和值,而是反其道而行之:确保非常相似的电子邮件生成相同或非常相似的哈希值。

为了实现这一点,邮件内容会被规范化并精简到最小版本(去除可变部分、格式等),然后计算校验和。像DCC这样的服务会从不同的电子邮件提供商那里接收数百万个这样的哈希值,并将重复出现超过特定阈值的相同值模式标记为潜在的垃圾邮件。

现代加密哈希函数

当我们谈到验证 ISO 镜像、安装程序或固件时,通常会遇到 MD5、SHA-1、SHA-2 或 SHA-3 等加密哈希算法。它们的目的不仅在于检测意外错误,还在于抵御旨在生成与合法原始文件具有相同哈希值的恶意文件的特定攻击。

例如,MD5多年来一直是验证下载文件的真实标准,它使用128位哈希值。然而,实际应用中已经证实存在碰撞现象,如今人们认为它无法有效保护文件完整性免受攻击,尽管在一些仅需检测意外损坏的场景中,它仍然被使用。

SHA-1(160 位)的发展历程与之类似:曾广泛应用于证书、签名和文件验证,但由于存在漏洞,目前不建议在新系统中使用。SHA -2 系列(SHA-224、SHA-256、SHA-384、SHA-512)已基本取代 MD5 和 SHA-1,其中 SHA-256 已成为 NIST 推荐的标准,并应用于浏览器、TLS 等协议、VPN,甚至比特币等网络。

SHA-3 是最新一代的标准化算法,其输出长度与 SHA-2 类似,但内部设计不同。BLAKE2和 BLAKE3 等现代算法也具有高速和高安全性,因此常用于批量文件验证工具和对性能要求极高的应用程序。

视窗

如何在 Windows 中检查校验和

在 Windows 系统中,无需安装任何软件即可计算基本文件哈希值。您可以使用命令提示符或 PowerShell 中的 `certutil` 命令,或者为了更方便地使用 PowerShell 中的 `Get-FileHash` cmdlet。

使用 certutil,您只需打开命令提示符并运行类似`certutil -hashfile "path\to\file.iso" SHA256` 的命令。该工具将使用您指定的算法(MD5、SHA1、SHA256、SHA384、SHA512 等)生成校验和,您只需将其与开发者在其网站上提供的校验和进行比较即可。

在 PowerShell 中,Get-FileHash C:\path\to\file.iso命令默认返回文件的 SHA-256 哈希值,但您可以使用 -Algorithm 参数指定其他算法(MD5、SHA1、SHA384、SHA512、RIPEMD160、MACTripleDES…)。

如果显示的值与官方网站上发布的值完全一致,则可以认为文件完好无损。如果不一致,建议删除并重新下载,因为该文件可能已损坏或被恶意第三方篡改。

如何在 macOS 中验证校验和:终端、ISO 和 DMG

macOS 默认包含生成和比较 ISO、DMG 及其他格式文件哈希值所需的一切工具。无需安装其他软件;只需使用“终端”应用程序即可。

最通用的命令是 `shasum`,它允许您从 SHA 系列中选择不同的算法。例如,如果您下载了类似 `vlc-3.0.6.dmg` 的安装程序,并且项目网站公布了其 SHA-256 哈希值,那么在 macOS 上您可以执行以下操作:

shasum -a 256 vlc-3.0.6.dmg

终端将显示一行包含哈希值和文件名的信息;只需将其与网站上显示的信息并排比较,即可验证两者是否一致。对于其他算法,您可以使用直接命令:`md5` 用于 MD5,`shasum -a 1` 用于 SHA-1,`-a 384` 用于 SHA-384,`-a 512` 用于 SHA-512,等等。

如果 ISO 镜像包含 md5sum.txt 文件或类似文件,该文件通常包含 ISO 镜像中每个内部文件的哈希值,而不仅仅是镜像本身的哈希值。将 ISO 镜像刻录到 U 盘后,您可以挂载该 U 盘,然后在 Linux 系统中使用 `md5sum -c md5sum.txt` 命令,或在 macOS 系统中使用等效命令,逐个验证每个文件的哈希值。不过,在 macOS 系统中,更常见的做法是在将 ISO 镜像复制到 U 盘之前,先验证整个 ISO 镜像的哈希值。

macOS 中的签名和证书:超越哈希值

除了哈希值之外,macOS 还严重依赖于通过“钥匙串访问”和 Gatekeeper 管理的数字签名、证书和信任策略系统。安装程序拥有正确的哈希值并不能保证它来自合法开发者;代码签名的作用就在于此。

使用“钥匙串访问”应用,您可以利用“证书助理”来检查特定证书、查看其信任策略并确定其有效性。macOS 会检查证书是否由受信任的根证书颁发机构颁发、是否已过期且未被吊销,并据此允许或阻止某些二进制文件的执行。

在日常使用中,当您打开 DMG 文件或运行从互联网下载的应用程序时,macOS 会将开发者签名验证与 Gatekeeper 和公证等机制相结合。哈希组件侧重于文件完整性;签名和证书组件则负责验证颁发者的真实性。

balenaEtcher 或 Ventoy 等工具如何验证 U 盘的内容?

当您使用 balenaEtcher 或 Ventoy 等工具创建可启动 USB 驱动器时,它们并非只是简单地复制字节然后听天由命。这些工具会执行后处理,以验证写入驱动器的内容是否与源文件匹配,通常是通过比较从设备读取的内容和原始 ISO 文件的内容来实现的。

典型的工作流程与手动使用 `dd` 命令非常相似:下载 ISO 镜像,清理驱动器,写入数据,然后再次读取。例如,balenaEtcher 通常会从 USB 驱动器读取数据块,并将其与磁盘镜像中的相同数据块直接进行比较。如果检测到任何差异,它会将过程标记为失败,而无需 ISO 镜像中包含 md5sum.txt 文件。

Ventoy 采用不同的策略,它不会将 ISO 文件“刻录”到驱动器,而是将其原封不动地复制到一个特殊分区,启动时会显示一个菜单,供用户选择要使用的 ISO 文件。在这种情况下,可以通过比较存储在 U 盘上的 ISO 文件的哈希值与源计算机上的哈希值来验证完整性,而无需检查镜像的内部内容。

如果 Linux 发行版的 ISO 镜像包含 md5sum.txt 或 SHA256SUMS 等文件,并且安装引导加载程序配置为支持这些文件,则可以在启动期间验证镜像的内部文件。但是,刻录工具并不依赖这些文件;它们的验证主要基于在块级别比较写入的数据和源数据。

当 ISO 文件不包含内部校验和文件时该怎么办

并非所有 ISO 镜像都包含 md5sum.txt 或类似文件,其中包含其内容的哈希值。但是,您应该始终要求官方网站在下载页面或单独的文件中(例如 SHA256SUMS、CHECKSUMS 等)提供至少完整 ISO 镜像的哈希值(通常为 SHA-256)。

如果没有包含文件校验和的内部文件,验证过程就简化为比较 ISO 文件的哈希值。您需要在系统上计算下载文件的 SHA-256 哈希值,并将其与已发布的哈希值进行比较。如果两者匹配,则说明完整的镜像文件与开发者生成的镜像文件相同,您可以放心地将其刻录到 U 盘。

如果供应商不公布任何校验和或签名,情况就会变得复杂。您可以将 ISO 文件的哈希值与从其他网络或其他人处下载的副本的哈希值进行比较,但仍然无法获得官方的参考信息。在这种情况下,如果软件涉及敏感信息(例如操作系统、安全工具、加密货币钱包等),最好谨慎行事,并寻找更可靠的来源。

请记住,即使有了已发布的哈希值,安全性仍然取决于是否从可信来源并通过安全连接(HTTPS)获取。攻击者可以创建一个包含恶意 ISO 文件和其自身哈希值的虚假网站,因此,只有当您访问的是项目的官方网站时,验证才有意义。

快速哈希

用于处理哈希值和验证完整性的专用工具

除了每个操作系统内置的实用程序外,还有许多专门的程序可以方便地处理哈希值,尤其是在需要计算多个文件的总和、比较整个文件夹或自动验证副本时。

QuickHash等应用程序为 Windows、Linux 和 macOS 提供全面的图形界面,支持MD5、SHA-1、SHA-2(256 和 512)、SHA-3、BLAKE2、BLAKE3 等算法。它们允许您生成文本哈希值、单文件哈希值、多文件哈希值,比较两个文件甚至两个目录,并创建经过哈希验证的副本。

其他工具,例如 HashMyFiles、MultiHasher 或 MD5 & SHA Checksum Utility,专注于 Windows,允许您批量生成整个文件夹和子文件夹的哈希值,甚至可以集成到资源管理器上下文菜单中,以便通过右键单击来调用它们。

还有一些轻量级或便携式解决方案(HashCalc、MD5 Hash Check、Hasher Lite、DeadHash、Hash Generator、FCIV、Checksum Control……),可以满足更具体的需求,例如快速检查下载的安装程序,而无需记住命令或打开终端。

哈希算法的风险、攻击和安全限制

尽管哈希值常被描述为“无法破解”,但重要的是要了解,确实存在一些破解哈希值的技术。最直接的方法是暴力破解,即尝试所有可能的输入组合,直到找到一个能够生成所需哈希值的组合——对于使用现代算法的长密码来说,这几乎是不可能的。

当攻击者怀疑输入类型(例如,典型的人类密码)时,字典攻击和彩虹表可以加快破解过程。它们无需测试随机字符串,而是使用预编译的列表和预计算的哈希值,从而大大缩短发现弱密钥所需的时间。

碰撞攻击利用了这样一个事实:在输出数量有限的情况下,必然存在不同的输入可以生成相同的哈希值。如果算法存在数学上的缺陷,碰撞就可以相对高效地被发现,从而生成两个具有相同哈希值的不同文件。MD5 和 SHA-1 正是由于这种情况而变得不可靠,无法用于关键应用。

为了降低这些风险,我们采用了多种策略:使用强大且最新的哈希算法,在对输入进行哈希处理之前添加随机“盐”,以及使用专门设计为速度慢且并行化成本高的特定密码算法(bcrypt、scrypt、Argon2)。

macOS 上验证 ISO 和 DMG 映像的最佳实践

如果您要下载 ISO 或 DMG 文件用于 macOS,尤其是在安装敏感系统或工具时,最好遵循清晰的步骤。首先,务必从项目官方网站下载,并确保 URL 和 HTTPS 证书正确无误。

接下来,找到发布校验和或相关 PGP 签名的部分。优先使用 SHA-256 或更高版本的现代算法,除非您只关心检测非敏感文件中的意外损坏,否则请避免使用 MD5 或 SHA-1。

将 ISO 或 DMG 文件保存在“下载”文件夹中后,打开终端,导航到该文件夹​​,然后使用 shaSum 或 MD5(视情况而定)计算哈希值。将计算结果与官方值进行比较,注意不要遗漏任何数字或混淆相似的字符。如果两者不匹配,请立即删除该文件。

如果您计划使用 balenaEtcher、Ventoy 或其他工具将镜像写入 U 盘,请确保该应用程序提供写入后验证功能。这样,您不仅可以确保 ISO 镜像正确,还可以确保 U 盘上的副本能够准确地还原原始数据。

虽然这看起来可能有点麻烦,但这种验证过程可以避免很多麻烦,并降低运行损坏或篡改代码的风险。深入了解 macOS 中的校验和、签名和证书的工作原理,可以让您更安心地使用 ISO 和 DMG 文件,因为您知道安装的内容正是开发者预期的,绝无其他。

用于比较文本文件并检测细微变化的工具
相关文章:
用于比较文本文件并检测细微变化的工具

在 Google 中将其添加为首选来源