我在 .deb 包中看到三个校验和:
- md5sum
- sha1
- sha256
为什么我们需要 3 个校验和?我们可以使用其中任何一个来唯一地标识 Debian 软件包吗?
答案1
是的,您可以使用其中任何一个总和来识别包裹。
回到 Debian 的早期,在 apt 和 Ubuntu 出现之前,当 dpkg 作为顶级包管理器自由地在地球上漫游时,Debian 用户手动下载包,然后手动运行 md5sum 来验证非损坏的下载。大约 20 年前,md5sum 已经过时了,因为 apt 的早期版本开始作为新存储库系统的一部分自动验证下载。
Debian 从 md5sum 转向更安全的 sha1,后来又转向更安全的 sha256,因为该项目的安全专家确定,几十年来越来越强大的计算能力使他们的软件包容易受到复杂的攻击。
但是,如果没有生成旧哈希值,许多旧式打包方法(如 debhelper)和基础设施(如 alioth)就会抛出错误。清理旧式基础设施是一个复杂的问题。问题不在于代码,而在于那些设置了依赖于他们最喜欢的工具的工作流程的人,他们并不真的想改变。他们是志愿者,所以强制改变很少是一个现实的选择。所以基础设施清理工作进展缓慢。但是,请注意,这个社区愿意公开讨论变化,并接受变化可能很慢,这可以说是 Debian 的一大优势。
将来有一天 md5 和 sha1 将会消失。但是 Debian 还没有完全做到这一点。
答案2
这并没有真正回答问题,但一些额外的背景信息可能还是值得赞赏的,因为“识别包”可能意味着很多不同的事情。哈希值总和会告诉您包的内容与描述 (.dsc) 文件相匹配。是的,这些哈希值中的任何一个都会告诉您该内容是否被更改。
它没有告诉你的是,自从包离开开发人员以来,内容是否仍然相同。每个人都可以想出一个包并生成一个新的 .dsc 文件 - 具有匹配但不同的哈希值。您需要检查包的签名以确保包是它应该的样子,无论哈希值是否匹配。
您还可以自己对软件包进行签名并信任自己的签名。这样您就可以修改软件包。.changes 文件将二进制文件链接到源树。这可能有助于“识别”您(或发行版构建恶魔)为其重建的不同硬件平台上功能等效的软件包。但跨平台时,二进制文件将具有不同的哈希值。
对于大多数包管理用例,了解包名称+版本加上签名就足够了。这还为您提供了“更新”半顺序,这是哈希无法提供的。