中文English
Your current position: Home » News Center » Research Think Tank » 区块链基础:账本、区块和哈希算法
区块链基础:账本、区块和哈希算法
Date of publication:2022-10-24     Reading times:42     字体:【
本文由 Cosmos Chinese 中文技术社区翻译,原文发布于 Interchain Foundation 博客,作者为 B9lab。

https://medium.com/the-interchain-foundation/strength-in-numbers-ledgers-blocks-and-hashing-f62d5c2dac6b

欢迎回到跨链开发者学会系列文章!本文将介绍一些关键的区块链概念,帮助您了解 Cosmos 生态!
跨链开发者学会系列的第一篇文章中,我们不仅介绍了 Cosmos,还讨论了一些核心的区块链理论,包括中心化、去中心化和分布式网络之间的区别,以及区块链旨在解决或缓解的两个核心问题——双花问题和通信信任问题,后者通过拜占庭容错得到了解决。
现在您已经了解,区块链本质上是一个分布式账本。本文将深入介绍区块链如何以不同的方式处理事务,并将一个基本概念扩展至复杂世界中进行运用。
本文内容包括:
  • 账本系统——新与旧
  • 什么是区块?
  • 计算信任
  • 数字的力量
账本系统——新与旧
在过去的几个世纪中,「仅追加账本」的理念已为人所熟知并被大众所接受。账本是按时间顺序排列的活动记录,就像一本带有垂直事务列表的书,最早的事务位于页面顶部,新事务则位于底部。长期以来,会计师会将每项新事务添加到列表末尾,以此来保存收支事务的记录,保留历史事务证据,并为未来活动提供有价值的参考。这是一种简单、合乎逻辑且可靠的方法,但在数字技术出现之前的时代,这种记账方式存在一些明显的弱点。
首先,物理记录很容易腐烂和破损,更不必说被盗或被居心不良者修改。火灾、洪水和时间的流逝可以彻底抹去一段历史,而用橡皮擦稍动手脚可能就能达到抢劫银行的效果!同时,账本也很难复制:在计算机出现之前,备份记录意味着文件柜里会装满硬拷贝,占用昂贵的存储空间。更糟糕的是,在 20 世纪之前,就算您愿意手动复制原始,完成一份备份也是一种奢侈,备份过程中还可能出现各种各样的错误。
区块链只不过是这一古老记账手段的新型实现。数字环境允许人们即时、完美地复制记录。仅这一点就意味着在网络上分发账本的副本至少是可行的。问题是,我们是否可以信任账本的每一份副本,就像它仍是一个独立的文件一样?
区块链就这个问题给出了肯定的回答,但在我们明确它是如何做到这一点之前,需要首先回顾传统账本和区块链之间的显著差异。
什么是区块?
我们对账本的描述是如何映射到区块链上的?什么是区块?我们可以把几个不同方面组合在一起,包括:组成每个页面的降序事务列表;组成一本书的不同页面;最终,完整的书籍填满了会计师办公室的书架!
区块链中的一个「区块」就类似于完整账本中的一个「页面」。但是,网络中的每个节点都不是一本书,甚至不是书架,而是一个等待添加新页面的「文件夹」。事务按时间顺序记录在页面上;当页面被填满时,就会被复制并发送到每个节点的文件夹,随后按时间顺序添加到此前的页面中;因此每个人都保有相同的信息。
这种简化的记账方式背后隐藏着巨大的复杂性,但这就是区块链的本质含义:在特定时间段内按顺序记录的事务分组。然而,这种网络运行方式提出了一些重要的问题。首先,事务可能包含极具价值或私人的信息——如何在每个人都拥有数据副本的公共网络上保持安全性和机密性?
这是一个重要的问题,我们会在下文进行解释。然而,信任对区块链至关重要的原因不止一个。这一系统的基础是,需要确保通过区块链传播的机密信息在每个节点上是相同的。这是通过区块链的关键加密特征之一——哈希算法(hashing)——来实现的。
计算信任
区块链正在让我们远离中心化的信任模式,但它仍然需要维持中心化信任模式所提供的保护。我们可以将区块链的目标定义为创建公开可用的、可验证的事务记录,同时保护这些事务中的数据。哈希算法是解决这一挑战过程中的一部分。
哈希函数是一个数学过程,它采用任意大小的数据集,并生成一个具有唯一性质的、固定大小的数值,称为哈希。这样做的一个优点是,即使是巨量的输入数据也可以转换为更易于管理且大小一致的输出数据;另一个优点是,生成的哈希与原始输入数据之间没有相同的定量特征——即由特定函数创建的任何哈希在表面上都是相同的。换句话说,您无法仅通过查看输出的哈希值来辨认有关输入数据的任何信息。
一个有效的哈希函数应该具备很快的计算速度,同时将任何两组输入数据能产生完全相同的哈希值的可能性降至最小。哈希算法技术为区块链提供了快速和强大的错误检查功能,节点不仅可以确认链上每个新区块的完整性,还可以确认区块链的整个历史,一路追溯至原始的「创世(genesis)」区块。
下面让我们更直接地说明哈希算法的过程。
1. 莎士比亚与哈希算法

