03 / 指南
用校验和验证下载与文件完整性
加密哈希究竟证明什么、为什么 MD5 和 SHA-1 如今只能用于完整性、一步步核验安装包,以及如何本地点算敏感文本的哈希而不上传。
完整性,而非来源真实性
加密哈希把任意输入变成定长指纹。在一个 1 GB 文件的任意位置翻转一个比特,摘要就会完全改变,因此比对摘要能精确检验两份文件副本是否逐字节一致。
- 完整性得证完整性得证:如果你的摘要与发布的一致,你的副本就是发布者哈希的那个文件,传输与落盘过程中没有任何损坏。
- 真实性另算真实性不在其列:印在下载旁边的校验和说明不了文件是谁写的——能替换下载的攻击者也能替换印出来的校验和。
- 签名是另一种工具真实性需要另一套机制:用你已信任的密钥验证签名,或者经由比下载本身更可信的渠道递送校验和。
MD5 与 SHA-1 如今只用于完整性
MD5 产出 128 位摘要,写作 32 个十六进制字符;SHA-1 产出 160 位,40 个字符。两者都很快,用来发现意外损坏都没问题——但两者都已有公开演示的碰撞,因此都无法抵抗刻意构造同摘要恶意文件的攻击者。
实用规则:MD5 或 SHA-1 匹配仍然能抓住截断的下载或出故障的磁盘,因为意外不会去计算碰撞。这些算法再也做不到的,是为你有理由怀疑的文件背书——这个判断如今属于 SHA-256 或更强的算法。
- MD5 已破MD5 碰撞多年来都已切实可行:可以故意构造出 MD5 摘要相同的两个不同文件,MD5 已无法区分意外与攻击。
- SHA-1 已破SHA-1 走了同一条路:一次公开演示的碰撞终结了它作为安全原语的寿命,浏览器、证书机构和代码托管平台都已离开它。
- SHA-2 是基线SHA-2 家族是现行基线:SHA-256(64 个十六进制字符)是发布下载校验和的默认选择,SHA-224、SHA-384 与 SHA-512(56、96、128 个字符)是适应不同约束的兄弟。
一步步核验安装包
整个检查不到一分钟,用的都是机器上已有的工具。顺序很重要:从发布者的官方页面取得期望摘要,哈希本地副本,逐字符比对。
不匹配并不总是恶意——截断的下载和缓存代理经常损坏文件——但反应是一样的:文件未通过核验,唯一正确的下一步是从来源获取新副本。
- 取得期望值在厂商官方下载或发布页面找到公布的校验和——最好是 HTTPS 上你亲自导航到的域名,而不是镜像站或搜索结果摘要。
- 本地哈希本地哈希下载的文件:macOS 或 Linux 上用 shasum -a 256,Windows 上用 PowerShell 的 Get-FileHash。两者都在你的磁盘上运行,没有任何上传。
- 精确比对不区分大小写地逐字符比对完整摘要。只要有一个字符不同,就丢弃文件并从来源重新获取——不要装上它然后祈祷。
不上传,也能哈希敏感文本
很多真实的检查对象是文本而不是文件:一段配置片段、一枚许可证密钥、一段令牌碎片、同事在电话里念出的一个值。把它们粘进随便一个网站,就是交给了别人的日志,所以哈希必须在本地发生。
SHA-256 哈希生成与校验覆盖当前 64 字符的发布校验和标准。这里的验证是比对而非解密:对你的文本做哈希,然后在浏览器内比较两个值。
- 本地设计输入留在设备上:工作区在标签页里用 WebAssembly 引擎哈希最多 1,048,576 字节的 UTF-8 文本,事后不保留任何内容。
- 显式比对校验模式是显式比对:粘贴期望摘要,工作区报告匹配或不匹配,并预先拒绝格式错误的值——MD5 必须恰好 32 个十六进制字符,SHA-256 恰好 64 个。
- 单向构造摘要是单向的:这些工具只创建和比对指纹,不会尝试逆推,因为任何正经工具都做不到。
把比对变成例程的一部分
校验和只有在比对成为习惯而非事后补救时才有效。几条小纪律能让每次检查都可靠。
对完整文件来说,操作系统自带的命令就是合适的工具,和浏览器一样本地。浏览器工作区的强项是文本载荷和快速摘要检查——MD5 哈希生成与校验对应旧下载页仍在发布的 32 字符遗留参考值。
- 完整比对比对完整摘要,而不是开头结尾几个字符;只看部分正是精心构造的碰撞所利用的捷径。
- 注明算法让算法名跟着摘要走:64 个十六进制字符可能来自好几种算法,没有标注的校验和只会引人瞎猜。
- 每跳重算文件每经过一次 U 盘、同步客户端或邮件搬运就重新哈希;每一跳都是新的损坏机会,而摘要随行的成本为零。
为你自己的文件发布校验和
如果你在分发文件——发布二进制、数据集、内部工具——请随文件发布校验和。每个产物只需一条命令,就能让每位接收者不必联系你也能验证完整性。
需要更长形式时,SHA-512 哈希生成与校验在本地产出 128 字符摘要,SHA-224 与 SHA-384 两个兄弟覆盖 SHA-2 家族其余成员——同一个引擎,同一个标签页,同一条边界。
- SHA-256 起步至少发布 SHA-256;当你的受众在 SHA-512 更快的平台上验证时,并排加上它,并给每个摘要标注算法。
- 同一信任级别校验和要与下载本身处在同一信任级别,最好放在用户已经认可的页面或仓库里。
- MD5 仅作遗留标注MD5 只保留为遗留兼容标注,明确标记为针对意外损坏的完整性检查——绝不当安全验证用。
核验只是信任工具的一环。
学会在把文件交给任何在线工具之前检查它的数据路径——这正是校验和所奖励的那份怀疑精神。