主页 > imtoken官方苹果下载 > 比特币的信任系统是如何建立的

比特币的信任系统是如何建立的

imtoken官方苹果下载 2023-05-19 07:47:36

比特币是一种去中心化的数字货币,它基于信任系统并基于诸如椭圆曲线的各种属性的密码学难题。 在不深入研究比特币的数学方面的情况下,正确理解本文的关键思想不需要对密码学有深入的了解。 但是,您应该对私钥和公钥有基本的了解。

“我在哪里签字?”

每次您要授权付款时,系统都会要求您进行某种形式的验证。 验证的目的是一旦您代表您批准了交易,它是不可逆的。 当然,在某些情况下,您可能希望添加一个条款,如果不满足某些条件,则付款必须在另一个方向进行托管。 但一旦交易获得授权和签署,就成了定局。 唯一的问题是:你能完全确定它确实得到了它所代表的人的授权吗? 使用签名来识别用户的问题是一个老问题。 曾经有一段时间,信件都用昂贵的徽章封起来,以证明这封信确实来自某个权威。

密封字母和应用字母的做法已被 PGP 密钥取代。 PGP 密钥很有趣,因为在某些方面它们与比特币密钥非常相似。 让我们花点时间看一下 PGP,然后看看比特币是如何建立在它之上的。

比特币的信任系统是如何构建的

有两种使用 PGP 密钥的方法:

1. 用于加密和解密电子邮件。 如果有人拦截了电子邮件,他们将无法破译邮件内容。

2. 签署信息。 如果有人拦截了它,他们就能够验证消息的真实性。

比特币的信任系统是如何构建的

PGP有效地取代了密封装置。 过程如下。 首先,必须生成一对公私密钥。 现在你写电子邮件。 一旦完成,您就可以使用您的私钥和电子邮件,通过 PGP 签名程序运行它,然后出现一个签名。 这个签名只能由持有私钥的人生成。 你怎么能确定? 您获取消息和签名,并通过提供发件人公钥的 PGP 验证器运行它。 这个程序会告诉你这封电子邮件是否真的是由它声称的人写的。 唯一需要回答的问题是:如何获得公钥? 这是一个有趣的问题,因为密码学不会为您提供任何机制。 它完全掌握在用户手中。 通常,在 PGP 的情况下,用户将他们的公钥上传到某个中央服务器,以便任何人都可以获取它。

比特币使用非常相似的公钥加密过程。 但是,比特币程序不需要对消息进行签名,而是允许您对交易进行签名。

比特币交易是如何签名的?

现在您了解了 PGP 加密的工作原理,您可以开始考虑比特币签名了。 虽然这有点棘手。 天真的想法是,当你创建一个交易提议从你的账户中扣除 X 数量的比特币并将其转移到 Y 时,你只需要签署提案。 但这有一个问题。 如果你只是创建一个交易说你想转移资产,谁来验证你是否真的有钱? 这将需要一些中央机构来检查。 这不是比特币的设计目的。 因为权力最终掌握在用户手中。 比特币提供了一个绝妙的解决方案。 这个想法是这样的:如果你在过去的某个时候收到过比特币,你只能拥有它们。 这样,只有持有私钥的人才能申请一笔交易。 因此,比特币签名有双重目的:

· 它验证你是交易的真正创建者,并且

· 你实际上拥有你将要转移的比特币。

后者是最基本的。 我们将在其他帖子中看到这如何构成钱包(或帐户集合)的基础。 顺便说一句,以太坊以稍微不同的方式引入了隔离账户的概念。 但比特币只是一个交易链。 所以对于所有权,你必须扫描交易链并花费它们,你必须解锁它们并在交易中使用它们。

旁注:你可能想知道为什么以太坊有更好的设计,因为它允许创建账户。 这取决于用例。 设计的简单性使系统保持流线型,比特币确实起到了作为价值储存的作用。

每笔交易都由输入和输出组成。 每个输入都包含一些以前的交易。 每个输出都包括资金发送到的目的地。 当你签署交易时,你签署了输入和输出。 通过签署您的输入,您实际上是在说您是这些代币的真正所有者。 通过签署输出,您同意您确实想要将这些令牌发送到指定地址。 为了保持资金流动,一笔交易的每笔输出都被用作另一笔交易的输入。

