Ubuntu软件包(deb文件)只有MD5校验和吗?

问题背景简介

(以便更多人能够使用问题)

在一个 Ubuntu/debian 风格的软件包(*.deb 文件)中,存在一个名为 /DEBIAN/md5sums 的文件,其内容如下:

212ee8d0856605eb4546c3cff6aa6d35  usr/bin/file1
4131b66dc3913fcbf795159df912809f  path/to/file2
8c21de23b7c25c9d1a093607fc27656a  path/to/file3
c6d010a475366e0644f3bf77d7f922fd  path/to/place/of/file4

我推测这个文件将用于检查随软件包提供的文件是否被损坏。由于该文件被称为“/DEBIAN/md5sums”,我认为路径+文件名前面的十六进制数是软件包文件的 MD5消息摘要算法 哈希值。

现在对此感兴趣的每个人都知道,MD5哈希算法早就被破解了。因此,完全有可能改变软件包中文件的内容(例如恶意操作),而文件的MD5哈希值仍然保持不变(例如参见概念证明“预测胜者...”)。 问题 考虑到上述信息,我想知道以下内容: 假设我在我的Ubuntu系统中安装一个软件包。是不是只有通过检查DEBIAN/md5sums文件才能确保数据没有被篡改? 回答这个问题,我认为以下内容可能会有所帮助:
  • 整个deb包是否也有哈希值(用于生成哈希值),以便有另一种方式确保接收到的文件是“安全的”/“未被篡改”?
  • 如果除了DEBIAN/md5sums文件之外还有其他方法来确保完整性,那么*.deb包中包含的文件是什么?
  • Ubuntu是否使用比SHA-1和MD5更“不易破解”的哈希算法来进行存储库/软件包系统的校验?

很遗憾,我也不知道。

任何能够解答这个问题(甚至只是一个子问题)的回应都非常欢迎。

更新

(1) https://help.ubuntu.com/community/Repositories/Ubuntu#Authentication_Tab似乎表明有一些公共/私有的gpg密钥在起作用(以保护存储库和软件包系统)免受攻击。然而,链接位置上的信息并不多。它几乎没有提到软件包系统的安全方面。无论如何,我假设该链接已经表明了问题的答案将是“否 - 至少来自存储库的deb软件包也受到...的保护”。希望有人能提供一些见解来回答这个问题。 (2) 这个问题似乎也涉及到Ubuntu软件包系统中的“安全”主题。所以我在这里添加它,以便如果有人试图弄清楚问题,就可以方便地找到:为什么建议的BADSIG(在apt-get update时)修复是安全的?

1http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Checksums 指出支持每个文件的SHA-1和SHA256校验和,但我不知道apt的校验和策略是什么。 - chronitis
1@chronitis,谢谢你提供的链接。确实,在那里提到了SHA-*哈希值,但我仍然需要弄清楚它们是如何出现在软件包中(我还没有看到)或者软件包系统中。你知道更多吗?嗯,这个提示已经是一个很好的进展了。 - humanityANDpeace
3个回答

Ubuntu发布了一个用RSA密钥签名的清单。该清单列出了各个Packages索引文件,每个文件都有MD5、SHA-1和SHA-256哈希值。每个Packages文件列出了各个带有MD5、SHA-1和SHA-256哈希值的.deb文件。 为了验证,apt使用它支持的最佳哈希算法,并由它正在下载的存档发布。在Ubuntu存档的情况下,这是SHA-256。 因此,在Ubuntu系统上安装软件包的整个过程都受到RSA和SHA-256的保护。 dpkg中存在的MD5保护只对意外损坏有用,不必要保护安装路径。 您可能会对debsums软件包感兴趣,但由于它使用的是MD5,所以它也只适用于检查意外损坏。 如果您想检查恶意系统修改,那么这些工具并不适合您。您需要将系统脱机,并根据先前的记录、原始软件包文件或从这些文件生成的安全哈希值进行检查。 请注意,由于成功的恶意修改可能只是将软件包降级到安全更新之前的版本,仅检查所有已安装的软件包文件是否与其原始文件匹配可能也不足够。

