什么是哈希?在区块链的兜帽下

了解区块链哈希的工作原理非常重要。然而,为了做到这一点,我们首先需要了解区块链创建的核心原则之一。区块链技术是上个世纪最具创新性和时代定义的发现之一。看到它在过去几年中所产生的影响及其对未来的影响,毫无疑问可以毫不夸张地说。为了理解像以太坊和比特币这样的各种加密货币如何运作。

什么是哈希?在区块链的兜帽下

  • 什么是哈希?
  • 加密货币哈希函数
  • 那么,如果你使用这种方法会发生什么?
  • 什么是生日悖论?
  • 哈希和数据结构
  • 什么是Merkle树?
  • 那么Merkle Tree与区块链有什么关系呢?
  • 挖矿过程
  • 什么是哈希率?
  • 结论

什么是哈希?

简单来说,散列意味着获取任意长度的输入字符串并给出固定长度的输出。在像比特币这样的加密的情况下,交易被视为输入并通过去中心化算法(比特币使用SHA-256)运行,该算法给出固定长度的输出。

让我们看看散列过程是如何工作的。我们将投入一些投入。在本练习中,我们将使用SHA-256(安全去中心化算法256)。

什么是哈希?在区块链的兜帽下

如您所见,在SHA-256的情况下,无论您的输入有多大或多小,输出总是具有固定的256位长度。当您处理大量数据和事务时,这变得至关重要。所以基本上,你可以记住哈希并跟踪,而不是记住可能很大的输入数据。在我们进一步讨论之前,我们首先需要了解散列函数的各种属性以及它们如何在区块链中实现。

加密货币哈希函数

加密货币散列函数是一类特殊的散列函数,具有各种属性,使其成为加密的理想选择。加密货币哈希函数需要具有某些属性才能被认为是安全的。让我们一个接一个地浏览它们。

财产1:确定性

这意味着无论您通过散列函数解析特定输入的次数,您都将获得相同的结果。这很关键,因为如果每次都得到不同的哈希值,就无法跟踪输入。

财产2:快速计算

哈希函数应该能够快速返回输入的哈希值。如果过程不够快,那么系统就不会有效。

属性3:预映像阻力

什么前映像阻力状态是给定H(A)确定A是不可行的,其中A是输入而H(A)是输出散列。注意使用“不可行”一词而不是“不可能”。我们已经知道从其哈希值确定原始输入并非不可能。我们来举个例子吧。

假设你正在掷骰子,输出是从骰子发出的数字的哈希值。您如何确定原始数字是多少?这很简单,你要做的就是找出1-6中所有数字的哈希值并进行比较。由于散列函数是确定性的,因此特定输入的散列将始终相同,因此您可以简单地比较散列并找出原始输入。

但这只适用于给定数量的数据非常少的情况。当您拥有大量数据时会发生什么?假设您正在处理128位哈希。找到原始输入的唯一方法是使用“强力方法”。暴力方法基本上意味着你必须选择一个随机输入,对其进行散列,然后将输出与目标散列进行比较并重复,直到找到匹配为止。

那么,如果你使用这种方法会发生什么?

  • 最佳案例场景:您可以在第一次尝试时获得答案。你将非常认真地成为这世界上最幸运的人。这种情况发生的可能性是天文数字。
  • 最糟糕的情况:你得到你的答案2 ^ 128 – 1次。基本上,这意味着您将在所有数据的末尾找到答案。
  • 平均情况:你会发现它在中间的某个地方,所以基本上在2 ^ 128/2 = 2 ^ 127次之后。从视角来看,2 ^ 127 = 1.7 X 10 ^ 38。换句话说,这是一个巨大的数字。

因此,虽然可以通过强力方法破坏图像前的阻力,但它需要很长时间才能无关紧要。

属性4:输入中的小变化改变了哈希值。

即使您对输入进行了少量更改,哈希中反映的更改也会很大。让我们用SHA-256测试它:

什么是哈希?在区块链的兜帽下

你看到了吗?即使您刚刚更改了输入的第一个字母表的大小写,请查看影响输出哈希的程度。这是一个关键的功能,因为这种散列特性导致了区块链的最大特质之一,它的不变性(稍后会更多)。

属性5:抗冲突

给定两个不同的输入A和B,其中H(A)和H(B)是它们各自的散列,H(A)等于H(B)是不可行的。这意味着,在大多数情况下,每个输入都有自己唯一的哈希值。为什么我们说“大部分”?让我们来谈谈一个名为“生日悖论”的有趣概念。

什么是生日悖论?

如果你在街上遇到任何随机的陌生人,那么你们两个人生日相同的可能性非常低。事实上,假设一年中的所有日子都有相同的生日可能性,另一个人分享你的生日的机会是1/365,这是0.27%。换句话说,它真的很低。

然而,话说回来,如果你在一个房间里聚集了20-30个人,那么两个人分享完全相同的生日的几率就会上涨到天文数字。事实上,在这种情况下,2个人有50%的机会分享同一个生日

什么是哈希?在区块链的兜帽下

图片来源:(YouTube)

