区块链 - 快速指南



区块链 - 简介

近年来,区块链引起了广泛关注。许多人将其描述为本十年最具颠覆性的技术。特别是金融市场可能会受到最大影响。

该技术正在被应用于许多垂直领域,如医疗保健、医药、保险、智能财产、汽车,甚至政府。

然而,迄今为止,区块链最成功的应用是比特币 - 一个点对点电子现金系统,巧合的是,这也是区块链技术的首次实现。因此,要了解区块链技术,最好了解比特币系统的设计和实现方式。

在这篇文章中,您将学习什么是区块链、它的架构、它是如何实现的以及它的各种功能。在描述区块链的复杂性时,我将以比特币的实现为例。

区块链架构并非易事,许多人撰写了优秀的文章、教程,包括一些视频。这些文章面向从新手到专业人士的不同受众。在本教程中,我将重点关注区块链架构的概念理解,兼顾新手和专业人士。在深入研究区块链之前,了解为什么需要这种新技术非常重要?这个问题的答案在于所谓的**双重支付**。

区块链 - 双重支付

考虑图像中所示的情况 -

Double Spending

如这里清楚地看到,Bob 用一张 10 美元的钞票向 Lisa 购买了一本书。一旦 Lisa 收到这 10 美元的纸币,Bob 就无法再次使用这笔钱进行其他交易,因为这笔实体货币现在属于 Lisa。

现在,考虑一种情况,即资金以数字形式支付。这在图像中进行了说明 -

Paid Digital Form

由于货币交换的格式为数字格式,它本质上是存储在 Bob 设备上的某个位置的二进制物理文件。在 Bob 将此文件(数字货币)提供给 Lisa 后,他还可以将文件的副本提供给 Alice。两者现在都认为他们收到了这笔钱,却没有办法验证数字货币的真实性,因此都会将各自的商品交付给 Bob。这称为**双重支付**,发送者在多个地方花费同一笔钱以从多个供应商处获取服务或商品。

为了解决双重支付问题,可以采用集中式权威机构来监控所有交易。这在图像中进行了说明 -

Centrailized Authority

集中式权威机构(通常称为银行)维护一个分类账,记录所有交易。现在,Bob 必须将其数字货币发送到银行,银行会在其分类账中记入借方,记入 Bob 的账户。在确保 Bob 拥有足够的余额来支付他想要发送的数字货币后,银行会将这笔钱发送给 Lisa,记入其分类账的贷方,记入 Lisa 的账户。

现在,可以保证 Bob 不会双重支付这笔钱。如果每笔数字交易都通过这样的集中式权威机构进行,则双重支付问题将得到解决。这也提供了另一个好处,可以验证每枚货币(数字货币)在其接收到的交易中的真实性。因此,假币(如 Bob 使用副本支付给 Alice 的情况下的重复货币)将很容易被检测到并防止流通。

虽然引入集中式权威机构解决了双重支付问题,但也带来了另一个主要问题 - 创建和维护集中式权威机构本身的成本。

由于银行需要资金运营,因此它们开始在其为客户进行的每笔货币交易中收取佣金。有时这可能会变得非常昂贵,尤其是在海外转账的情况下,整个交易可能涉及多个代理机构(银行)。

所有上述问题都通过引入数字货币比特币得到了解决。在深入探讨其设计和架构之前,我将先向您简要介绍一下比特币是什么。

比特币 - 简史

比特币是由中本聪于 2008 年通过一篇名为比特币:点对点电子现金系统的研究型白皮书引入世界的。

比特币不仅解决了双重支付问题,还提供了更多优势,其中一个值得一提的优势是交易中的匿名性。创建该系统并在此系统上进行了一些比特币交易的中本聪对全世界来说完全是匿名的。