为简单起见,让我们使用一个简单的短语来表示一个区块:例如,只使用「Romeo」与「Juliet」这两个词,而不是莎士比亚的整个戏剧。现在让我们使用 Cosmos 常用的 SHA-256 哈希函数对「区块」短语进行加密,结果得到:

输入短语:
Romeo and Juliet
输出哈希:
b15a06302f4dc7a0acf945f1c670e9f0666af3078f3dea2a62c42e25b837df32
该输出哈希为十六进制格式。我们日常使用的十进制编号系统使用数字 0-9,而十六进制使用十六个数位,包括数字 0-9 和字母 A-F。乍一看有点奇怪,但我们可以用一个简单的例子进行说明:在表示「九」时,两者都会使用数字「9」;而在表示「十」时,十进制会使用数字「10」,十六进制则会使用字母「A」。
回到我们的输出哈希,这个 32 字节的十六进制字符串对于所输入的短语来说是唯一的——如果您想证明,可以通过下方链接自己尝试一下,就会得到完全相同的 64 个字符。现在如果稍微改变一下输入短语,会发生什么呢?
验证链接:
https://www.browserling.com/tools/all-hashes
输入短语:
Romeo and Julie
输出哈希:
a580e89a80762689530b4227699aa600e3402ba074c4a4593823a5f1d5a9e451
通过仅更改单个字符,从「Juliet」中删除「t」,输出哈希完全不同。此外,哈希的长度并不能为输入短语的内容提供任何线索:就算您输入了全部的剧本文本,它仍然会产生一个长度相同的独特输出值!
哈希算法提供了一种无需事先查看每项事务即可即时了解区块内容的方法。如果两个节点显示了「相同」区块的不同哈希值,您就可以确信它们的内容绝对不同。这种完整性检查的便捷性是区块链的一个基本特征,其座右铭是不要信任,要去验证。当我们探究区块如何被链接收时,可以获得更多关于这一主题的信息。
2. 其他链上产生的区块

现在想象一个莎士比亚式的区块链:一个只能追加的账本,其中新事务会在历史事务之后定期添加。会不会像下图一样?

如果按照剧本的出版时间顺序,从远到近,那么答案是肯定的。但是,这条链是出版顺序的可信记录吗?
答案是:绝对不是
通过这些哈希当然可以很容易地检验任何一个剧本的名称文本是否被更改:只需再次生成其哈希并进行比较即可;如果哈希值不同,则表示文本已被更改。但是,将区块添加到链上的顺序对于真正的区块链应用至关重要。对包含莎士比亚全集的账本来说,在众多的条目中,任何两部戏剧的位置互换很容易被忽视。
您需要的不仅仅是每个区块的唯一哈希值:链上的每个区块都必须确定地连接到它的前一个区块。那么,如何确保历史记录的任何变更都会影响到它之后的所有区块呢?
事实上,这很简单:
比较这两个表格,您会发现,现在只有「Romeo and Juliet」的输出哈希与前表相同:通过在每个新区块中包含前一个区块的哈希值,生成的每个后续哈希值都是不同的。区块 2 包含了区块 1;区块 3 包含区块 2,同时包含区块 1;区块 4 包含区块 3,同时包含区块 2,其中又包含区块 1……以此类推。
这意味着,对历史记录的任何变更都会影响之后的所有内容:更改区块的顺序或区块的内容将从根本上改变之后的所有哈希值。无人注意的情况下修改区块链是不可能的
数字的力量
哈希算法是区块链的核心。使用莎士比亚式账本的 100 个节点形成了一个自我更正系统。任何包含对已建立数据的的账本的副本都将与其他所有副本大不相同。如果没有一个权威节点来规定「事实」,则适用多数规则,即 99 个节点占主导地位,声称 Macbeth 在 Hamlet 之前出现的 1 个节点可以被拒绝并进行纠正,以匹配其余节点。
这意味着意外错误很容易修复,且任何蓄意的恶意行为都极难成功。要破坏网络,或通过篡改事务记录获利,需要大多数节点认可虚假记录的真实性。由于这些节点分布在网络中的未知位置,从地理意义上讲,也可能分布在世界各地,因此这种诡计几乎是不可能得逞的。
在这一点上,创建可信区块链的技术基础似乎很清楚,在网络上分布这些技术的好处也很明晰。尚不清楚的是,如何决定将哪些内容放入每个新区块中——毕竟,在复杂的网络中,新事务将始终在不同的参与者之间发生。那么,所有这些活动的单一记录是如何被整个网络收集、共享和识别的呢?网络主导权与建立符合事实的历史记录之间究竟有着怎样的联系?
 
Previous:
                           Next: