如果MD5哈希本身也可能被操纵,那么MD5校验和的值是多少?


39

网站上的下载有时带有MD5校验和,使人们可以确认文件的完整性。我听说这不仅可以在损坏的文件引起问题之前立即对其进行识别,还可以轻松检测到任何恶意更改。

对于文件损坏,我遵循逻辑,但是如果有人故意要上传恶意文件,则他们可以生成相应的MD5校验和并将其与更改的文件一起发布在下载站点上。这会欺骗任何下载该文件的人,以为文件没有更改。

如果无法知道校验和本身是否已被破坏,MD5校验和如何针对故意更改的文件提供任何保护?


3
如果我们依靠网站托管商注意到细微的时间戳差异,而不是MD5哈希作为真实性的印记,那么校验和提供的保护就已经消失了。
奥斯丁的“危险”力量

4
@BigChris我不确定您的意思,但这听起来是错误的。像MD5这样的加密哈希算法完全与消息数据有关。几乎相同长度的两个随机消息几乎肯定具有不同的哈希值。
Matt Nordhoff 2014年

3
完全是@MattNordhoff。如果基于文件的数据不产生MD5校验,那么什么它的基础上?
奥斯丁“危险”力量

2
MD5哈希数据将在数据上构建,是的,但是创建具有相同哈希值的恶意文件不会花费太多精力。如前所述,将无法检查文件是否为恶意文件。阅读:mscs.dal.ca/~selinger/md5collision
Kinnectus 2014年

2
有时,散列会在第一方服务器上发布,而实际下载会在第三方镜像和/或CDN上托管。
el.pescado 2014年

Answers:


89

我听说这是为了也可以检测到任何恶意更改。

好吧,那你听错了。仅提供MD5(或SHA或其他)校验和(位于下载链接旁边),仅用于验证正确的下载。他们唯一要保证的是您拥有与服务器相同的文件。仅此而已。如果服务器受到威胁,那么您就是SOL。就这么简单。


31
+1。它们主要用于防止意外损坏(网络传输错误,磁盘上的坏扇区等)。为了防止恶意破坏,校验和需要形成一个受信任的未连接位置。与PGP / GPG /相似的签名消息相同:只有当您信任从中获取公钥的位置时,它们才会完全确保内容的安全。
David Spillett 2014年

1
您可能还想在答案中添加双瓣签名解决此限制的条件(假设您信任证书/证书颁发机构)
atk 2014年

2
甚至比这更糟-如果有人可以篡改您往返服务器的流量,那么即使服务器没有受到损害,他们也可以修改收到的文件和校验和。
cpast 2014年

3
扩展:如果它确实确保您拥有与服务器相同的文件,那将是一项合法的安全措施,因为这意味着您不必信任网络。这正是TLS中的MAC所做的-证明您得到的是服务器发送的内容,但是TLS对于受感染的服务器也无能为力。如果良好的散列是通过受信任的连接传输的,则它可以提供安全性(从受信任的连接派生);如果它是通过与文件相同的连接发送的,它是无用的,因为它不比文件本身具有更大的防篡改能力。
cpast 2014年

2
错了 有时会安全地提供校验和,但没有提供下载。由于MD5已损坏,因此提供的安全MD5校验和比更安全的校验和要弱,但是在MD5断开之前,与下载的MD5相匹配的安全提供的MD5(例如,经过HTTP签名或发送的MD5)是有力的证据。收到的下载文件是服务器提供的下载文件。我现在将在下面添加更详细的答案。
Matthew Elvey 2014年

15

某些软件包管理系统(例如dpkg)使用的解决方案是对哈希签名:将哈希用作一种公共密钥签名算法的输入。参见http://www.pgpi.org/doc/pgpintro/#p12

如果您具有签名者的公钥,则可以验证签名,以证明哈希未修改。这只会给您带来提前获取正确的公共密钥的问题,尽管如果有人曾经篡改了密钥分发,他们还必须篡改您可能会对其进行验证的所有内容,否则您会发现正在发生奇怪的事情。


9