为什么会这样?这是因为概率的简单规则如下。假设你有N种不同的偶然发生的可能性,那么你需要N个随机项的平方根,它们有50%的碰撞几率。

所以将这个理论应用于生日,你有365种不同的生日可能性,所以你只需要Sqrt(365),这是〜23~,随机选择的人,两个人共享生日的几率为50%。

这在哈希中的应用是什么?

假设您有一个128位散列,它有2 ^ 128种不同的可能性。通过使用生日悖论,您有50%的几率在sqrt(2 ^ 128)= 2 ^ 64th实例中打破碰撞阻力。

正如您所看到的,打破碰撞阻力比打破原像素阻力要容易得多。没有哈希函数是无冲突的,但通常需要很长时间才能找到冲突。所以,如果你使用像SHA-256这样的函数,可以安全地假设如果H(A)= H(B)则A = B.

物业6:拼图友好

现在,这是一个引人入胜的属性,这个属性对加密的应用和影响是巨大的(稍后当我们讨论挖矿和加密货币谜题时更多)。首先让我们定义属性,之后我们将详细介绍每个术语。

对于每个输出“Y”,如果从具有高min-entropy的分布中选择k,则找到输入x使得H(k | x)= Y是不可行的。

这可能是你的头脑但是没关系,让我们现在明白这个定义的含义。

“高min熵”是什么意思?

这意味着选择值的分布非常大,因此我们选择随机值的概率可以忽略不计。基本上,如果你被告知要选择1到5之间的数字,那么这是一个低的最小熵分布。但是,如果你要选择一个介于1和千万之间的数字,那就是一个高的最小熵分布。

“k | x”是什么意思?

“|”表示连接。连接意味着将两个字符串一起添加。例如。如果我将“BLUE”和“SKY”连接在一起,那么结果将是“BLUESKY”。

现在让我们重新审视这个定义。

假设您有一个输出值“Y”。如果从宽分布中选择随机值“k”,则找到值X使得k和x的串联的散列将给出输出Y是不可行的。

再次注意“不可行”这个词,这并不是不可能的,因为人们总是这样做。事实上,整个挖矿过程都是基于此(稍后会详细介绍)。

加密货币哈希函数的示例

  • MD 5:它产生128位散列。在~2 ^ 21次哈希后,碰撞阻力被打破。
  • SHA 1:生成160位哈希。约2 ^ 61哈希后碰撞阻力破裂。
  • SHA 256:产生256位散列。目前Bitcoin正在使用它。
  • Keccak-256:产生256位散列,目前由以太坊使用。

哈希和数据结构

数据结构是一种存储数据的专用方式。如果您想了解区块链的工作原理,则有两个数据结构属性至关重要。他们是:

  1. 指针。
  2. 链接列表。

指针

指针是编程中的变量,用于存储另一个变量的地址。通常,任何编程语言中的常规变量都存储数据

例如。 int a = 10,表示存在一个存储整数值的变量“a”。在这种情况下,它存储一个10的整数值。这是一个正常变量。

但是,指针不是存储值而是存储其他变量的地址。这就是为什么它们被称为指针,因为它们实际上指向其他变量的位置。

链接列表

链表是数据结构中最重要的项之一。这是链表的样子:

什么是哈希?在区块链的兜帽下

它是一系列块,每个块包含通过指针链接到下一个块的数据。在这种情况下,指针变量包含其中下一个节点的地址,因此建立连接。如您所见,最后一个节点具有空指针,这意味着它没有值。

这里要注意的一件重要事情是,每个块内的指针包含下一个块的地址。这就是指点的实现方式。现在你可能会问这对于列表中的第一个块意味着什么?第一个块的指针停留在哪里?

第一个块称为“genesis block”,它的指针位于系统本身。它看起来像这样:

什么是哈希?在区块链的兜帽下

图片提供:Coursera

如果您想知道“哈希指针”的含义,我们会稍微进行一下。

正如您现在可能已经猜到的那样,这就是区块链结构的基础。块链基本上是链表。让我们看看区块链结构是什么样的:

什么是哈希?在区块链的兜帽下

区块链是一个链表,其中包含数据和指向其前一个区块的哈希指针,从而创建链。什么是哈希指针?散列指针类似于指针,但它不仅包含前一个块的地址,而且还包含前一个块内的数据的散列。这一小调整使得区块链如此惊人可靠和开创性。

想象一下,黑客攻击第3块并尝试更改数据。由于散列函数的属性,数据的轻微更改将极大地改变散列。这意味着在块3中进行的任何微小更改都将改变存储在块2中的散列,现在反过来将改变块2的数据和散列,这将导致块1中的变化,依此类推等等。这将完全改变链条,这是不可能的。这正是区块链如何实现不变性。

那么块头是什么样的呢?

什么是哈希?在区块链的兜帽下

块头包含:

  • 版本:块版本号。
  • 时间:当前时间戳。
  • 目前困难的目标。 (稍后会详细介绍)。
  • 上一个块的哈希。
  • Nonce(后面会详细介绍)。
  • Merkle Root的哈希。

现在,让我们关注Merkle Root的哈希。但在此之前,我们需要了解Merkle树是什么。

什么是Merkle树?

什么是哈希?在区块链的兜帽下