比特币的信任系统是如何构建的

作为输入消耗的输出

足够的理论。 让我们看看真正的交易。

比特币的信任系统是如何构建的

这是通过网络传输的实际交易。 我们无法从中学到任何东西。 我们怎么解释呢? 一个词:协议。

协议是定义交换数据的标准方法。 从计算机网络的交易协议规则中,我们可以看出交易是如何构造的。

比特币的信任系统是如何构建的

交易协议

比特币的信任系统是如何构建的

输入交易协议

比特币的信任系统是如何构建的

输出交易协议

让我们按协议分解交易。

比特币的信任系统是如何构建的

包含元数据信息。 例如,它告诉程序这是一条事务性消息。

版本

允许向后兼容。 如果协议更新了新字段,旧交易不应该变得无法识别。

事件见证人

这是作为隔离见证更改的一部分引入的区域。 我们改天再见。

参考交易

交易仅包含对正在使用的先前交易的特定输出的引用。 它使用交易哈希和输出索引号(从 0 开始)的组合。 如果需要,程序可以使用它的散列来获取整个交易。 使用索引号,它知道将哪个输出用作输入。

要计算交易哈希,您需要连接交易的完整十六进制表示,并计算该字符串的 SHA256 两次。

顺序

看。

价值

发送的金额(以聪表示)。

锁定时间

解锁此交易的区块号或时间戳。

公钥脚本 (scriptPubKey)

交易的目的地。 隐藏在此脚本中的是收件人的公钥哈希,以十六进制表示。 要获得对应的比特币地址,只需将此十六进制转换为 Base58。

签名脚本(scriptSig)

与 scriptPubKey 类似,scriptSig 包含授权交易的签名。 除签名本身外,所有部分均已签名。

现在我们知道了编码规则,让我们来解码它:

有一个交易输入,交易 hash2936ee6a0db4e4901988503bb6e966128dd5fa01bcf08451f78a1d5b08dbbd6 的第 0 个索引,以及两个输出。 其中之一是 0.05 BTC,位于 3swtkzdetsfxyjqgdwtvpqulv64rvktbzthukvxxre4th6tsgxnrg

剩余33.54 BTC,地址为3q7mcidryx4d9pefdeqckuq2iug4i4efb8buho7gflckepynwkr4h。

您可能已经注意到,您不是简单地调用 publickey 和 signature,而是调用 publickeyscript 和 signaturescript。 这是一个非常强大的概念,我们将在另一个时间深入探讨。 但我会给你留下这样的想法,即有时你想创建一个可编程事务,以便它仅在满足特定条件时执行。 例如,如果您发现刚购买的商品有问题,您可能想要退货。 或者,也许您的经理想要批准您所做的每笔交易。 该脚本支持有趣的用例,并且正在进行进一步改进脚本的工作。

交易是比特币去中心化点对点电子现金系统的关键组成部分。 公钥密码术确保没有人可以拿走你创建的交易并更改它,这样比特币现在的地址与你打算将其发送到的地址不同。 它还确保私钥所有者以外的任何人都无法访问发送给他的资金。

简而言之:交易是不可逆转且无可争议的。 要将先前交易的输出用作新交易的输入,您需要私钥。 这允许您签署消息。 要将资产发送到帐户,需要他们的公钥。 交易是比特币系统的核心特征之一。

但这并不是信任系统的全部。 如果我创建一个交易并广播它,然后快速创建另一个交易并广播该交易会怎样? 谁来废除其中之一? 一般而言,世卫组织确保系统内的所有交易均公平进行。 如果比特币需要一个实体来检查一切是否公平公正,它就不会被认为是去中心化的。 在本文的第二部分,您将了解如何在没有中央权威的情况下确保一切顺利进行。

上面探讨了如何对交易进行加密密封,以便除了所有者之外没有人可以对它们做出 j 决定。 我们简要讨论了这些交易如何通过网络提交并广播到整个网络。 我们还讨论了接收方如何获取这些交易并在后续交易中使用它们,从而创建一个序列,在该序列中,先前交易的输出用作新交易的输入。

