什么是哈希? [循序渐进指南-区块链原理]

那么,什么才是真正的哈希?

TLDR:

  1. 散列是使用数学函数从文本字符串生成一个或多个值.
  2. 当邮件仅针对特定收件人时,散列是在邮件传输过程中实现安全性的一种方法。公式生成哈希,这有助于保护传输的安全性免受篡改.

重要的是要知道区块链哈希如何工作。为了做到这一点,我们首先需要了解区块链创建的核心原则之一。区块链技术是上个世纪最具创新性和时代定义的发现之一。看到它在过去几年中产生的影响以及将来会产生的影响,可以肯定地说这并不是夸张。为了了解以太坊和比特币等各种加密货币的功能.

 那么什么是哈希?

简而言之,哈希表示获取任意长度的输入字符串并给出固定长度的输出。在像比特币这样的加密货币的背景下,交易被视为输入并通过哈希算法运行(比特币使用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个人,那么两个人共享完全相同的生日的几率在天文数字上就会上升。实际上,在这种情况下,两个人有50-50个机会共享相同的生日!

什么是哈希?区块链的幕后

图片来源:(YouTube)

为什么会这样呢?这是因为概率的简单规则如下。假设发生事件的可能性为N,那么您需要N个随机项的平方根,以便它们有50%的碰撞机会.

因此,将这个理论应用于生日,您有365种不同的生日可能性,因此只需要Sqrt(365),即〜23〜,就可以随机选择两个人,有两个人分享生日的机会为50%.

这在哈希中有什么应用?

假设您有一个128位哈希,其中包含2 ^ 128种不同的可能性。通过使用生日悖论,您有50%的机会在sqrt(2 ^ 128)= 2 ^ 64实例处打破碰撞阻力.

如您所见,破坏耐碰撞性比破坏原像抗性要容易得多。没有哈希函数没有冲突,但是找到冲突通常需要很长时间。因此,如果您使用的是SHA-256之类的函数,则可以假定,如果H(A)= H(B)则A = B.

物业6:友善拼图

现在,这是一个引人入胜的属性,并且这一属性对加密货币的应用和影响是巨大的(稍后我们将介绍采矿和加密难题,这将对此进行更多介绍)。首先定义属性,然后我们将详细介绍每个术语.

对于每个输出“ Y”,如果从具有最小最小熵的分布中选择k,则无法找到输入x使得H(k | x)= Y.

那大概遍了你的脑袋!没关系,让我们现在了解一下定义的含义.

“高最小熵”是什么意思?

这意味着从中选择值的分布是如此之大,以至于我们选择随机值的可能性很小。基本上,如果您被告知要选择一个介于1到5之间的数字,则其最小熵分布较低。但是,如果您选择一个介于1到gazillion之间的数字,则这是一个较高的最小熵分布.

“ k | x”是什么意思?

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

现在让我们回顾一下定义.

假设您的输出值为“ Y”。如果您从较宽的分布中选择一个随机值“ k”,则无法找到一个值X,以使k和x的并列散列将得到输出Y.

再次注意“不可行”一词,这并非不可能,因为人们一直在这样做。实际上,整个采矿过程都在此基础上进行(稍后会详细介绍).

加密哈希函数的示例

  • MD 5:产生128位哈希。在〜2 ^ 21个哈希之后,抗碰撞性被破坏了.
  • SHA 1:产生一个160位的哈希。约2 ^ 61的哈希值后抗碰撞性破裂.
  • SHA 256:产生256位哈希。比特币目前正在使用它.
  • Keccak-256:产生256位哈希值,当前被以太坊使用.

散列和数据结构

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

  1. 指针.
  2. 链表.

指针

指针是编程中的变量,它存储另一个变量的地址。通常,任何编程语言中的普通变量都会存储数据.

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

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

链表

链表是数据结构中最重要的项目之一。链表如下所示:

什么是哈希?区块链的幕后

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

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

第一个块称为“生成块”,其指针位于系统本身中。看起来像这样:

什么是哈希?区块链的幕后

图片提供:Coursera

如果您想知道“哈希指针”是什么意思,我们将在稍后介绍.

您可能已经猜到了,这就是区块链的结构基础。区块链基本上是一个链表。让我们看一下区块链的结构:

什么是哈希?区块链的幕后

区块链是一个链表,包含数据和指向其上一个块的哈希指针,从而创建了链。什么是哈希指针?哈希指针与指针相似,但是它不仅包含前一个块的地址,还包含前一个块内数据的哈希。这一小小的调整就是使区块链如此可靠和开拓性的原因.

想象一下,黑客攻击了第3块并试图更改数据。由于哈希函数的特性,数据的微小变化将彻底改变哈希。这意味着在块3中进行的任何细微更改都会更改存储在块2中的哈希,这将依次更改数据和块2的哈希,这将导致块1中的更改​​,依此类推,依此类推。这将完全改变链条,这是不可能的。这正是区块链实现不变性的方式.

那么块头是什么样子?

什么是哈希?区块链的幕后

块头包含:

  • 版本:块版本号.
  • 时间:当前时间戳.
  • 当前的难度目标。 (稍后会详细介绍).
  • 上一个区块的哈希.
  • 随机数(稍后有更多内容).
  • 默克尔根的哈希.

现在,让我们关注默克尔根的哈希。但在此之前,我们需要了解什么是默克尔树.

什么是默克尔树?

什么是哈希?区块链的幕后

图片提供:维基百科

上图显示了Merkle树的外观。在Merkle树中,每个非叶节点都是其子节点值的哈希值.

叶子节点:叶子节点是树的最低层中的节点。因此,在上图中,叶节点将是L1,L2,L3和L4.

什么是哈希?区块链的幕后

子节点:对于一个节点,其层以下的节点将馈入该节点。在该图中,标记为“哈希0-0”和“哈希0-1”的节点是标记为“哈希0”的节点的子节点.

根节点:最高层上标有“顶级哈希”的单个节点是根节点.

什么是哈希?区块链的幕后

那么默克尔树与区块链有什么关系?

每个区块包含成千上万的交易。将所有数据按序列存储在每个块中将非常浪费时间。这样做将使查找任何特定的交易极为繁琐且耗时。但是,如果使用Merkle树,则将大大减少查找特定交易是否属于该区块所需的时间.

让我们来看一个例子。考虑以下Merkle树:

什么是哈希?区块链的幕后

图片提供:Coursera

现在,假设我想找出此特定数据是否属于该块:

什么是哈希?区块链的幕后

我不必经过繁琐的过程来查看每个散列并查看它是否属于数据,而是可以通过追踪导致数据散列的轨迹来简单地对其进行跟踪:

什么是哈希?区块链的幕后

这样做可以大大减少花费的时间.

挖矿中的哈希:加密难题.

当我们说“采矿”时,它基本上意味着搜索要在区块链中添加的新区块。来自世界各地的矿工一直在努力确保链条不断增长。以前,人们仅使用笔记本电脑就可以轻松地进行挖掘,但是随着时间的流逝,人们开始组建采矿池来集中其计算机功能并更有效地进行挖掘.

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

  • 更多冲突:将生成更多哈希函数,这将不可避免地导致更多冲突.
  • 更加孤立的区块:如果许多矿工过度开采,他们将同时提出新的区块。这将导致更多的区块不再成为主链的一部分而成为孤立区块.

因此,为了限制块创建,设置了特定的难度级别。采矿就像一个游戏,您解决难题并获得奖励。设置难度使该难题更难以解决,因此更加耗时。 WRT比特币的难度目标是一个64个字符的字符串(与SHA-256输出相同),该字符串以一串零开头。随着难度级别的增加,零的数量也增加。难度等级在每第2016个区块后发生变化.

采矿过程

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

当比特币挖矿软件想要向区块链添加新区块时,遵循以下步骤。每当有新块到达时,将首先对块的所有内容进行哈希处理。如果哈希值小于难度目标,则将其添加到区块链中,社区中的每个人都承认新的区块.

但是,事情并非如此简单。这样您将必须非常幸运地获得一个新的区块。这是现时出现的地方。现时是一个任意字符串,与块的哈希值连接在一起。此后,此连接的字符串再次被散列,并与难度级别进行比较。如果不小于难度级别,则更改随机数,并重复执行一百万次,直到最终满足要求。发生这种情况时,该区块将添加到区块链.

总结一下:

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

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

对于每个输出“ Y”,如果从具有最小最小熵的分布中选择k,则不可能找到输入x使得H(k | x)= Y.

因此,当涉及到比特币挖矿时:

  • K =随机数
  • x =区块的哈希
  • Y =难度目标

整个过程是完全随机的,选择随机数没有思考过程。这只是纯粹的蛮力,软件会不断随机生成字符串,直到达到目标为止。整个过程遵循工作量证明协议,该协议基本上意味着:

  • 解决难题应该很困难.
  • 但是,每个人都应该很容易地检查答案。这样做是为了确保不使用任何不熟练的方法来解决问题.

什么是哈希率?

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

结论-什么是哈希?

散列在创建区块链技术中确实是基础。如果要了解区块链的全部内容,那么他​​们一定应该了解哈希的含义.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me