主页 > imtoken国内版 > 区块链 - 区块链基础知识

区块链 - 区块链基础知识

imtoken国内版 2023-05-26 07:07:43

区块链入门

一种区块链支持的加密货币,不经过任何信任或监管机构(如银行或政府)验证每笔交易,不涉及中间人,并依靠现代加密技术使区块链中的数据不可篡改和匿名. . 区块链被复制到对等网络中的每个节点,因此不存在单点故障,确保了技术的可用性和可靠性。

区块链如何运作

比特币区块链是世界上第一个区块链技术实例。 因此,“区块链”经常被误解为与比特币有着千丝万缕的联系。 比特币区块链还提倡区块链是一种虚拟化银行账本的数据结构,通过跟踪贷款和加密方式有效防止加密货币单位的双花。 因此,术语“数字分类帐”和“双花”与加密货币区块链相关联。

本质上,区块链是一种不可篡改的数据结构。 可以跟踪所有者之间传递的有价值的内容。 这里所指的“内容”可以是任何一种数字资产,例如数字货币、Word文档或微软Surface平板电脑序列号等。 事实上,只要一件物品由唯一编号标识,就可以在区块链上对其进行追踪。 区块链通过要求转移数字资产所有权而不是复制或共享来解决所谓的“双重支出”问题。 区块链技术的有趣之处在于,它不仅建立协议并执行交易规则,还使分布式网络中的节点能够自我监督整个操作,而这是在没有中央服务器或可信权威机构的情况下完成的。

区块链的核心组件

比特币区块链网络是公开的,任何人都可以随时参与。 但是,新的区块链产品/服务(例如 Azure 托管的区块链)可以配置为公共网络、专用网络或特权网络。

区块链虽然是去中心化的,但去中心化的含义需要进一步明确。 正如 Vitalik Buterin 解释的那样 (bit.ly/2tEUYyT),“去中心化区块链”意味着它们“不仅在政治上是去中心化的(没有任何监管),而且在架构上也是去中心化的(没有基础设施中心故障点),但它们在逻辑上不是分散的(有一个共同商定的状态,系统的行为就像一台计算机)”。 去中心化提供容错、攻击防御和合谋防御(稍后我将介绍工作量证明)。

要了解如何设计公共区块链,您需要了解:

一旦掌握了嵌套哈希链的概念,您就会理解区块链技术的基本设计。

加密散列

虽然单向加密哈希算法有多种变体,但通常选择 SHA-256 (bit.ly/29kkpft)。 这是一个单向哈希函数,最多接受 (264-1)/8

字节消息,返回一个32字节的哈希值(64个十六进制字符),十进制值范围为0到1.16*1077。

比特币区块的主要组成部分_哈比特币区块链_比特币一个区块多少币

只需调整字符串中的任何字符并重新计算 SHA-256 哈希值即可生成全新的哈希值。 (要进行实验,请转到 onlinemd5.com 并将文件或文本校验和类型设置为 SHA-256。)

SHA-256 算法总是在给定相同输入的情况下产生相同的固定长度输出。 对于区块链技术,使用 SHA-256 加密哈希的价值在于生成的值是唯一的,可以用作数字指纹和校验和。 此外,(作为惯例)单向散列函数无法解码。 以我名字的SHA-256值为例:

66BAC2902FA7F9B2FB17CC40AEF13EB6FD14696E729B8C09EA57C748FDC35580。 这是一个散列,所以实际上没有办法使用算法来反转我的名字。 (一种黑客技术是使用彩虹表,其中列出了普通字符串(普通密码)的计算哈希值 ,但这不是一种反转哈希的算法。为了抵御此类攻击,通常的做法是通过附加一个随机字符串(称为“盐”值)来装饰要散列的字符串。)

如果没有可用的 SHA-256 生成器,请参见下表,该表显示不同长度的字符串始终生成 64 位十六进制哈希值,并且对任何字符串的微小更改都可能导致完全不同的结果。

输入字符串 SHA-256 哈希值

62C66A7A5DD70C3146618063C344E531E6D4B59E379808443CE962B3ABD63C5A

08F271887CE94707DA822D5263BAE19D5519CB3614E0DAEDC4C7CE5DAB7473F1

M1

2D214CA69B86C255BE416D42CCA977A59B34A7492873105522C35015FAB806F0

M2

0892A10ECE1F933EE98F5D554601B28F8437801D1AA1B77799E4035DDCB6950C

哈比特币区块链_比特币一个区块多少币_比特币区块的主要组成部分

有时哈希是双重哈希的。 也就是说,使用第二轮 SHA-256 算法再次对第一个散列进行散列。 如果对上表中的值进行双重哈希,最终会产生下表中的结果。

输入字符串 SHA-256 哈希值