创建交易后,您需要将其记录在某处,以便稍后参考。 这需要一个可以记录所有交易的存储模型(也称为分类帐)。 为什么我们需要以前的交易? 因为为了验证一笔交易是正确的,没有欺诈,你必须从头开始追踪(从中本聪的账户开始)。 我建议你暂停一下,想想为什么你需要这样做? 有没有更有效的方法来处理这个问题?

这显然是一个繁琐的过程! 每分钟发生数百万笔交易比特币系统,您不可能花费所有计算资源来试图弄清楚交易的结构。 这里有一个简单而优雅的方法来解决这个问题。 将一组交易存储在一个块中,并将这些块链接在一起。 而不是在接受的个别交易上加盖戳记。 这样,在检查一笔交易是否确实是正确的、没有欺诈的时候,只需要拿之前引用的交易和它的区块,进行验证就可以了。

这总结了比特币的存储模型。 但是怎么沟通呢? 区块链中有不同的角色——每个角色都有自己的一组角色。 一些正在向区块链添加块。 有些只是将块传递给其他块——确保所有块都被考虑在内。 有些正在创建/传输实际交易。 有些只是验证这些交易。 有些只是监视区块链上发生的活动。 但是,这一切是如何在没有外部影响的情况下以自我维持的方式发生的呢?

在我们深入研究理论之前,我想介绍一下系统中的一些关键参与者。 稍后我们将扩展其目的。 这些参与者(更具体地说:节点)可能以某种形式重叠,但在概念上是独立的实体。

钱包

钱包(也称为简单支付验证节点)有两个功能:

1.需要扫描区块链,看哪些交易是他的

2. 它需要创建广播到网络(并最终被挖掘)的交易。

种子

在任何时刻,每个节点都连接到其他几个任意节点; 形成点对点节点的网格状结构。 然而,为了发现其他节点,一个节点必须首先连接到一个“种子”节点——这会引入其他节点。

矿工

矿工将区块放入区块链。 他们汇总所有未确认的交易; 按挖矿费(最高)对它们进行排序,并将它们添加到区块链中。 然后将这个新挖掘的块广播到网络的其余部分。 简而言之,矿工的工作就是将交易转化为区块。

中继器

中继器只是监视活动。 他们可以判断网络的健康状况; 参与消息传递; 或查询区块链以获取其他统计信息。

在上面的讨论中我们提到,对于一个带有密码签名的交易系统,仍然存在滥用该系统的可能。 如何保证加入区块链的交易不被篡改? 如果一个顽皮的演员开始用不正确的交易/消息轰炸系统怎么办? 如果有人同时发送 x BTC 给 A 和 x BTC 给 B 会发生什么? 哪一个有效? 如果矿工接受两笔不同的交易怎么办? 节点之间如何协调网络变化? 可以归结为一个问题:制度是如何监管的?

这些都是加密保护的、无需信任的网络中的难题——从某种意义上说,任何一方都不能危害生态系统。 所有节点必须遵守网络规则,如果有异议,一组节点可以对当前区块链进行快照;

提议的比特币解决方案中的一个关键概念是形成明确定义的块顺序。 如果你对区块进行了排序,并且所有节点都同意,那么同一笔交易不可能在区块链中出现多次。 一种简单的方法可能是简单地向块添加索引 (1, 2, 3...)。 更好的方法是添加时间戳而不是数字,因为时间戳还提供有关何时创建块的附加信息,然后每个块都可以引用以前的时间戳(假设每个时间戳都是唯一的)。 我们的系统仍然存在一个明显的问题。 你能看到它是什么吗?