您的假设是正确的。但是有一个例外。如果提供文件的服务器和哈希所在的页面不是由同一实体管理的。在那种情况下,软件开发人员可能会想说“嘿,人们从那个地方下载了此文件,但仅相信hash = xxxx”。(对于CDN为例,这可能很有用)。我想这就是为什么有人首先这样做的原因。比其他人随后想到的是,显示散列会多么酷。甚至都没有想过,即使文件和哈希都位于同一位置,它也没有多大用处。

话虽如此,这是值得的。不要像别人已经说过的那样对安全性承担太多责任。当且仅当您可以绝对信任原始哈希,该文件才是好的。否则,即使动机和知识都位于不同的服务器中并由不同的实体进行管理,具有足够动机和知识的攻击者也可以篡改文件和哈希。


8

有时会安全地提供校验和,但没有提供下载。由于MD5已损坏,因此提供的安全MD5校验和要比更安全的校验和弱,但是在MD5断开之前,要提供与MD5的MD5相匹配的安全提供的MD5(例如,用PGP或GPG或Gatekeeper签名或通过HTTPS提取的MD5)。该下载是有力的证据,表明收到的下载是服务器正在提供的下载。

我一直在写的实在缺乏安全校验的多年,在这里

由于存在MITM攻击的风险,用户不应通过不受信任的网络下载不受信任的可执行文件并运行它们。参见,例如R. Vloothuis的P. Ruissen的“自动更新系统中的不安全性”。

2014附录:不,“将张贴在网页上的校验和用于检测恶意修改是正确的”,因为这是它们可以执行的角色。它们确实有助于防止意外损坏,并且如果通过HTTPS或带有经过验证的签名(或者更好的是两者)提供,则有助于防止恶意损坏!我已通过HTTPS获得校验和,并多次验证它们与HTTP下载匹配。

如今,二进制文件通常带有签名的,经过自动验证的哈希,但即使这样也不十分安全

摘自上面的链接:“ KeRanger应用程序已使用有效的Mac应用程序开发证书签名;因此,它能够绕过Apple的Gatekeeper保护。” ...“苹果此后撤销了滥用证书并更新了XProtect防病毒签名,传输项目从其网站上删除了恶意安装程序。PaloAlto Networks还更新了URL过滤和威胁防护以阻止KeRanger影响系统。技术分析

两个感染了KeRanger的Transmission安装程序均由Apple签发的合法证书签署。列出此证书的开发人员是一家土耳其公司,其ID为Z7276PX673,该ID与用于对先前版本的Transmission安装程序进行签名的开发人员ID不同。在代码签名信息中,我们发现这些安装程序是在3月4日上午生成并签名的。”

2016年附录

@Cornstalks:重新。您在下面的评论:错误。正如目前在Wikipedia的碰撞攻击维基百科文章上指出的那样,“在2007年,发现了针对MD5的前缀前缀碰撞攻击”和“攻击者可以选择两个任意不同的文档,然后附加不同的计算值,从而得出整个结果。具有相等散列值的文档。” 因此,即使MD5是安全提供的,并且攻击者无法修改它,攻击者仍然可以对包含恶意软件的选定前缀使用选定前缀冲突攻击,这意味着MD5在加密目的上并不安全。这就是为什么US-CERT表示MD5“应被认为是加密破坏的,不适合进一步使用”。

还有两件事:CRC32是一个校验和。MD5,SHA等不只是校验和;它们旨在作为安全哈希。这意味着它们应该能够很好地抵抗碰撞攻击。与校验和不同,安全通信的安全哈希可防止中间人(MITM)攻击,其中MITM位于服务器和用户之间。它不能防止服务器本身受到攻击。为了防止这种情况发生,人们通常依赖于PGP,GPG,Gatekeeper等。


我喜欢这个答案,因为它突出显示了校验和的基本部分-它只是检查文件内容有效性的一种度量标准。如果网络本身不受信任,那么想像一下立即替换MD5哈希并修补二进制文件并不是不可能的(就像我们在某些Tor出口节点上已经看到的那样)...当然,MD5不会提供任何保护故意修改文件,因为您已经开始信任所述文件的提供者。
2014年