A5FCE7E78734EC317F83F9019C80FFAF2508689B06EFA02191495A7D21FECE9A

6F6DCF58526B0D29EE664A708A939B7CDAC124A6A8569FCACE46FEAD38868E2E

M1

6C5D08BE9FFBBABD24B5F19AFFE6590FD402D347A50B519A59D40E15DCC0A6CB

M2

B2307311CC5877D5A581EDC821F3BFD5F99EB4E3B1D1B4009D9545BCF07E2E1A

公钥加密

区块链的主要功能之一:追踪数字资产的所有权。 基础数字资产可能一文不值,也可能价值数百万美元。 因此,所有权测试必须确保所有者不能被冒充。 为了在数字领域进行此类测试,区块链利用 PKC,以便所有者可以对资产进行数字签名以证明所有权并授权资产转移。 与使用私钥加密和解密消息的对称密钥加密不同,PKC 使用非对称密钥加密。

由于数字资产所有权的精确验证算法对区块链至关重要,因此它们采用依赖于椭圆曲线数字签名算法 (ECDSA) 的高安全性公钥/私钥对生成策略。 ECDSA 的优势在于它创建的密钥较短,与常用算法数字签名机构 (DSA) 生成的相同长度的密钥相比,这些密钥在密码学上更安全。 用户可以在需要时使用软件程序生成加密密钥对。 用户必须保留私钥的备份,因为必须使用此密钥才能转移或利用存储在区块链中的数字资产的价值。 如果您只能访问私钥/公钥对中的私钥,则可以重新生成公钥,因为这两个密钥之间存在数学关系。 但是,不可能从公钥生成私钥。 也就是说,如果只备份一个密钥,一定要备份私钥!

比特币区块的主要组成部分_哈比特币区块链_比特币一个区块多少币

这些密钥通常以上述两种方式之一使用:

第一个用例(如下)是:您希望某人向您发送一条只有您可以打开的加密消息。 为此,将你的公钥提供给对方,让对方用这个公钥对文档进行加密,具体是通过软件程序的加密算法,生成密文(即消息的加密版本)。 然后,对方将只向您发送加密文本。 由于对方使用公钥加密文档,因此必须使用正确配对的私钥来解密文档。

image

图例:当您希望某人向您发送只有您可以打开的加密文档/消息时,请使用 PKC

第二个用例(下)是:想要加密消息并证明它确实是由您发送的。 为此,使用私钥对文本进行加密。 然后,将这个密文发送给其他人。 对方将使用您的公钥来解密文本。 由于只有您的公钥可以解密文本,收件人可以认为文本是用您的私钥加密的。 也就是说,除非私钥被泄露,否则文本是由您发送的。

image

图例:当你想向其他人发送加密文档/消息并证明它确实是由你发送时,使用 PKC

第三个用例是使用 PKC 通过数字签名过程证明数字资产所有权。 在此用例(如下)中,假设 Bill 已经编写了一份具有法律约束力的 Word 文档,他需要通过电子邮件将其发送给 Susan。 Susan 想确定她从 Bill 那里收到的文件副本确实是由 Bill 发送的,并且在发送途中没有被篡改过。 Bill 首先创建 Word 文档的 SHA-256 散列并将值记录为 H(W)。 接下来,他用他的私钥加密文档哈希,生成 Enc(H(W)),并向 Susan 发送 Word 文档(可选加密)和 Enc(H(W)) 值(这是 Bill 在文档 W 上的数字签名).

image

图例:使用 PKC 和加密哈希对文档/消息进行数字签名

Susan 根据她收到的 Word 文档副本重新计算 H(W) 值,并使用 Bill 的公钥解密 Enc(H(W)) 值(见下图)。 如果 Susan 计算出的哈希值等于解密后的 H(W) 值,Susan 可以断定 Bill 签署了该文档,并且她收到的副本与 Bill 签署的文档相同。

image

图例:使用 PKC 和加密哈希来验证文档/消息是否由预期方签署

哈比特币区块链_比特币区块的主要组成部分_比特币一个区块多少币

使用散列和 PKC,区块链维护数字资产所有权的交易历史。 交易数据对象相互链接,形成称为“哈希链”的数据结构。 它的工作原理是每条交易记录构成一条消息 (m),该消息由函数 (H) 散列并由所有者的私钥 (s) 签名。 (通常的做法是将“secret”的首字母“s”用作私钥,以免与表示公钥的“p”混淆。)这会产生签名 (sig):

sig = signature(H(m), s)

