SHA-256或MD5用于文件完整性


77

我知道SHA-256在安全性等方面比MD5更受青睐,但是,如果我要使用一种仅检查文件完整性的方法(也就是说,与密码加密无关),是否有任何优势?使用SHA-256?

由于MD5是128位,而SHA-256是256位(因此是原来的两倍)...

  1. 加密最多需要两倍的时间吗?

  2. 如果时间不是紧要的(例如在备份程序中),并且只需要文件完整性,那么有人会反对MD5提出不同的算法,甚至提出不同的技术吗?

  3. 使用MD5是否会产生校验和?


39
术语nitpick:MD5和SHA- *都不加密任何东西。它们是哈希函数。

1
@delnan其实,我很高兴您能对此有所了解,谢谢。但是,不是某种加密的哈希表示吗?
戴夫

14
否。对于初学者而言,加密是可逆的(根据定义),而哈希不能逆向(通过信鸽原理)。

1
好吧,两者根本上是不同的,因此,对两者之一的各种攻击甚至根本没有意义,因此“更安全”对恕我直言毫无意义。要澄清您的意思吗?

1
是的,但是,这只是意味着它们用于不同的目的,因此受到不同的攻击。对于哈希函数,最常见的攻击是产生冲突,因为这是您击败基于哈希的安全性度量(例如哈希密码或签名证书)的方式。您不会仅通过存储其哈希值来隐藏任何东西,因为那样的话,它对所有人(而不只是攻击者)都是“丢失的” /不可访问的。

Answers:


76

SHA256和MDA5都是哈希算法。他们获取您的输入数据(在本例中为文件),并输出256/128位数字。该数字是校验和。没有加密发生是因为无限数量的输入会导致相同的哈希值,尽管实际上冲突很少发生。

根据此答案,SHA256的计算时间要比MD5多一些。

随便说一句,我想说MD5可能适合您的需求。


谢谢,但是作为一个离题的问题,您是说加密必须产生像GUID一样的唯一“代码” /“ id”吗?
戴夫

8
@DaveRook然后您还如何解密消息?
Paul Manta 2013年

@PaulManta-我不知道,因为我这样做只是出于完整性,我从未真正考虑过像这样的加密,但这真是太好了。谢谢。
戴夫

5
@dave我认为这个话题有些混乱,因为SHA被称为加密哈希。这意味着(我距离专家远),您可以使用它对密码进行哈希处理。这样,如果攻击者获得了您的用户密码文件,则他无法使用散列来重建原始密码。加密的不同之处在于它是可逆的。
dandan78

@Dave在下面提到您正在寻找哈希函数列表。看看有关哈希函数的Wikipedia文章:en.wikipedia.org/wiki/List_of_hash_functions
Rob

17

到1):是的,在大多数CPU上,SHA-256的速度仅为MD5的40%。

到2):在这种情况下,我主张使用不同于MD5的算法。我绝对希望使用一种被认为是安全的算法。但是,这更是一种感觉。在这种情况下构建的情况不是实际的,而是实际的,例如,如果您的备份系统遇到攻击基于MD5的证书的示例,那么在此示例中,您可能会有两个文件,它们具有不同的数据,但MD5校验和相同。在其余情况下,这并不重要,因为MD5校验和实际上只有在故意引起的情况下才会发生冲突(=不同数据的校验和相同)。我不是各种哈希(校验和生成)算法的专家,所以我不能建议其他算法。因此,这部分问题仍然是未解决的。建议进一步阅读加密哈希函数-Wikipedia上的文件或数据标识符。在该页面的下方,还有一系列加密哈希算法。

到3):MD5是一种计算校验和的算法。然后,将使用此算法计算出的校验和称为MD5校验和。


16

每个答案似乎都暗示您需要使用安全哈希来完成这项工作,但是所有这些调整都太慢了,以迫使蛮力攻击者拥有大量计算能力,根据您的需求,这可能不是最佳解决方案。

有一些专门设计的算法可以尽可能快地对文件进行哈希处理,以检查完整性和比较性(murmurXXhash...)。显然,它们不是出于安全性目的而设计的,因为它们不满足安全哈希算法(即随机性)的要求,但对于大型邮件的冲突率较低。如果您不追求安全性而是追求速度,那么此功能使其成为理想选择。