2
MD5并没有被完全破坏:它的攻击是碰撞攻击,而不是原像附着(这会严重得多)。如果MD5是安全提供的,并且攻击者无法修改它,那么攻击者就不能使用碰撞攻击(必须使用原像攻击),这意味着MD5仍然非常安全。MD5因其碰撞漏洞而值得逐步淘汰,但它没有(已知)原像漏洞,因此并未完全损坏。刚坏了一半。
Cornstalks 2014年

+1!但是...带签名的哈希真的和通过https(ssl / tls)获取的无符号哈希一样安全(可信任)吗?我认为仍然最好对哈希本身进行签名……
matpop 2014年

4

这就是发布的校验和经常带有免责声明的确切原因,该免责声明为“这不能防止恶意修改文件”。因此,简短的答案是“它们无法针对故意更改的文件提供任何保护”(尽管如果页面是通过HTTPS交付的,则HTTPS本身可以防止修改;如果文件不是通过HTTPS交付的,则是校验和是的,那么这可能会有所帮助,但这并不常见)。谁告诉您网页上发布的校验和用于检测恶意修改是错误的,因为这不是他们可以执行的角色;他们所做的只是帮助防止意外损坏和懒惰的恶意损坏(如果有人不打扰拦截提供校验和的页面)。

如果要防止故意修改,则需要避免他人弄乱校验和,或者使其他任何人都无法生成有效的校验和。前者可以亲自或以类似方式发出(因此校验和本身是可信任的);后者用于数字签名算法(您需要安全地将公共密钥下载到下载器;在TLS中,这是通过最终直接信任证书颁发机构并让他们验证其他所有人来完成的;也可以通过信任网络来完成,但要点是,必须在某个时候安全地传输某些内容,仅在您的网站上发布内容是不够的)。


2
如果人们通过某种独立的来源知道文件的可信赖版本的预期哈希应该是什么,则哈希可以防止恶意更改。让网站列出其文件的哈希值的价值不在于让从站点下载文件的人对照同一个站点检查已下载文件的哈希,而是在于让从其他来源知道的人他们想要的文件的哈希值,然后在下载文件之前先了解相关文件是否匹配。顺便说一句,我想看一件事...
supercat 2014年

...将是一种URL / URI形式,其中包含预期的哈希值(可能是SHA而不是MD5),并且将指定浏览器仅在哈希与指定内容匹配时才接受文件。如果许多人都需要访问相同的大文件,那么通过https://为所有这些人提供URL,但是让他们从代理服务器下载文件可能比让所有人都使用https://更为有效。直接从源头。
supercat 2014年

@supercat这就是我的意思,“使人们不要弄乱校验和” —必须安全地传输某些内容,如果这是校验和,则校验和可以帮助防止恶意篡改文件。
cpast 2014年

除非故意创建文件来促进这种篡改,否则通过文件本身以外的其他路径传输的MD5校验和将提供防止篡改的保护。相比之下,即使文件的原始来源是可信任的并且CRC32是安全交付的,像CRC32之类的东西也几乎不会提供防止篡改的保护。
supercat 2014年

4

这确实是一个问题。在与要下载的文件相同的站点上显示校验和不安全。可以更改文件的人也可以更改校验和。校验和应通过一个完整的独立系统显示,但这几乎不可行,因为如何以安全的方式告诉用户可以在何处找到校验和。

一种可能的解决方案是使用签名文件。

(顺便说一句:MD5在任何地方都是不安全的,不应再使用。)


2

如果无法知道校验和本身是否已被破坏,MD5校验和如何针对故意更改的文件提供任何保护?

你是完全正确的。那么,目标是使您的“如果”错误—如果我们知道文件的安全加密哈希没有受到破坏,那么我们也知道文件也没有受到破坏。

例如,如果您在网站上发布文件的哈希值,然后链接到第三方镜像服务器上的文件副本(老式的免费软件分发中的常见做法),则可以保护用户免受某些类型的攻击攻击。如果镜像服务器是恶意的或已受到威胁,但您的网站正常,则镜像将无法破坏您的文件。

如果您的网站使用HTTPS,或者您使用来对哈希签名gpg,则您的文件也可以(大部分)受到保护,免受恶意Wi-Fi热点,流氓Tor出口节点或NSA等网络攻击者的侵害。