数字资产从一个所有者转移到另一个所有者后,新所有者在将其注册为哈希链上的新节点之前检查、验证并对其数字签名进行数字签名。 尽管不同区块链技术和版本的实现细节差异很大,但它们的基本概念都是相同的。 例如,如下图所示,Bill是数字资产的所有者,他使用私钥发起将数字资产转移给Susan。 苏珊的交易记录使用比尔的公钥来验证他的签名。 之后,Susan 使用公钥对数字资产进行签名比特币区块的主要组成部分,使 Susan 成为新的所有者。 这会创建一个新的交易记录,交易哈希链上的一个新链接。

image

图注:交易哈希链使用数字签名来转移数字资产所有权; 每个交易记录都保留一个加密的反向链接到哈希链中的前一个交易

这个交易哈希链是加密保护和防篡改的。 对事务 0 的任何更改都会导致 Sig0 发生更改,从而需要更新存储在事务 1 中的哈希以及哈希链上的每个后续事务。

图中的事务对象包含数据。 每笔交易中包含的数据因区块链实施而异。 因此,考虑到这一点,我已经抽象出底层数据,因为它的要点是:哈希链是一个加密链接的交易链,即由先前所有者的交易记录的哈希链接。 (在加密货币区块链中,每个交易对象都包含数字货币输入和输出的列表,以及时间戳和可选交易费用等元数据。这些加密货币输入和输出提供了财务分类帐的准确构建。模型所需的交易详细信息.)

默克尔树

一些区块链使用另一种类型的哈希链、二进制哈希链或 Merkle 树来捆绑交易。 一棵完整的 Merkle 树被称为“二叉树结构”,因为它从根开始在每一层都有两个分支,如下图所示。

image

图注:Merkle树是生成Merkle根哈希的二叉哈希树; 这种数据结构可以有效地添加叶节点并计算新的 Merkle 根,而无需完全重新计算

Merkle 树是通过计算每个交易对象中数据的 SHA-256 哈希来创建一系列叶节点(比特币区块链对每个 Merkle 节点进行双重哈希;双重哈希有助于万一在 SHA 中发现漏洞- 256算法,加强哈希结果中的加密值)。 Merkle 树需要偶数个叶节点。 也就是说,如果有一个奇数开始,约定是复制最后一个叶节点。 然后,将每对叶节点哈希在一起以生成新的哈希值。 在上图中,叶子 A 将事务 A 的哈希显示为: H answers: ; 叶 B 将交易 B 的哈希显示为相同数字的 HB。 这种模式继续应用于每个树级别,一直到最终的根节点。 根节点的哈希是树中所有其他哈希和的加密哈希和。 任何叶子节点中数据的任何变化都会导致重新计算的 Merkle 树根哈希值发生变化。

Merkle 二叉哈希树结构有一些优点:例如,它可以很容易地更新交易中的数据和计算新 Merkle 的根哈希,而无需从头生成整个 Merkle 树。 例如,如果交易 E(在上图中突出显示)发生变化,则只需为树中的每个级别向后计算一个新的哈希值,一直计算到 Merkle 根,这是很有效的。 因此,首先计算新的叶子哈希HE; 然后根据HE和HF计算HEF; 然后根据HEF和HGH计算HEFGH; 然后根据 HABCD 和 HEFGH 计算新的 Merkle 根哈希。 更新 Merkle 根哈希只需要 4 次计算,而从头开始生成 Merkle 树需要 15 次计算!

比特币区块的主要组成部分_比特币一个区块多少币_哈比特币区块链

生成区块链

要生成区块链(见下图),必须以某种方式将包含交易的二进制哈希链数据对象提交到所有人都可用的防篡改数据存储(注意这是一个公共区块链,网络上的任何节点都可以执行读取或对其进行写操作)。 由于 Merkle 树结构包含交易并且是防篡改的,它似乎可以用作区块链。 然而,存在几个问题。 Bill 必须信任作为他的数字资产转移请求代理的服务或网站,并且必须信任保持哈希结构的服务器才能将他的数字资产发送给 Susan。 如果没有中心节点来处理新的交易,或者没有中心化的权力来委托处理交易,任何节点都可以处理 Bill 的未决交易。 未经授权的节点或具有非常高处理能力的参考节点可以纵容无效或欺诈交易,这些交易可能会传播到可靠的节点。 为了解决这个问题,网络可以尝试随机分配一个节点来处理 Bill 的交易,但这再次集中了控制,并且需要相信随机数生成器确实在执行随机性。 为了防止这个问题,区块链使用了一种共识算法,如下所述。

image

图注:区块链由区块组成,区块又包含交易哈希树; 区块链上的区块链接回之前的区块,并通过工作量证明算法进行验证

共识算法:区块链技术通过遵循指定如何添加和维护块的协议,消除了集中式数据存储和信任授权的问题。 为此,他们强制执行区块链生成共识算法。 共识算法有很多种,这里将介绍工作量证明(PoW)算法的工作原理。

