区块链是如何运作的、是如何防止被篡改的?
关于加密货币在能源使用的讨论有很多方面,需要几篇文章来涵盖(尽管我的一位同事确实对争议进行了深入的探讨),但可以肯定地说,区块链在环保方面的确存在很大负面隐患。
部分原因是一种称为“工作证明”的系统,许多区块链(尤其是加密货币)出于安全和信任目的而采用该系统。如果区块链使用工作量证明来验证区块,那么它需要大量的计算能力来完成交易。由于计算机需要能量来运行,交易最终会白白浪费大量能量。
值得注意的是,它不一定是这样:区块链本身并不需要消耗大量能源,而且还有工作量证明的替代方案。我们稍后会解释为什么会这样。但是,无论如何,目前人们熟悉的大多数区块链技术应用程序,如比特币和以太坊,都使用工作量证明。
要理解为什么工作量证明模型需要计算机如此努力地工作,我们首先必须了解区块链技术的其他部分是如何运作的。
区块链一开始是一个完全空的列表,根本没有任何信息。然后,创建者将创建一个称为创世块的东西,它只是链中的第一个块。与其他所有块不同,它不指向任何东西。随着时间的推移,人们可以将信息添加到该列表中——但是,这些信息的样子取决于区块链的用途:如果它是一个加密货币区块链,它将是一堆交易。如果它是一个用于跟踪 lettuce 的区块链,它可能看起来有点不同。
如果您必须想象区块链的实际外观,请想象将一堆收据订购到盒子中,这些收据都绑在一起。每隔一段时间,就会添加一个新盒子,其中包含自上一个盒子添加到链中以来收集的收据。
在这个例子中,收据是交易,盒子是区块。在交易发生时对其进行管理,然后再将其发送到区块链,是一个计算机网络,通常称为节点,这些计算机运行一种特殊的软件,用于相互通信。
当用户进行任何类型的交易或更改时,他们都会向整个网络发送消息,节点正在监听这些消息。让我们使用一个虚构的加密货币,完全随机地命名为 MitchellCoin。如果我想向某人发送 5 个 MitchellCoin,我会将其广播出去。
当节点看到消息时,他们会对其进行一些检查,他们会检查以确保它是由我进行数字签名的消息没有被篡改,以确认冒充者没有花我的钱。实际签名的制作过程是一个相当复杂的过程,但最终结果是一条可验证由特定人发送的消息,几乎不可能伪造(与真实签名不同)。这可以防止不道德的人错误地声称其他人向他们发送了 MitchellCoin。节点还将检查以确保交易有效(例如,通过检查我实际上有五个 MitchellCoins 可以花费,或者向区块链添加一批生菜的人是否被授权这样做),但交易不会立即完成,他们必须等待下一个区块被添加到链中,这个时间段可能因区块链而异。在一个区块被创建并成为区块链的一部分之后,其中包含的所有交易也将成为区块链的一部分,竞争创建该区块的过程称为“挖矿”。
区块的开采方式取决于区块链运行的模型,我们将在稍后介绍。在挖矿节点创建一个区块后,它将向全世界广播它。其他节点将检查以确保它是一个有效的块,然后将其添加到自己的分类帐中。可以同时创建多个区块,但网络最终会在一个区块之上构建比另一个区块更多的区块,从而使该区块成为官方链的一部分。
区块链有一些功能可以防止篡改——散列法(Hashing)或哈希法。
自 1950 年代和 60 年代以来,散列是一种加密技术,对各种计算都必不可少,区块链使用它来防止篡改。在区块链中,散列基本上充当唯一标签,防止某人更改块中的数据,甚至交换假块。
散列可让你从任何数据中创建一串字符,你将一堆数据放入(整个区块)中,然后得到一个更小、唯一的数据。为了确认没有被篡改,每个块都存储了它之前的块的哈希值。这样,如果哈希存储的两个位置之间存在差异,您就会知道出了什么问题。
哈希有几个重要的属性:
1、给定相同的数据,它们将始终相同。
2、如果数据的任何部分发生变化,即使是最轻微的变化,它们也会完全改变。
3、很容易再次检查给定的散列是否来自给定的数据,但很难判断仅从散列中给出了什么数据。
举一个简单的例子。假设当我们通过哈希算法运行“区块链”这个词时,我们得到了“ef7797”(实际上,哈希要长得多)。如果我们运行“区块链”,只有一个字母不同,我们会得到“8e809e”。
如果我们想确保我们正在查看最初经过哈希处理的相同数据,只要我们使用相同的程序来创建我们的哈希值就很容易了,通过散列程序运行“区块链”,无论是谁在做总是会产生“8e809e”。但是反过来需要很长时间:如果我想知道有人为了得到“9ed142”而在散列程序中放入了什么,我只需要猜测,直到找到产生那个的特定单词哈希。
链中的每个区块都包含前一个区块的哈希值,这正是哈希算法在给定区块数据时所吐出的内容。如果有关该块的任何内容发生更改(例如,其中的交易,甚至整个块本身),则该块的哈希值都会更改,从而破坏链,包含前一个区块的哈希值的下一个区块会说“我已改变,有事!”
所有这些加起来构成了一个系统,在该系统中,任何查看提交给链的新块的人都可以知道在任何时候都没有任何更改。如果有,则更改后每个块的哈希值必须与当时的分类账不同。
评论