这里有两个问题——为什么重要,为什么还是/不容易。当然,它们是链接的答案。
散列是通过“散列”某些数据产生的长数字。原始数据可能是您的密码内容、带有照片的 jpeg 文件、一本书、一个安全密钥,以及任何可以表示为数字数据的东西。使哈希有趣的是它的属性:
- 哈希被设计为易于计算但极难“向后”计算。因此,对我度假时拍摄的文件 IMG_2017070.JPG 进行哈希处理可能需要百万分之一秒。但是从那个散列中计算出来,用于获取散列(原始数据)的 JPG 文件是什么,可能需要几十年、几个世纪或“比宇宙存在的时间长几十亿倍”,具体取决于散列使用以及可用的资源和技术,除非研究人员想出一种方法来使用数学“破解”哈希,从而使问题变得容易数十亿倍。但这并不容易。
- 哈希被设计成非常随机的,即使数据只有很小的变化也会发生很大的变化,因此它们不能通过猜测轻易地反转,两个相似的哈希并不意味着数据相似。如果我只更改照片中单个像素的一部分,散列将完全不同,您将回到第 1 格来计算数据。
- 哈希是大数字,因此极不可能意外拥有(或计算出)2 条具有相同哈希的不同数据。这意味着如果散列一致,我们通常可以假设散列的数据是相同的,而无需对数据本身进行任何检查。
- 数学家可以证明前两个陈述,所以这不是“交叉手指并希望如此”的问题。(第三个陈述来自前两个,因此不需要证明)
哈希非常有用,因为它们(实际上)保证了原始数据可以被确认正确和唯一标识,而无需拥有原始数据。例子:
- 如果我在您登录网站时存储您的密码以检查您的身份,那么有人可能会从我这里窃取它并伪装成您。如果我存储了你的密码的哈希值,我可以检查它(你提供的密码的哈希值匹配,并且一旦检查我就不会保留密码)但是没有人窃取哈希值可以计算出密码给我,假装成为你。这在加密和安全方面非常重要。
- 我可以生成一个文件并通过使用哈希来证明它的某些内容(我是作者,或者我对它负责),因为其他人几乎不可能从公开的哈希中恢复,以只有我知道的数据用于创建这些哈希。这是“数字(电子)签名”的基础,也是为什么它们通常被视为谁签名的良好证据。
- 如果将来我在英国和美国有一个 100,000 GB 的硬盘,我可以通过计算它们所在的每个下摆上的哈希值来检查它们的内容是否匹配,并查看它们是否相同,而不是发送所有 100,000 GB从一个地方到另一个地方直接比较。或者,如果我想检查我发送给某人的数据是否被正确接收,或者存储的数据在我存储后没有更改,我们可以比较哈希而不是再次发送数据来检查它是否相同。这对于备份和验证数据、发送和接收数据以及确定证据和数据存储非常重要。
碰撞很重要的原因是“碰撞”表明有人找到了一种数学技术,该技术可以完成任何“蛮力”方法几乎不可能完成的事情——他们已经从散列回溯到导致它的原始数据,或者可以找到给出特定哈希的数据。
更准确地说,它们可以为我们提供 2 条具有相同 hash 的不同数据(比如不久前发生的两个 PDF 文件)。(这就是为什么它被称为碰撞')。
这证明不能再依赖所使用的散列方法来识别不同的数据并保持数据和散列隔离,并且是时候转向更高级的散列了。
由于哈希非常难以在数学上进行工程设计,因此非常依赖,当研究人员证明他们可以绕过一种众所周知的当前使用的哈希方法(或“哈希函数”)时,这是一件大事。它大约每5-15年发生一次。通常我们可以提前几年判断哈希是否看起来可能会下降,并且技术会在此之前尝试继续前进。
通常,即使我们从一个散列函数继续前进,它在一段时间内仍然相当安全,因为技术会在第一个严重迹象表明它易受攻击时继续前进,而不是再等 5 或 15 年,直到它被破坏到“任何人”都可以做它。最近对 SHA1 的破坏有点不寻常,因为它被破坏的方式几乎可以被几乎“任何人”立即使用,这与一般使用的散列函数一样致命。但在此之前的几年里它就被认为很容易受到攻击,因此人们的设备已经在迁移到更新的哈希值,而 SHA1 的实际破坏在许多情况下只是增加了这种趋势的紧迫性(以及其他一些人的严重头痛!)