散列是指从可变大小的输入创建固定大小的输出的过程。这是通过使用称为哈希函数(作为哈希算法实现)的数学公式来完成的。

虽然并非所有哈希函数都使用密码学,但所谓的密码哈希函数是数字货币的核心。感谢他们,区块链和其他分布式系统能够达到显着的数据完整性和安全性水平。

传统哈希函数和加密哈希函数都是确定性的。确定性的含义是,只要输入不改变,哈希算法将始终产生相同的输出(也称为摘要或哈希)。

加密货币哈希算法通常被设计为单向函数,这意味着如果没有大量时间和计算资源,它们就无法轻易撤消。换句话说,从输入获得输出非常容易,但做相反的事情(仅从输出获得输入)相对困难。一般来说,找到输入越困难,哈希算法就越安全。


哈希函数如何工作?

不同的哈希函数产生不同大小的输出,但每个哈希算法可能的输出大小始终是固定的。例如,SHA-256 只能生成 256 位的输出,而 SHA-1 始终生成 160 位的摘要。

为了说明这一点,让我们通过 SHA-256 哈希算法(用于比特币)运行单词“Binance”和“binance”。

SHA-256

输入

输出(256 位)

币安

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

币安

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


请注意,一个小的更改(以第一个字母的形式)会导致完全不同的哈希值。但由于我们使用 SHA-256,因此无论输入大小如何,输出始终具有 256 位(或 64 个字符)的固定大小。此外,我们通过算法运行这两个单词多少次并不重要,因为两个输出将保持不变。

相反,如果我们通过 SHA-1 哈希算法运行相同的输入,我们将得到以下结果:

SHA-1

输入

输出(160 位)

币安

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

币安

e58605c14a76ff98679322cca0eae7b3c4e08936


值得注意的是,SHA 这个词是 Secure Hash Algorithms 的缩写。它是指一组加密哈希函数,其中包括 SHA-0 和 SHA-1 算法以及 SHA-2 和 SHA-3 组合。 SHA-256 是 SHA-2 套件的一部分,此外还有 SHA-512 和其他变体。目前只有 SHA-2 和 SHA-3 块被认为是安全的。


它为什么如此重要?

传统的哈希函数具有广泛的用例,包括数据库搜索、大文件分析和数据管理。另一方面,加密哈希函数广泛应用于信息安全应用,例如消息认证和数字指纹识别。对于比特币来说,加密哈希是挖掘过程的重要组成部分,并且在生成新地址和密钥方面也发挥着作用。

当处理大量信息时,分段的真正威力就会显现出来。例如,可以通过哈希函数运行大型文件或数据集,然后使用其输出快速验证数据的准确性和完整性。这是可能的,因为散列函数的确定性本质:输入总是导致简化、压缩(散列)输出。这项技术消除了存储和记住大量数据的需要。

哈希在区块链技术的背景下特别有用。比特币区块链包含许多包括哈希在内的操作,其中大部分是在挖掘过程中。事实上,几乎所有加密货币协议都依赖哈希来链接交易集并将它们压缩成块。还可以在每个块之间创建加密链接,从而有效地创建区块链。


加密哈希函数

同样,使用密码技术的散列函数可以被定义为密码散列函数。破解加密哈希函数需要无数次暴力攻击。为了使哈希函数反转,他们必须通过反复试验来猜测输入是什么,直到产生相应的输出。但不同的输入也有可能产生相同的输出,在这种情况下就会发生“冲突”。

从技术上讲,加密哈希函数需要遵循三个属性才能被认为是有效安全的。我们可以将这些属性描述为:抗碰撞性、抗原像性和抗第二原像性。

在讨论每个属性之前,让我们用三个简短的句子总结它们的推理。

  • 抗冲突性:不可能找到任何两个不同的输入产生与输出相同的哈希值。

  • 原像抵抗:哈希函数不能“反转”(从给定输出中查找输入)。

  • 第二原像抵抗:找不到第二个输入与另一个指定输入发生冲突。


抗碰撞

如前所述,当不同的输入产生完全相同的哈希值时,就会发生冲突。因此,哈希函数是抗冲突的,直到有人发现冲突为止。请注意,任何哈希函数都始终存在冲突,因为可能的输入是无限的,而可能的输出是有限的。

换句话说,当发现冲突的概率非常低以至于需要数百万年的计算时,哈希函数就具有抗冲突性。因此,尽管不存在无碰撞哈希函数,但有些函数足够强大,可以被认为是具有抵抗力的(例如 SHA-256)。

在不同的 SHA 算法中,SHA-0 和 SHA-1 组合由于冲突而不再安全。 SHA-2 和 SHA-3 块目前被认为是抗碰撞的。


原像阻力

原像抗性与单向函数的概念有关。当有人找到产生特定输出的输入的可能性非常低时,哈希函数被认为是抗原像的。

请记住,此功能与前一个功能不同,因为攻击者会尝试通过查看某些输出来猜测输入是什么。另一方面,当有人发现生成相同输出的不同输入但使用哪个输入并不重要时,就会发生冲突。

原像抵抗在数据保护中很有价值,因为消息的简单散列可以证明其真实性,而无需透露任何信息。在实践中,许多服务提供商和 Web 应用程序存储和使用从密码生成的哈希值,而不是纯文本密码。


抗第二原像性

为简单起见,我们可以说第二原像抵抗力介于其他先前属性之间。当有人发现某个特定输入生成与他们已知的另一个输入相同的输出时,就会发生第二原像攻击。

换句话说,第二原像攻击涉及发现冲突,但不是寻找两个生成与输出相同的哈希值的随机输入,而是寻找生成与另一个特定输入生成的哈希值相同的哈希值的输入。

因此,任何抗碰撞的哈希函数也能抵抗第二原像攻击,因为后者总是意味着碰撞。但攻击者仍然可以对防碰撞功能进行早期攻击,因为它涉及从一个输出找到一个输入。


矿业

比特币挖掘过程中有几个步骤包含哈希函数,例如验证余额、将输入和输出链接到交易以及对块内的交易进行哈希处理以形成 Merkle 树。但比特币区块链安全的主要原因之一是矿工需要无数的哈希值才能找到下一个区块的有效解决方案。

具体来说,矿工在为其候选块生成哈希值时必须尝试几个不同的输入。本质上,如果他们生成以一定数量的零开头的结果哈希,他们将只能验证他们的块。零的数量决定了挖掘的难度,并根据分配给网络的哈希率而变化。

在这种情况下,哈希率代表了投资于挖掘比特币的计算能力。如果网络算力增加,比特币协议将自动调整挖掘难度,使挖掘一个区块的平均时间保持在接近 10 分钟。另一方面,如果许多矿工决定停止挖矿,这将导致算力大幅下降,挖矿难度将会调整,从而有利于挖矿进程(直到平均区块挖矿时间恢复到10分钟)。

请注意,矿工不必发现冲突,因为他们只能生成这么多哈希作为有效输出(以一定数量的零开始)。因此,对于给定的区块,有多种可能的解决方案,矿工不必根据挖矿难度确定的起点来找到其中一个。

由于比特币挖矿非常昂贵,矿工没有理由欺骗系统,因为这将导致重大的经济损失。加入区块链的矿工越多,它就会变得越强大。


结论性想法

毫无疑问,哈希函数是计算机科学中必不可少的工具,尤其是在处理大量数据时。哈希算法与密码学相结合可以发挥多种作用,以多种不同的方式提供安全性和身份验证。因此,这种加密哈希函数对于几乎所有加密货币网络都极其重要。因此,了解其属性和工作机制对于任何对区块链技术感兴趣的人来说绝对是有用的。