试想一下,在这个社交媒体的世界里,每个人的隐私都岌岌可危,而世界至今都无法追踪中本聪是谁?事实上,我们不知道中本聪是个人还是一群人。谷歌搜索也揭示了这样一个事实:中本聪持有的比特币价值约为 194 亿美元 - 这笔钱现在在比特币系统中无人认领。那么比特币是什么 - 让我们来看一看!

什么是比特币?

正如您之前看到的,银行维护一个记录每笔交易的分类账。此分类账由银行私下持有和维护。中本聪提出,让这个分类账公开,并由社区维护。

一旦您将这样的分类账公开,您就会想到一些问题。此分类账必须防篡改,以便任何人都无法修改其条目。由于分类账中的每个条目都是公开可见的,因此我们将不得不弄清楚如何维护匿名性 - 显然,您不希望世界上每个人都知道我向您支付了 100 万美元。

此外,由于只有一个分类账跟踪着世界上所有交易,因此分类账的大小也将是另一个令人担忧的问题。为这些复杂问题提供解决方案并非易事,这就是我在这里尝试用简单的语言让您理解比特币底层架构的原因。

这个底层架构就是**区块链**,这也是本教程的主题。要了解区块链架构,您需要了解其基础的一些关键特性。因此,让我们从 PKI - 公钥密码学开始。

区块链 - 公钥密码学

公钥密码学,简称 PKI,也称为非对称加密。它使用两对密钥 - 公钥和私钥。密钥是一个长的二进制数字。公钥在全球范围内分发,顾名思义,它是真正的公开的。私钥必须严格保密,并且任何人都不应该丢失它。

在比特币的情况下,如果您丢失了比特币钱包的私钥,则钱包的所有内容都会立即面临被盗的风险,并且在您意识到之前,您的所有钱(钱包的内容)都会消失,并且系统中没有任何机制可以追踪是谁偷走了它 - 这就是我之前提到的系统中的匿名性。

PKI 完成两个功能 - 通过加密/解密机制进行身份验证和消息隐私。我现在将解释这两个功能 -

身份验证

当双方交换消息时,在发送方和接收方之间建立信任非常重要。特别是,接收方必须信任消息的来源。回到我们之前(在图 1 中描述)Bob 向 Lisa 发送一些钱以购买她的商品的场景,让我们看看 PKI 如何在 Bob 和 Lisa 之间建立这种信任。请查看下图 -

Authentication

首先,如果 Bob 想要向 Lisa 发送一些钱,他必须创建自己的私钥/公钥。请注意,这两把密钥始终成对出现,并且您不能混合不同个人或不同实例的私钥和公钥。

现在,Bob 说他向 Lisa 发送了 10 美元。因此,他创建一条消息(纯文本消息),其中包含 Bob(发送方)的公钥、Lisa(接收方)的公钥以及金额(10 美元)。

此汇款的目的,例如“我想向您购买南瓜”,也会添加到消息中。整个消息现在使用 Bob 的私钥进行签名。当 Lisa 收到此消息时,她将使用 PKI 的签名验证算法和 Bob 的公钥来确保消息确实来自 Bob。PKI 的工作原理超出了本教程的范围。有兴趣的读者可以参考此网站,以更详细地讨论 PKI。这建立了消息发送者的真实性。现在,让我们看看消息隐私。

消息隐私

现在,由于 Lisa 已收到付款,她想发送 Bob 想要购买的电子书的链接。因此,Lisa 会创建一条消息并将其发送给 Bob,如图像所示 -

Message Privacy

Lisa 创建一条消息,例如“这是您请求的电子书的链接”,使用她在 Bob 的请求消息中收到的 Bob 的公钥对其进行签名,并使用 HTTPS 握手期间双方共享的某个密钥对消息进行加密。

现在,Lisa 确信只有 Bob 可以使用仅由 Bob 持有的私钥来解码该消息。此外,拦截消息的人将无法恢复其内容,因为内容已通过仅由 Bob 和 Alice 持有的密钥进行加密。这保证了 Lisa 只有 Bob 才能访问她的电子书。

