散列是指从不同大小的输入数据创建特定输出的过程。这是使用数学公式完成的,也称为哈希函数(作为哈希算法实现)。 

并非所有哈希函数都涉及密码学的使用,只有那些专门为此目的而设计的函数,即所谓的加密货币哈希函数。由于他们的工作,区块链和其他分布式系统能够实现高水平的数据完整性和安全性。

常规哈希函数和加密哈希函数都是确定性的。确定性意味著只要输入资料不改变,杂凑演算法将始终产生相同的结果(也称为摘要或杂凑)。

加密货币中的杂凑演算法的设计方式是使其功能单向工作,这意味著如果不投入大量时间和资源来执行计算,则无法以相反的顺序传回资料。换句话说,从输入建立输出非常容易,但反转该过程(从输入产生输出)相对困难。找到输入值越困难,则认为杂凑演算法越安全。


哈希函数如何运作?

不同类型的杂凑函数产生不同的输出大小,但每种杂凑演算法的可能输出大小始终是恒定的。例如,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 代表安全杂凑演算法。它指的是一组加密杂凑函数,其中包括 SHA-0 和 SHA-1 等演算法以及 SHA-2 和 SHA-3 组。 SHA-256 与 SHA-512 和其他类似物一起属于 SHA-2 组。目前,只有 SHA-2 和 SHA-3 群组被认为是安全的。


为什么这很重要?

传统的杂凑函数具有广泛的用例,包括资料库搜寻、大档案分析和资料管理。反过来,加密杂凑函数广泛应用于资讯安全应用中的讯息认证和数位指纹识别。就比特币而言,加密杂凑函数是挖矿过程中不可或缺的一部分,并且在产生新金钥和地址方面也发挥著重要作用。

散列在处理大量资讯时显示出其全部潜力。例如,您可以透过杂凑函数执行大型档案或资料集,然后使用输出快速检查资料的准确性和完整性。这是可能的,因为杂凑函数的确定性本质:输入总是会产生简化的压缩输出(杂凑)。这种方法消除了储存和记住大量资料的需要。

哈希对于区块链技术特别有用。比特币区块链上进行了多种操作,其中包括哈希,其中大部分是挖矿。事实上,几乎所有加密货币协议都依赖哈希来将交易组连结并压缩为区块,以及创建加密关系并有效建立区块链。


加密哈希函数

再次注意,使用加密方法的杂凑函数可以定义为加密杂凑函数。为了破解它,需要无数次尝试暴力选择数字。要反转加密杂凑函数,您需要透过反复试验来选择输入数据,直到您获得适当的输出。然而,不同的输入可能会产生相同的输出,在这种情况下会发生冲突。

从技术上讲,加密杂凑函数必须满足三个属性才能被认为是安全的。我们可以将它们描述为:对碰撞的抵抗力,以及对第一和第二原像搜寻的抵抗力。

在我们开始查看每个属性之前,让我们用三个简短的句子总结它们的逻辑。

  • 抗冲突性:不可能找到两个不同的输入产生与输出相似的杂凑值。

  • 搜寻第一原像的阻力:缺乏用于反向恢复杂凑函数(从给定输出中寻找输入)的方法或演算法。

  • 搜寻第二个原像的阻力:不可能找到与第一个输入相交的任何第二个输入。


耐碰撞

如前所述,当不同的输入产生相同的杂凑值时,就会发生冲突。因此,杂凑函数被认为是抗冲突的,直到有人侦测到冲突。请注意,由于输入数量无限且输出数量有限,任何杂凑函数都始终存在冲突。

因此,当检测到杂凑函数的机率如此之低以至于需要数百万年的计算时,杂凑函数就具有抗碰撞性。因此,虽然不存在无冲突杂凑函数,但其中一些函数非常强大,可以被认为是鲁棒的(例如 SHA-256)。

在各种 SHA 演算法中,SHA-0 和 SHA-1 群组不再安全,因为在它们中侦测到了冲突。目前,只有 SHA-2 和 SHA-3 组被认为是最安全和抗碰撞的。


对第一原像搜寻的抵抗

这性质与单向函数的概念密切相关。只要有人能够找到可产生特定输出的输入的可能性非常低,杂凑函数就被认为是抗第一原像搜寻的。

请注意,此属性与前一个属性不同,因为攻击者需要根据特定输出猜测输入。当有人发现两个不同的输入产生相同的输出代码,但没有赋予用于生成它的输入资料任何含义时,就会发生这种类型的冲突。

第一原像的稳健性对于资料安全很有价值,因为讯息的简单杂凑可以证明其真实性,而无需披露其他资讯。在实践中,许多服务提供者和 Web 应用程式储存和使用从密码产生的杂凑值,而不是使用纯文字格式。


对第二原像搜寻的抵抗

为了简化您的理解,我们可以说这种稳定性介于其他两种属性之间。第二种原像攻击包括找到一个特定的输入,可用于产生最初由已知的其他输入产生的输出。

换句话说,第二个原像攻击涉及碰撞侦测,但该攻击不是寻找生成相同​​杂凑的两个随机输入,而是寻找可用于重新创建最初由另一个输入产生的杂凑的输入。

因此,任何能够抵抗冲突的杂凑函数也能够抵抗此类攻击,因为后者总是意味著冲突。然而,仍然可以对防碰撞函数执行第一原像攻击,因为它涉及透过单一输出搜寻单一输入。


矿业

挖矿中有许多步骤是使用杂凑函数执行的,其中包括检查余额、连结交易输入和输出,以及对区块中的所有交易进行杂凑处理以形成 Merkle 树。但比特币区块链安全的主要原因之一是矿工必须执行尽可能多的哈希操作才能最终找到下一个区块的正确解决方案。

矿工在为其候选区块创建哈希时必须尝试提出几个不同的输入。只有当正确产生哈希形式的输出并以一定数量的零开头时,才可以检查区块。零的数量决定了挖掘难度,并且它根据网路哈希率而变化。

在这种情况下,哈希率代表您投资于挖掘比特币的电脑算力的大小。如果算力开始增加,比特币协议将自动调整挖矿难度,使挖掘一个区块所需的平均时间不超过10分钟。如果多个矿工决定停止挖矿,导致算力大幅下降,则会调整挖矿难度以暂时减轻计算量(直到平均区块产生时间恢复到 10 分钟)。

请注意,矿工不需要寻找冲突,因为他们可以产生作为有效输出的哈希数量有限(以一定数量的零开始)。因此,对于给定的区块有多种可能的解决方案,而矿工必须根据采矿难度确定的阈值仅找到其中一种。 

由于比特币挖矿是一项成本高昂的任务,矿工没有理由欺骗系统,因为这将导致重大的经济损失。因此,加入区块链的矿工越多,区块链就会变得越大、越强大。


结论

毫无疑问,杂凑函数是计算机科学的基本工具之一,尤其是在处理大量资料时。当与密码学结合时,杂凑演算法可以非常通用,提供安全性和多种身份验证方法。因此,加密杂凑函数对于几乎所有加密货币网路都至关重要,因此了解它们的属性和工作机制对于任何对区块链技术感兴趣的人来说肯定是有用的。