可以在以下出色答案中找到该算法的示例和比较结果:哪种哈希算法最适合唯一性和速度?

例如,我们在Q&A网站上murmur3对用户上传的图像进行哈希处理,因此即使用户在多个答案中上传同一图像,我们也只会存储一次。


10
  1. 不,它的速度较慢但不那么慢
  2. 对于备份程序,可能需要比MD5更快的速度

总而言之,我想说MD5除了文件名之外绝对是安全的。由于SHA-256的大小,它只会变得更慢,更难处理。

您也可以使用没有MD5安全性的东西,而不会出现任何问题。如果没有人试图破坏您的文件完整性,这也是安全的。


谢谢,但是问题是我不知道还能用什么!我不是要提出建议,而是乐于研究其他方法,但是您能提出MD5 / SHA256以外的其他建议吗?
戴夫

1
取决于您使用的编程语言和运行时环境。
创世记(Genesis Rock)

9

底层的MD5算法不再被认为是安全的,因此,尽管md5sum非常适合在与安全无关的情况下识别已知文件,但是如果有可能文件被故意和恶意篡改,则不应依赖md5sum。在后一种情况下,强烈建议使用更新的哈希工具,例如sha256sum。

因此,如果您只是想检查文件是否损坏或文件差异,那么当文件源受信任时,MD5应该足够了。如果您要验证来自不受信任源或来自未经加密连接的受信任源的文件的完整性,则MD5不够。

另一位评论者指出,Ubuntu和其他人使用MD5校验和。除了MD5之外,Ubuntu还迁移到了PGP和SHA256,但是更难找到更强大的验证策略的文档。有关更多详细信息,请参见HowToSHA256SUM页面


1
我知道我晚会晚了,但是谢谢你提出这一点!如果您使用校验和来验证攻击者没有破坏您的文件,则MD5是一个糟糕的主意。如果攻击者知道他们在做什么,从理论上讲,他们可以找到正确的冲突,使他们能够执行代码而无需更改文件的校验和,从而避免了任何基于校验和的安全验证。SHA算法在现代CPU上的性能足够好,并且伸缩性更好(随着文件大小变大,我们的校验和也必须变大)。如果您要处理大型高清视频文件,我将使用SHA-512。
克里斯·克雷格

6

从技术上讲,MD5比SHA256更快,因此仅在验证文件完整性时,它就会足够且性能更好。

您可以签出以下资源:


嗯,您提供的链接还显示了其他算法。我想我需要找到现在可用于.NET的那些,并找到最快的。谢谢
Dave

3
@DaveRook另外,如果您寻找Sun,Ubuntu等著名网站的周围,您可能会注意到它们提供了MD5校验和以确保文件完整性。这可以支持其对此类任务的价值。
SaidbakR 2013年

3
  1. 是的,在大多数CPU上,SHA-256的速度比MD5慢2至3倍,但这并不是主要是因为其哈希值更长。在此处查看其他答案以及对此Stack Overflow问题的答案。
  2. 这是MD5不适合使用的备份方案:
    • 您的备份程序会哈希每个要备份的文件。然后,它通过其哈希存储每个文件的数据,因此,如果您备份同一文件两次,则最终只会得到一个副本。
    • 攻击者可能导致系统备份他们控制的文件。
    • 攻击者知道他们要从备份中删除的文件的MD5哈希。
    • 然后,攻击者可以使用MD5的已知弱点来制作具有与要删除的文件相同的哈希值的新文件。备份该文件时,它将替换要删除的文件,并且该文件的备份数据将丢失。
    • 通过不替换以前遇到过哈希的文件,可以稍微增强该备份系统(并使效率更高),但是攻击者可以通过抢先备份特制的伪造文件来防止备份具有已知哈希的目标文件。具有相同哈希值的文件。
    • 显然,大多数系统(包括备份系统和其他系统)都无法满足实施此攻击所必需的条件,但我仅想举一个例子,说明SHA-256比MD5更可取。您要创建的系统是否会出现这种情况,不仅取决于MD5和SHA-256的特性。
  3. 是的,像MD5和SHA-256生成的那样的加密哈希是一种校验和。

哈希快乐!

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.