在了解了 PKI 隐含的两个功能身份验证和消息隐私之后,让我们继续了解比特币如何利用 PKI 来保护我在“什么是比特币?”一章中提到的公共分类账。

仅供参考 - 最流行的PKI算法是RSAECDSA,比特币使用后者。

区块链 - 哈希

PKI中最重要的功能之一是哈希函数。哈希函数将任意大小的数据映射到固定大小的数据。比特币使用SHA-256哈希函数,生成大小为256位(32字节)的哈希值(输出)。这在图片中进行了说明 -

Hashing

Bob在向Lisa下订单时,会创建一个类似于上面显示的消息。此消息通过哈希函数进行哈希处理,生成一个32字节的哈希值。此哈希值的优点在于,在所有实际用途下,哈希值(256位数字)都被认为是消息内容的唯一标识。如果消息被修改,哈希值将发生变化。不仅如此,给定一个哈希值,也无法重建原始消息。

在了解了哈希的重要性之后,让我们继续探讨比特币中的另一个概念:挖矿。

比特币 - 挖矿

当Bob为Lisa创建购买请求时,他不会只将其发送给Lisa。相反,请求消息会广播到他连接的整个网络中。Bob的网络在图片中进行了描述。

Mining

消息发送到所有连接的节点(机器)。图中的一些节点被标记为矿工。这些是运行比特币消息挖矿软件的机器。我现在将向您解释挖矿的含义。

挖矿过程

由于整个网络是广泛分布的,因此网络中的每个矿工都预计在任何给定时间段内会收到来自多个供应商的多个消息。矿工所做的是将这些消息组合到一个区块中。这在图片中进行了说明 -

Mining Process

形成消息区块后,矿工使用前面描述的哈希函数对区块进行哈希处理。现在,正如您所知,如果任何第三方修改此区块的内容,其哈希值将变得无效。顺便说一句,每条消息都带有时间戳,因此没有人可以在不影响区块哈希值的情况下修改其时间顺序。因此,区块中的消息可以完美地防止篡改。如何利用这一事实来确保网络中所有交易的安全将在后面进行解释。

区块链 - 区块链

各个矿工创建的区块链在一起形成一个真正的分布式公共账本。

Chaining Blocks

链中的每个区块包含多条消息(交易),如前面图8所示。链中的区块可能来自任何矿工。在创建区块链时,我们遵守以下规则:将前一个区块的哈希值添加到当前区块中。

因此,矿工在创建区块时,会获取链中最后一个区块的哈希值,将其与自己的一组消息组合起来,并为新创建的区块生成哈希值。这个新创建的区块现在成为链的新末端,因此随着矿工不断添加更多区块,链会不断增长。

区块链 - 工作量证明

由于所有交易都带有时间戳,因此我们需要在点对点网络上实现一个分布式时间戳服务器。这需要一些额外的实现,那就是我将要描述的工作量证明。在每个区块中,我们现在添加另一个名为Nonce的项目,如下面的图所示 -

Proof of Work

Nonce是一个数字,使得区块的哈希值满足某个特定条件。此条件可能是生成的哈希值的前四位必须为零。

因此,生成的哈希值将类似于000010101010xxx。通常,矿工从Nonce值为0开始,并不断递增,直到生成的哈希值满足指定的条件。

请注意,哈希生成是随机的,并且不受您的控制 - 也就是说,您无法强制哈希函数生成特定的哈希值。因此,可能需要多次迭代才能生成具有四个前导零的所需哈希值。比特币系统中生成一个区块的预期时间为10分钟。一旦矿工成功挖出区块,他就会将其发布到系统中,使其成为链中的最后一个区块。