PoW 是基于这样一个事实,即网络上的一个节点需要通过产生费用和解决计算问题所花费的时间来证明其合理的意图。 为了让节点参与此类系统并遵守规则比特币区块的主要组成部分,网络提供激励(通常是金钱奖励)。 也就是说,节点运营商在向区块链添加区块时获得报酬。 为了赢得金钱奖励,节点必须在解决密码难题之前验证所有交易(以确保它们符合区块链的特定规则)。

如前所述,中央机构可以随机分配节点来处理新一批交易。 这种方法需要使用中央随机数生成器,它可能存在漏洞、被黑客攻击或被禁用。 然而,为节点提供谜题来解决可以产生预期的效果。 没有办法预先确定第一个解谜的节点,这就造成了网络节点的一定不可预测性。 不需要中心化的权威,这是区块链技术的关键创新之一。 我还提到区块链是去中心化的,因此提供了合谋防御。 由于 PoW 在计算能力上投入时间和成本,任何一个节点或一组节点几乎不可能在网络上串通并拥有优于其他对等节点的区块链生成优势。 (存在“51% 攻击”的风险,这表明如果一组节点最终拥有 51% 的计算能力,就会发生合谋;但使用 PoW 共识算法,这样的攻击是不可能的。)

为了构建交易区块,节点需要获取存储在网络上的未处理交易,并生成默克尔树来计算默克尔根哈希。 因此,候选块包含交易列表和块头,包括 Merkle 根哈希、当前时间戳和 PoW 难度级别(有时附加头数据)。 然后它必须解决 PoW 难题,这涉及计算双哈希的整个 256 位块哈希,然后找到 32 位数字随机数。 该数字可以与散列值连接以生成 288 位数字的散列,以便结果具有一定数量的前导零。 这个 32 位随机数介于 0 和 232 (4,294,967,295) 之间。 因此,通常的做法不是直接猜测 nonce,而是从 nonce 0 开始,生成 SHA-256 哈希,并确定它是否具有目标数量的前导零(即,生成的哈希值小于目标值); 如果否,节点将增加 nonce 值并重试。 如果节点在尝试所有随机数值后未能解决难题,它将重新计算块哈希。 这保证了生成不同的块哈希,因为块头中的时间戳包含在块哈希计算中。 节点可以随时选择不同批次的待处理交易添加到新区块(或添加自上次检查以来可能出现的新待处理交易),这会更改 Merkle 根哈希,并与时间戳一起更改新计算的块哈希。 每次重新计算区块哈希时,节点都会重新遍历超过 40 亿个 nonce。

随着时间的推移,网络上的一个节点将解决密码难题。 此时,它将新区块附加到其区块链副本的末尾(每个节点都维护一份区块链副本),并将新区块广播给网络上的所有其他节点,以便它们可以更新自己的区块链 复制它. 如果一个节点广播了一个新块,其他节点不会简单地相信新块是有效的,它们会通过验证块来向自己证明这一点。 为了进行验证,节点只需计算区块的 SHA-256 散列与 nonce 值的连接来验证 PoW 难题解决方案,并验证生成的散列是否包含由区块的 PoW 难度值指定的前导码数量。 零。

顺便说一下,在某些区块链上,协议会不断调整 PoW 难度值,以便定期将新区块添加到区块链中。 这种不断的调整是必要的,因为节点在网络中不断出现和消失,导致节点的平均计算能力总是在变化。 请注意,在 PoW 中,存在向区块链添加区块的动机。 因此,节点管理员通常会增强硬件以争夺奖励。 在比特币区块链上,难度值每 2016 个区块调整一次,以便以每个区块 10 分钟的平均速率继续添加区块。

有时会出现分支。 这是因为在大型网络中,新块的传播需要时间。 在传播过程中可能发生的是另一个节点解决了 PoW 难题,将新块添加到区块链副本,并在网络上广播区块链。 接收节点总是将有效区块添加到它们的区块链副本中,并且由于每个区块都以密码学方式连接到前一个区块,因此由两个不同节点发布的两个新区块将在链的末端生成指向同一区块的链接。 块的分支。 但没关系。 随着时间的推移,节点会在协议认为的“最长链”的末尾添加新块。 例如,对于给定的分叉,最长的链可以定义为具有最新块时间戳的链。 随着时间的推移,一个分支的长度将占上风,被遗弃(较短)的分支中的区块将被删除,它们的交易将返回到未处理交易池中。

总结

本文描述了如何在点对点节点的去中心化网络上构建由加密链接块组成的公共区块链,每个节点都有自己的加密链接交易哈希链。 介绍区块链技术的基础知识,尽量不关注任何单一的实现,而是关注它们共有的一些更典型的技术特征。 如果你想进一步探讨这个话题,建议选择一种区块链技术(如比特币、以太坊或瑞波币)并尝试掌握其具体实现的细节。