【问题标题】:Comparing SHA-256 checksums: how many characters do I need to check?比较 SHA-256 校验和:我需要检查多少个字符?
【发布时间】:2020-10-24 13:43:56
【问题描述】:

校验和可用于验证文件(例如下载的 dmg)是否未更改。但是检查整个校验和很乏味,因为 SHA-256 校验和有 64 个十六进制字符。幸运的是,该算法的设计使得内容差异很小的两个文件具有非常不同的校验和。

不过,我想确定一下,我需要比较多少个字符才能安全地验证两个文件是否相同?例如,比较前 5 个字符或后 5 个字符就足够了吗?

【问题讨论】:

  • 如果您认为一个答案是正确的,请记得选择一个答案! :)

标签: checksum sha


【解决方案1】:

快速

你应该检查每个字符。你不应该自己检查它。对于 Windows/Powershell,请使用:

get-filehash ./relativeLocationOfFileToCompare | select -expandproperty hash | compare-object theHashYouWantToCompare

get-filehash ./kali-linux-2020.4-vbox-i386.ova | select -expandproperty hash | compare-object 64f6ca69ccb3efc79e350977d33109c380a744c26158c4e3956141535242e2ca

更多

您需要检查每个字符,因为恶意方可能会造成部分冲突,即前 20 个字符是相同的。

我对为什么使用校验和的理解

您需要软件。您访问实际的供应商网站,即 kali.org。您点击下载软件。 Kali.org 实际上并没有向您发送软件。他们告诉您的浏览器转到他们的 CDN 并下载该软件。 cdn 是一个稍微不受信任的第三方。 cdn 可能已经失控,或者 cdn 可能受到损害。怎么办。

Kali.org 没有受到影响(如果 kali 受到影响,则存在更大的问题,并且校验和并未用于解决它们)。因此,您可以从 Kali.org 获取有效的校验和。你得到哈希并将每个字符与我提供的单行进行比较。您已经保护自己免受非碰撞、部分碰撞的影响,并且您可能通过不手动比较每个字符而节省了一些时间。

【讨论】:

  • 这正是我询问的校验和用例。感谢您清楚地解释为什么我们需要验证整个哈希。
【解决方案2】:

如果不检查所有字节,为什么要使用 SHA-256?还有更短的函数,如 SHA1、MD5 等。

  • 如果您正在编写检查校验和的软件 - 您必须检查哈希的所有字节
  • 如果您说的是手动比较,请确保使用复制+查找来检查它们。逐个字母比较更容易出错。

最终您要检查多少个字符取决于您想要正确的程度以及您拥有多少个文件。可能没有正确的答案。

但我认为是的 - 对于大多数实际目的,检查前 5 个字符就足够了。我不知道 SHA256 背后的数学原理,但如果我们假设所有字符的概率相同,那么不同文件获得相同 5 个哈希字母的概率将是 16⁵ 中的 1 个(大约百万分之一)。如果您有 100 个文件,这将是一个不错的机会。

PS:Git 选择使用 7 个字符作为 SHA1 的短版本。

PPS:SHA256 用于加密/安全。如果它只是关于典型动手任务的文件完整性 - 较短且不太安全的哈希函数将非常适合。

【讨论】:

  • 我认为很常见的用例是快速查看下载安装程序的校验和以避免恶意软件。不使用 SHA1 或 MD5 的原因是它们已被成功攻击(参见 Wikipedia)。
  • @prefectist by "attacked" 他们的意思是可以想出另一个具有相同哈希的字符串,这将允许攻击者签署数据,就好像他们有证书颁发机构的私钥。这与下载文件的完整性无关 - SHA256 不会帮助您解决恶意软件问题(如果黑客欺骗了您下载恶意软件 - 它会欺骗您下载恶意软件的校验和)。 “更安全”和“只使用前 N 个字符”也是互斥的 :)
  • @stackoverflow.com/users/886697/…> 好点:从可靠来源(例如软件的创建者而不是第三方)获取校验和至关重要。就安全而言,一个人总是可以做更多或更少,所以caveat emptor。但有时实用的经验法则会有所帮助,嗯?
  • @prefectist,它不依赖于来源的可靠性。校验和根本不用于安全性,它们是检查文件是否正确下载的一种手段(每一位都没有错误地传递)。 签名 用于安全目的。至于比较校验和的实用经验法则,正如我在答案中提到的那样:5-7 个字符可能就足够了。但这始终是一种风险,所以 - 为什么还要检查校验和 ;)
  • 校验和不用于安全性?为什么CRAN等网站会包含这样的语句:“请检查下载的镜像的MD5校验和,确保镜像过程中没有被篡改或损坏。”?
猜你喜欢
  • 2023-01-25
  • 2015-06-07
  • 1970-01-01
  • 2018-03-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
相关资源
最近更新 更多