请注意,有多个矿工正在争夺生成合法区块。比特币系统通过给予第一个成功的矿工一定数量的比特币来奖励他。一般来说,拥有更多计算能力的矿工可能会成为早期赢家。这可能会导致那些拥有巨大处理能力的人对整个系统发起攻击。我将在本教程的最后部分描述这些攻击以及如何缓解这些攻击。

区块链 - 网络与挖矿

我现在将总结上面描述的步骤;这就是网络中发生的事情 -

  • 任何想要从在网络上发布广告的第三方获取服务的人,首先创建一个交易(发送给所需接收者的消息)。

  • 在给定的时间段内,可能会有许多发送方(买方)和接收方(卖方)创建此类交易。

  • 所有交易都广播到网络中的所有节点。请注意,并非每个交易都必须到达网络中的每个其他节点。

  • 每个节点将新的交易组合成一个区块。请注意,每个区块中的交易集独立于其他节点创建的区块中的交易集,并且自然与其他区块不同。这无关紧要;系统确保网络上广播的每笔交易在合理的时间内都包含在某个区块中。通常,发送方会通过向矿工提供一定数量的比特币来激励节点。矿工可以选择优先将激励更高的交易包含在区块中。

  • 节点现在开始为其组装的区块寻找工作量证明。

  • 当节点找到工作量证明时,它会将组装好的区块广播到网络上。

  • 接收新区块的节点只有在验证区块中的所有交易均有效且未被花费后才会接受它。

  • 如果区块被接受为有效,则正在处理其自身新区块的节点将不得不重新组装其区块中的交易,确保交易不会重复。节点现在开始为其新创建的区块寻找工作量证明;在此过程中,它将接受的区块的哈希值作为前一个哈希值。

  • 同样,区块链将永远持续增长。

现在,我们已经了解了整个系统的运作方式,让我来描述一些副作用以及如何解决它们。

区块链 - 矿工激励

正如我们在比特币 - 挖矿章节中看到的,矿工在任何给定时间段内都可能收到大量交易。区块的最大大小在系统中是预定义的,因此每个区块只能包含一定数量的交易。

区块中的交易数量由预定义的区块大小和每个区块的平均长度决定。这里一个重要的提示是,发送方不应在消息中包含过多的信息,以便使消息简短,从而激励矿工在其他较长的消息之前接受它。

发送方通常还会添加一定数量的比特币作为交易费用,以激励矿工将其尽早包含在其区块中。

构建区块链的另一个结果是其自身的大小。随着时间的推移,整个区块链可能会变得太大,以至于节点无法将其存储在其磁盘上。这可以通过使用Merkle树来解决,这将在后面进行描述。

区块链 - 梅克尔树

节点的磁盘空间问题很容易克服,因为区块中的所有交易都按如下面的图片所示在Merkle树中进行哈希处理 -

Merkle Tree

区块头现在包含前一个区块的哈希值、Nonce以及Merkle树中当前区块中所有交易的根哈希值。由于此根哈希值包含区块内所有交易的哈希值,因此可以修剪这些交易以节省磁盘空间。因此,您的区块链将如下面的图片所示 -

Root Hash

这可以节省大量的磁盘空间。此策略由仅对接收他人的付款感兴趣的普通客户端使用。但是,矿工需要保存完整的区块链。现在问题出现了,接收者如何在没有能够追踪收到的币到其来源的能力的情况下验证付款?这将在后面进行解释。

区块链 - 支付验证

考虑一种情况,作为供应商,您可能希望验证过去进行的特定付款。由于您机器上保存的区块链仅包含前面图中所示的区块头,因此您要搜索的交易在您的区块链副本中缺失。

您现在可以在您的区块链副本中向后搜索,直到找到一个包含所需交易时间戳的区块。现在,请求所选区块的Merkle树,您将拥有要查找的交易。这在下面的图中进行了说明 -

Payment Verification

在这里,我们假设您正在查找Tx103。虽然您可能无法看到Tx103的内容,但您知道它已被其所属的区块以及链中所有后续区块接受。因此,您可以安全地信任此交易并继续您的业务。