1我已经获得了一些更清晰的见解。你从哪里获取到所有这些信息,而我却很难找到呢?你有一些文件或链接可以提供吗?另外,我很感谢你提到了“降级危险”,但我还不太明白这可能会被如何利用。太棒了!谢谢你。 - humanityANDpeace
我不相信apt存储库格式在任何地方都得到了正确的规范或文档化。这很糟糕,但事实就是如此。最好(也是我所知唯一)真正的文档是源代码。我知道细节,因为我在源代码中工作过。另一方面,dpkg格式在Debian政策中非常明确规定。它涵盖了软件包进入系统后发生的情况,但不涉及它们如何到达系统。后者是由apt完成的。 - Robie Basak
降级风险:这只是一个旁白,与您最初的问题没有直接关联。如果在版本A中发现了漏洞X,您会得到一个安全更新到版本B,其中修复了这个漏洞。如果攻击者可以在版本A中利用漏洞X,那么您是安全的,因为您已经升级到了版本B。但是,如果攻击者还可以将您降级到版本A,那么您又会变得容易受到攻击。即使您所有的安全哈希值与您安装的软件包匹配,您也不会注意到这一点,因为您的软件包数据库会显示您应该安装版本A而不是版本B。 - Robie Basak
2@RobieBasak "我不相信apt仓库格式在任何地方都得到了正确的规范或文档化。" 很显然这是不正确的。你只需要去找一下。**Debian Wiki: 仓库格式** - gertvdijk

我本来想把这个作为评论,但是放不下,所以我就放在这里了。 是的,md5在密码学上已经被破解了,但这并不意味着它是一个糟糕的通用哈希算法。修改文件使其具有相同的哈希值非常困难,而且要在其中加入特定的恶意更改几乎是不可能的。从你提到的例子中可以看出(Predicting The Winner): “首先,将文档仔细制作成有效的PDF文档,并嵌入一个包含足够数量的随机位的隐藏图像对象。然后,根据上面显示的钻石结构,计算出十一个选择前缀碰撞,并将它们精确地放置在隐藏图像对象的适当位置。通过这种方式,这十二个文档被转化为MD5多重碰撞。” 所做的是用随机数据填充文件,使得哈希值匹配。这项技术远远不能够在文件中添加特定的恶意代码,并使哈希值对齐,而不破坏文件或明显地表明文件已被更改(我不知道apt是否这样做,但许多文件哈希值都附带其文件大小,以增加无法检测到的哈希碰撞的难度)。

3谢谢你的回答。我认为这是一个很好的回复,因为它给整个背景提供了更多的信息 :) 不幸的是,“Stack...Ask Ubuntu”有时候对“只回答问题”要求比较严格,所以你敢于在这个话题上进行阐述真的很棒。 - humanityANDpeace
准备好的PDF文件包含随机数据,尽管付出了这么多努力,但它们只有104kb。为什么你会说这是不可能的呢?Deb软件包中肯定有很多文件大小超过200kb,所以应该有可能做到这样的事情。看到这个概念验证后,我感觉不太安全,它让我感到惊讶和震惊。 - humanityANDpeace
在合法文件中有很多地方可以进行微小的变化而不会显得奇怪,比如文本文件中的空白差异。你只需要找到大约128个这样的地方,就足够范围来创建一个既看起来合法又与你所期望的目标MD5匹配的恶意文件。不过我不确定这种特定攻击是否适用于这种情况。 - Robie Basak
@RobieBasak,你误解了这种攻击方式。你不能只是随意改变文件中的128个字节并保持md5sum不变。你需要在两个副本文件中插入一块看似随机数据的块,尽管这两块“随机”数据是不同的,但它们将具有相同的md5sum值。 - psusi

MD5并没有被“破解”。他们发现的是一种精心构造原始消息和修改后具有相同哈希值的方法。不可能获取一个未经过特殊处理的原始消息(正确的文件),并以保持其md5sum的方式进行修改,用于篡改。