图片提供:维基百科

上图显示了Merkle树的样子。在Merkle树中,每个非叶节点是其子节点的值的散列。

叶节点:叶节点是树的最低层中的节点。因此,如上图所示,叶节点将是L1,L2,L3和L4。

什么是哈希?在区块链的兜帽下

子节点:对于一个节点,其层下面的节点是它的子节点。在该图中,标记为“Hash 0-0”和“Hash 0-1”的节点是标记为“Hash 0”的节点的子节点。

根节点:标记为“Top Hash”的最高层上的单个节点是根节点。

什么是哈希?在区块链的兜帽下

那么Merkle Tree与区块链有什么关系呢?

每个块包含成千上万的事务。将每个块内的所有数据存储为一系列将是非常低效的。这样做会使找到任何特定的交易非常麻烦和耗时。但是,如果使用Merkle树,则会大大减少查找特定事务是否属于该块所需的时间。

我们在一个例子中看到这一点。考虑以下Merkle树:

什么是哈希?在区块链的兜帽下

图片提供:Coursera

现在假设我想知道这个特定数据是否属于块:

什么是哈希?在区块链的兜帽下

我可以通过跟踪导致数据的哈希跟踪来简单地跟踪它,而不是通过查看每个单独哈希并查看它是否属于数据的繁琐过程:

什么是哈希?在区块链的兜帽下

这样做可以大大减少所需的时间。

挖矿挖矿:加密货币难题。

当我们说“挖矿”时,它基本上意味着搜索要添加到区块链中的新块。来自世界各地的矿工不断努力确保连锁店不断发展。早些时候,人们很容易只使用他们的笔记本电脑开采,但随着时间的推移,人们开始形成挖矿池,以便更有效地利用他们的计算机能力。

然而,这可能是一个问题。每个加密货币都有一个上限,例如。对于比特币,它只有2100万。那里只有2100万比特币。如果矿工被允许以这个速度继续运营,他们将捞出现有的所有比特币。最重要的是,每个块的创建之间需要有特定的时间限制。对于比特币,块创建之间的时间限制为10分钟。如果允许更快地创建块,则会导致:

  • 更多冲突:将生成更多哈希函数,这将不可避免地导致更多冲突。
  • 更多的孤儿块:如果很多矿工过度开采,他们会同时拿出新的街区。这将导致一个或多个块不能成为主链的一部分并成为孤立块。

因此,为了限制块创建,设置特定的难度级别。挖矿就像一场游戏,你解决了这个难题并获得奖励。设置难度使得难题难以解决,因此更耗时。 WRT比特币难度目标是一个64字符的字符串(与SHA-256输出相同),以一串零开头。随着难度级别的增加,许多零会增加。每个2016年街区后,难度级别会发生变化。

挖矿过程

注意:我们主要在这里谈论比特币挖矿。

当比特币挖矿软件想要向区块链添加新块时,这就是它遵循的程序。每当新块到达时,首先对块的所有内容进行散列。如果散列小于难度目标,则将其添加到区块链中,并且社区中的每个人都确认新块。

但是,它并不那么简单。你必须非常幸运能得到一个像这样的新区块。这是nonce的用武之地.non是一个任意的字符串,它与块的散列连接在一起。之后,再次对该连接的字符串进行哈希处理并与难度级别进行比较。如果它不低于难度级别,则改变随机数并继续重复一百万次,直到最后满足要求。当发生这种情况时,块被添加到块链中。

所以回顾一下:

  • 获取新块的内容的哈希。
  • 随机数(随机字符串)附加到散列。
  • 新字符串再次进行哈希处理。
  • 然后将最终的哈希值与难度级别进行比较,看看它是否实际上小于该值。
  • 如果不是,则更改随机数并再次重复该过程。
  • 如果是,则将该块添加到链中,并更新公共分类帐并提醒添加。
  • 负责此事的矿工获得比特币奖励。

还记得哈希函数的6号属性吗?拼图友好?

对于每个输出“Y”,如果从具有高min-entropy的分布中选择k,则找到输入x使得H(k | x)= Y是不可行的。

所以,谈到比特币挖矿:

  • K = Nonce
  • x =块的哈希值
  • Y =难度目标

整个过程是完全随机的,在选择nonce时没有思考过程。它只是纯粹的蛮力,软件继续随机生成字符串,直到达到目标。整个过程遵循工作证明协议,基本上意味着:

  • 解决难题应该很困难。
  • 但是,检查答案应该对每个人都很容易。这样做是为了确保没有使用任何卑鄙的方法来解决问题。

什么是哈希率?

哈希率基本上意味着这些哈希操作在挖矿过程中发生的速度有多快。高哈希率意味着更多人和软件机器参与挖矿过程,因此系统运行平稳。如果哈希率太快,则难度级别增加。如果哈希率变得太慢,则难度级别降低。

结论

哈希确实是区块链技术创造的基础。如果想要了解区块链的全部内容,他们肯定应该理解哈希意味着什么。

资讯来源:由0x资讯编译自BLOCKGEEKS。原文链接:https://blockgeeks.com/guides/what-is-hashing/,版权归作者所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