1
关于gpg:请记住,如果您不完全相信公用密钥未被替换为受损害的公用密钥,并且用与之相对应的专用密钥签名的内容,这也会遇到类似的问题。
David Spillett 2014年

1

您不能在不修改文件的情况下修改MD5校验和。如果下载文件,然后下载哈希,然后对文件的计算与给出的值不匹配,则哈希或文件错误或不完整。

如果要将文件“绑定”到外部文件(例如作者,机器等),则需要使用带有证书的PKI类型的进程对其进行签名。文件作者等可以使用他/她的私钥对文件签名,并且您可以使用公钥验证签名,该公钥应该是公开可用的,它本身由您和作者信任的CA签名,并且最好从以下位置下载多个位置。

修改文件会使签名无效,因此也可以用于验证文件完整性。


1

哈希表示文件的版本(“下载”)是否与服务器的版本不同。他们不保证文件的真实性。

数字签名(非对称加密+哈希函数)可用于验证文件是否被没有相应私钥的任何人修改。

文件的创建者对文件进行哈希处理,并使用其(秘密)私钥对哈希进行加密。这样,具有相应(非秘密)公共密钥的任何人都可以验证哈希与文件匹配,但是可以修改文件内容,但是没有人可以用与文件匹配的哈希替换相应的哈希(使用公钥)-除非他们设法强行使用私钥或以某种方式获得对它的访问权限。

是什么阻止“ A.Hacker”先生简单地修改文件,然后使用自己的私钥对其进行签名?

为了验证文件,您需要将其哈希值与通过解密关联的数字签名获得的哈希值进行比较。如果您认为文件来自“ IMAwesome”,则使用其密钥解密哈希,并且哈希与文件不匹配,因为哈希是使用A.Hacker的密钥加密的。

因此,数字签名允许人们同时检测意外和恶意更改。

但是,我们首先如何获得IMAwesome的公钥?我们如何才能确保在获取他/她的密钥时,实际上不是由受感染的服务器或中间人攻击来提供A.Hacker的密钥?这就是证书链和受信任的根证书进入的地方,它们都不是解决问题的绝对安全的方法[1],并且两者都应该在Wikipedia上以及在SO上的其他问题上得到很好的解释。

[1]经检查,我的工作PC上Microsoft OS随附的根证书包括来自美国政府的证书。因此,有权访问相应私钥咳嗽的任何人都可以通过NSA 咳嗽向我的Web浏览器提供内容,并通过“地址栏中是否存在挂锁”检查。究竟有多少人会打扰单击挂锁,看看谁的密钥对用于“保护”连接?


只需要一个检查证书链的人引起丑闻。如果您认为国家安全局(NSA)将为MITM使用政府CA密钥,而不是使用从私有或(甚至更好的)外国证书颁发机构(从而提供合理的可否认性)中窃取的密钥,那么我可以为您提供桥梁。
Charles Duffy 2014年

我建议将它用于针对特定用户的MITM的可能性。至于是否真的有可能,那就是锡箔纸上的人们在争论

我不是在问是否可能有针对性的MITM。我在质疑是否很粗心以至于无法使用容易跟踪和归因的CA密钥来执行它。特别是对于一个具有较高价值的目标,出站“净流量”可能会被记录得足够详细,以包括直到并包括SSL握手公共部分的元数据,因此即使用户不看,其安全人员或自动化基础架构可以在回顾性分析中做到这一点。
Charles Duffy

1

如果无法知道校验和是否也未被破坏,那么MD5校验和如何针对故意更改的文件提供任何保护?

这是一个非常好的问题。通常,您对MD5操作的评估是可以发现的。但我认为,下载MD5校验和的价值充其量只是表面上的。也许在下载文件后,您可以对照网站检查您拥有的MD5,但我倾向于将并行的MD5存储视为“收据”,或者很不错但不可靠的东西。因此,我通常从不关心下载文件中的MD5校验和,但是我可以从创建基于服务器的临时MD5进程的经验中受益。

基本上,当客户端要清除文件系统中的MD5校验和时,我要做的就是将它们生成为CSV文件,该文件将文件名,路径,MD5以及其他杂项文件信息映射为我随后提取的结构化数据格式放入数据库进行比较和存储。