任何人都可以随时创建一个区块,并且可以用几十个区块向网络发送垃圾信息。 这将导致网络瘫痪,比特币将完全无法使用。 比特币白皮书中提出的解决方案如下:在向区块链添加一个区块时,要求矿工解决一个密码学难题并将得到的哈希值添加到该区块中。 谜题的设计方式很容易验证它是否已正确解决,但如果事先不知道答案就很难解决。 此外,比特币网络还可以定期调整这个谜题。 例如,2019 年初,挖矿难度比两年前增加了 1800% 左右。 这样做是为了抵消矿机哈希能力的上升并保持系统平衡。 当然,如果矿工没有动力去挖掘这些交易比特币系统,那么所有这些工作都将毫无意义。 这就是为什么所有交易都要收费的原因——费用由矿工承担。 矿工还将获得一些 BTC,作为继续挖矿到 2140 年的额外激励。这项额外工作产生的哈希值也用于排序; 而不是依赖时间戳。 但是,我们仍然在块上使用时间戳,因为它们为我们提供了有价值的信息。

到目前为止,我们有一个带有时间戳、受垃圾邮件保护的链式块,其中包含看起来相当可靠的交易。 让我们进一步测试它。 矿工有可能恶意行为吗? 例如,他能否在一个从未有人请求过的区块中引入一笔交易? 如果两个不同的区块包含两个不同矿工几乎同时产生的同一组交易怎么办?

比特币的信任系统是如何构建的

这是两个不同的问题,但值得探讨。 为了解决第一个问题,我们需要介绍一下比特币区块链如何巧妙地处理哈希。 哈希值是固定大小的数据,用于确保某些输入的完整性。 首先,我们计算一个区块中所有交易的哈希值。 然后,我们使用称为 Merkle 根构造的技术计算根哈希。 这个哈希值可以看做:所有的哈希值。 简单来说,根哈希保证了一个区块中所有交易的完整性。 矿工或中继者不可能引入不属于原始区块的交易,因为这会破坏整个区块的哈希值。 太好了,那么同时生产多个区块呢?

这有点复杂,因为比特币论文没有给出具体答案。 相反,它被留在了一场机会游戏中。 不幸的是,有人必须输掉这场战斗。 让我们画一幅画。 假设中国矿工 X 和美国矿工 Y 在他们的区块中都包含交易 T。 x 产生区块 b1,生成的区块链是 [. .. a→b1],而 y 的区块链看起来像 [. .. a→b2]。 这两个块被广播和转发,直到最终 74% 的节点知道一个区块链 [。 .. a→b1],而 18% 的人知道区块链是 [. .. a→b2]。 这两个区块链似乎都是有效的,尽管是矛盾的。 现在,德国的矿工 Y 将区块链视为 […a→B1],他制作了另一个区块 C 并广播了它。 他的范围是94%的节点。 所有之前处理区块链 […A→B2] 的矿工,现在看到这个新区块链 […A→B1 C],他们将决定放弃以前的链并用最新版本取而代之。 如果他们不这样做,并继续使用旧的挖矿链,他们就有可能将开采的区块分给大多数人。 最后,最流行的区块链版本被认为是标准版本。 这就是为什么通常建议等到 6 个区块之后再接受交易,因为区块链的状态可能会发生变化。 作为一名矿工,你希望能够访问尽可能多的节点,否则你所有的努力都有可能付之东流。 另一方面,矿权的统一也给比特币网络的去中心化带来了风险。 如果一群矿工获得 51% 的算力,他们就可以有效地分拆出他们最喜欢的区块链。 这是对比特币区块链的真正威胁,目前没有任何安全措施来确保未来不会发生这种情况。 这种观点的反对者认为,这是极不可能的,而且对所有相关人员都是有害的。

垃圾邮件保护(工作证明)与区块链分叉和最终合并相结合意味着我们应该在交易广播后等待一段时间,然后才能有足够的信心说它已经在区块链网络中持久存在。 通常,开采一个新区块需要 10 分钟。 如果我们等待 6 个区块,我们的交易将被深埋在账本中,我们可以非常自信地说交易已经完成。 但是没有人喜欢等一个小时喝咖啡。 这是比特币的瓶颈。 这项技术不能用于日常使用,但它导致了互联网货币的发展。 请记住,比特币本身就是创建虚拟货币的各种尝试的结晶。 所以,在我看来,说技术已经达到顶峰是不正确的。 有很多改进建议。 下一个版本的加密货币可能会利用比特币 (Bitcoin, et al) 提出的概念,同时处理当前系统面临的问题(例如波动性和交易速度)。