好的。但是,如果不使用“破解”这个词,那么如何恰当地描述MD5安全性的现状呢?我理解你的意思,并感谢你指出了这一点。我仍然想知道如何评估MD5等算法的当前安全性。 - humanityANDpeace
@humanityANDpeace,"很好"。 - psusi
我喜欢乐观的态度。毕竟,概念验证仍然让我感到惊讶。谢谢! - humanityANDpeace
@humanityANDpeace,这是一个有趣的实验,并且确实指出了算法中的一个小弱点,但往往被夸大了。实际的安全影响几乎可以忽略不计。 - psusi
我不同意。除非你是世界上少数几个真正理解这些东西的人之一,否则你应该考虑MD5已经被破解了。这里有各种引用:http://crypto.stackexchange.com/questions/3360/should-i-use-md5-for-my-new-application - 我们又有什么资格说不同呢? - Robie Basak
@RobieBasak,我在那里没有看到任何与我相矛盾的东西,而且我确实理解这些内容。 - psusi
@psusi在那个页面上说:美国计算机紧急反应小组(US-CERT)表示MD5“应被认为是密码学上已被破解且不适合继续使用的”。无论你是否认为自己理解这方面的知识,对于加密来说,要么你拥有全球声誉,要么你就是一个不可信任的无名之辈(请注意,我在这里也是一个无名之辈)。 - Robie Basak
在密码学中,无法通过采取原始消息(非专门为篡改目的而设计的)并以保留其md5sum的方式进行修改来证明这种否定是不可能的。无法证明这种否定。如果没有人找到方法,是因为加密专家们在确定MD5已经被破解后就停止继续寻找了吗? - Robie Basak
@RobieBasak,所以你的意思是你无法证明任何哈希算法是安全的,这是一个毫无意义的说法。人们花了多年时间寻找,最好的攻击方法需要控制两个消息。这确实是一个弱点,也是远离该算法的一个很好理由,但实际上它无法被利用。对于可能存在的某种神奇未发现的漏洞进行挥手也是一个无稽之谈。 - psusi
加密专家认为MD5已经被破解。因此,应该将其视为不安全。毋庸置疑。对于加密安全性的问题,质疑这一点是没有意义的。 - Robie Basak
@RobieBasak,对权威的依赖是一种逻辑谬误,而不是使用过于笼统和误导性的术语“破损”,明确指出问题所在才是完全有益的。 - psusi
1加密专家认为MD5已经被破解,因此应该被视为不安全。但这并不是世界运作的方式,@RobieBasak。作为一个加密爱好者(虽然不能称自己为“专家”,但我曾经深入研究过),我不会说MD5已经被破解。只是有一个值得关注的有趣案例,但目前似乎还只是理论上的。但这不会影响Ubuntu的软件包。回到0,psusi。 - Rinzwind
这里的黑白是不使用MD5。看起来我们都不是密码学专家,所以我们只能遵循他们的建议,使用其他方法。@Rinzwind明显MD5已经被破解了,因为问题中包含一个有效的攻击手法... - jackweirdy
@jackweirdy,不,这并不是非黑即白的。这个问题并没有包含一个可行的漏洞利用。一个可行的漏洞利用是指以一种方式修改文件,使其保持其md5sum。但这并不是他们所做的。 - psusi
@psusi 我现在明白你的意思了 - 但是它是同义词 - 他们创造了一个文件,使其MD5校验和与任意值相匹配。这个漏洞也可以做同样的事情,其中"任意值"就是在任何更改之前的文件初始MD5校验和。 - jackweirdy
1@jackweirdy,实际上是有的,这也是他们没有那样做的原因。他们的方法依赖于两组数据具有非常特定的属性。这很像一个公钥对。你可以生成一对相匹配的密钥,但是只给出其中一个,你无法找到另一个。 - psusi
我明白你的观点,但是你是在争辩MD5算法没有被破解吗? - jackweirdy