因此,以您的示例为例,虽然MD5校验和可能位于其自己的文本文件中的文件旁边,但是权限记录MD5校验和将存储在未连接的数据库系统中。因此,如果有人以某种方式侵入文件共享以操纵数据,则该入侵者将无权访问MD5授权记录或连接的历史记录。

最近,我发现了一个很好的库归档软件,称为ACE Audit Manager,它基本上是一个Java应用程序,旨在坐着看文件系统的更改。它通过MD5更改记录更改。它的工作原理与我的即席过程相似(将校验和存储在数据库中),但它又走了一步,但创建了MD5校验和的MD5校验和,即哈希树或Merkle树

假设您在一个档案集中有5个档案。然后,ACE Audit Manager中的这5个文件将得到另一个(称为“父”)校验和,该校验和是根据每个文件的5个MD5校验和生成的哈希。因此,如果有人只篡改一个文件,则该文件的哈希将发生变化,整个“父”集合的哈希也将发生变化。

通常,您需要查看MD5校验和及相关完整性哈希的方式是,除非它们未连接到MD5哈希本身的某些非直接存储中,否则它们可能已损坏。而且,它们作为长期数据完整性工具的价值等同于廉价的锁,该锁可以“免费”放到新的行李箱上。如果您真的想锁好行李,将得到一个不能在5秒钟内用回形针打开的锁。


“ MD5校验和的MD5校验和”被称为Merkle树
pjc50 2014年

@ pjc50谢谢!编辑答案以参考该答案。
JakeGould 2014年

0

速度

通常,人们发现(a)从一些不受信任的“附近”内容交付网络(CDN),镜像站点,torrent对等站点下载大文件,并下载相应的简短校验和文件(通常为SHA256;较旧的软件)要快得多。常用的MD5)。他们发现(b)直接从受信任的源下载整个大文件的速度令人难以忍受。

验证

通常,此人会发现所有内容都经过验证-源(可信任和不可信任)在同一校验和上达成一致,并对任何短校验和文件中的任何一个运行shasum(或md5sum)(当它们相同时,不管哪个都无关紧要) )表示大文件具有匹配的校验和。

修改

没错,当马洛里恶意更改位于某个下载站点上的大文件时,对于马洛里来说,也很容易在同一下载站点上恶意地对该文件的校验和进行恶意篡改,以便在该恶意校验和文件上运行shasum(或md5sum)似乎验证了大文件。但是该校验和文件不是下载程序用于验证的(唯一)文件。

当下载程序将该恶意校验和文件与从受信任来源下载的校验和文件进行比较时,如果原始校验和连连滑过一次,则下载器将看到所有内容均未通过验证,并且会知道出了点问题。

就像cpast之前说过的,如果一个好的密码校验和通过可信连接传输,它可以提供安全性(它是从可信连接派生的)。

正如supercat之前所说的,一个站点的校验和文件并不能帮助从同一站点下载大文件的人,也无法像下载校验和文件的方式那样帮助用户–它们可以帮助想要从其他站点下载文件的人。

“就安全性而言,诸如MD5之类的加密散列允许对从不安全的镜像获得的数据进行身份验证。必须对MD5哈希进行签名或来自您信任的组织的安全来源(HTTPS页面)。” - https://help.ubuntu.com/community/HowToMD5SUM

加密校验和是实用公钥签名(在GnuPG和其他符合OpenPGP的软件中实现的)的重要组成部分。公钥签名比仅校验和具有一些优势。


0

我听说[MD5校验和]也是为了让任何恶意更改都易于检测到。

嗯,您还没有完全听错数字签名实际上是用来检测恶意更改的。出于某些重要原因,哈希是数字签名的基本部分,因为只有哈希实际上是签名的,而不是整个原始文件。

话虽这么说,如果源不提供哈希的签名和一种可靠的方式来验证它,那么您是正确的,没有针对故意更改的文件提供保护,但是哈希仍然可以用作意外校验的校验和腐败

这是一个真实的示例,可以阐明整个问题。以下段落对这个主题特别重要:

daccess-ods.un.org daccess-ods.un.org对于较早的存档CD版本,仅生成MD5校验和。对于较新的版本,使用较新的且加密功能更强的校验和算法(SHA1,SHA256和SHA512)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.