区块链 - 解决冲突

正如我们所看到的,比特币网络包含多个矿工。有可能,两个不同的矿工同时解决了工作量证明,从而将他们的区块添加到链中最后一个已知的区块。这在下面的图片中进行了说明 -

Resolving Conflicts

现在,在区块3之后我们有两个分支。这两个分支都是有效的。因此,下一个挖出的区块可能会添加到这两个分支中的任何一个。假设矿工将新挖出的区块添加到区块104-A,则包含区块104-A的分支将比包含区块104-B的分支更长。这在下面的图片中进行了说明 -

Bitcoin Architecture

在比特币架构中,最长的分支总是获胜,较短的分支会被清除。因此,区块104-B必须被清除。在清除此区块之前,此区块中的所有交易都将返回到交易池,以便它们被挖出并添加到某个未来的区块中。这就是冲突如何解决以及系统如何仅维护一条区块链的方式。

区块链 - 隐私

由于记录所有比特币交易的账本是真正公开的,因此隐私受到威胁。世界上任何人都可以知道谁付给了谁?传统的银行系统能够通过将其记录保密来维护这种隐私。

比特币系统中的隐私通过不同的策略实现。请注意,我们说过比特币的发送方需要知道向谁付款。因此,他要求提供他想要付款的供应商的公钥。此公钥可以是匿名的。

从某种意义上说,作为某些服务的供应商,当有人询问您在哪里发送付款时,您只需发送您的公钥即可。此公钥与您的关联未在账本中的任何地方记录。这样,此交易之外的任何人只会知道交易了多少钱以及将这笔钱支付给了哪个公钥。

为了实现更高的隐私程度,对于每笔交易,您可以在每次交易中生成一个新的私钥/公钥,以便第三方无法将您进行的多笔交易组合在一起。对于外部人员来说,这仅仅意味着进行了多笔小额交易,并且他们永远不会将这些交易链接到一个共同的来源。

最后,任何基于互联网的在线系统都容易受到滥用。我将描述几种对比特币系统可能存在的攻击类型以及如何缓解这些攻击。

比特币 - 缓解攻击

我将讨论比特币系统中三种不同类型的可能攻击 -

竞争攻击(Race Attack)

作为攻击者,你可能会以快速连续的方式将相同的币发送给不同的商家,可能使用两台不同的机器。如果商家在交付商品之前没有等待区块确认,他们很快就会意识到交易在挖矿过程中被拒绝了。这种攻击的解决方案是,商家必须至少等待一个区块确认才能发出商品。

芬尼攻击(Finney Attack)

在这种情况下,攻击者是矿工。矿工用自己的交易挖出一个区块,但不将其发布到系统中。他现在在第二个交易中使用相同的币,然后发布预先挖出的区块。显然,第二个交易最终会被其他矿工拒绝,但这需要一些时间。为了降低这种风险,卖家应该至少等待六个区块确认才能释放商品。

51% 攻击

在这种类型的攻击中,我们提出了一个不切实际的假设,即某人拥有网络 51% 的计算能力。这种攻击中的攻击者挖出一个私有区块链,他在其中双重花费币。

由于他拥有大部分计算能力,因此可以保证他的私有区块链在某个时间点会比“诚实”网络的链条更长。然后,他将他的私有区块链发布到系统中,使之前记录在诚实区块链中的所有交易都失效。

这种攻击是虚构的,因为获取等于或超过整个网络 51% 计算能力的计算能力非常昂贵。

区块链 - 结论

在本简短教程中,您通过以比特币作为案例研究的方式了解了区块链的几个概念。比特币是区块链的第一个成功实现。如今,世界已经发现区块链技术在多个行业的应用,在这些行业中,人们希望在没有集中式权威参与的情况下建立信任。因此,欢迎来到区块链的世界。

进一步阅读 -

广告

© . All rights reserved.