比特币是如何运作的?

在没有独立监督的情况下,匿名个人之间的交易怎么可能被信任?欢迎来到比特币的世界……
2018年3月20日

2008年金融危机之后不久,一篇学术论文发表,详细介绍了一种新的网络货币的计划。这种电子现金将取决于两个原则:首先,它将保证其用户的匿名性——交易不会被追踪到特定的个人。其次,它将完全独立于金融实体或银行等监管机构运作。但是,在没有独立监督的情况下,匿名个人之间的交易如何可信呢?欢迎来到错综复杂但令人满意的比特币世界……

进行比特币交易

在基本层面上,比特币只是一种网络货币单位——很像虚拟的美元或英镑。因为它不符合传统的银行系统,比特币也被称为“加密货币”。任何人都可以购买比特币,比特币用户之间可以自由发送和接收比特币。在用户之间转移比特币的过程称为“交易”。交易背后的计算过程可以告诉我们很多关于比特币网络内部运作的信息:

开始思考交易的一个简单方法是检查当一个比特币从一个人(所有者1)转移到另一个人(所有者2)时会发生什么。每个比特币用户都有一个“比特币钱包”(把它想象成一个银行账户),它有自己特定的“私钥”(类似于网上银行账户的密码)。私钥可以用作交易来自特定钱包的证明,因为钱包身份与其私钥在数学上是联系在一起的。私钥通过一个单向函数链接到公钥(假设这是一个银行账号):公钥是从私钥计算出来的,但实际上不可能反向工作并从公钥派生出私钥。公钥是可以共享的——这就像给别人你的账户细节一样。为了将比特币转移给所有者2,所有者1用所有者2的公钥标记交易(让我们称之为交易1),并将其广播到比特币网络-现在它可以添加到区块链中。交易可能是公开的,但比特币(现在称为“未花费的交易输出”)只能由所有者2花费,因为他们持有公钥派生的私钥。

当所有者2想要通过将比特币转移给所有者3来花费比特币时,他们必须发起一个新的交易——交易2。在此过程中,比特币将被重新标记为交易2的“交易输入”和交易1的“支出交易输出”。为了发起交易,所有者2必须提供两条信息:第一,他们的公钥,第二,一个“签名”。此签名包含有关前一个交易(事务1)的信息以及所有者2的私钥的修改版本,该私钥可以安全地广播到网络上。通过这种方式,所有者2实际上是使用他们的“银行账户”的“密码”来访问他们的比特币,从而进一步消费。此外,通过他们的签名,所有者2提供了他们如何获得他们正在花费的比特币的信息。所有者2通过使用所有者3的公钥标记交易来确保所有者3是比特币的接收者(正如所有者1在交易1中使用所有者2的公钥所做的那样)。交易现在可以公开。一旦交易2是公开的,就可以通过计算来验证签名中所有者2的私钥的公开修改版本确实来自于用于创建所有者2的公钥的私钥,当比特币最初从所有者1转移到所有者2时使用的私钥。如果是这样的话,交易2是有效的,因为所有者2是被转移的比特币的确认所有者。比特币现在被标记为交易2的“未使用交易输出”。 At this point, Transaction 2 is eligible be added to the blockchain. Crucially, because Owner 2 has included information about the original transaction (Transaction 1) in their signature, transaction 2 will contain information about transaction 1. When Owner 3 repeats the process by transferring the bitcoin to Owner 4, the code for the transaction will contain information for transaction 2, which in turn contains information for transaction 1. This creates a traceable chain of transactions, all the way back to the creation of the bitcoin.

双重支出问题、挖矿和区块链

由于交易的建立方式,我们有一个很好的方法来知道比特币“存在”,通过跟踪它的“祖先”。我们还可以验证发起交易的人是要花费的比特币的合法所有者。然而,这并不能阻止比特币的所有者试图“双重花费”它,换句话说,在多个交易中使用它。如何预防这种情况?由于所有比特币交易都是公开的,因此可以检查只有未使用的交易输出被用作交易输入。如果使用了已花费事务输出,则事务无效。为了使其发挥作用,必须有一个可靠的比特币之前是否被花费的记录。这就是区块链的用武之地。

正如已经提到的,交易发生的那一刻,它可以被广播到比特币网络。当这种情况发生时,交易可以被合并到曾经发生的每笔比特币交易的“日志”中。这个日志被称为区块链。为了将交易包含在区块链中,必须证明公钥和签名彼此对应(以证明比特币所有权),并且交易输入是先前未花费的交易输出(以排除双重花费的可能性)。签名和公钥之间的关系可以使用专门的软件进行验证。为了确保比特币确实仍未使用,可以扫描区块链以查找先前提到的当前交易输入。如果满足这两个条件,交易就可以被添加到区块链中。

上述系统需要工作:交易的验证及其添加到区块链中都依赖于比特币网络成员(即矿工)的工作。矿工在功能强大的计算机,甚至是被称为节点的计算机组上运行这些过程所需的软件。作为对他们努力的奖励,矿工每记录一组交易(“区块”)就会获得12.5比特币。这个奖项每四年左右减半一次,以确保比特币以受控的方式进入流通,最多可达2100万比特币(目前约有1100万比特币在流通)。矿工还可以获得处理交易的“费用”(以比特币计算)。

那么,如何将交易添加到区块链中呢?最容易想到的是创建一个单一的起始“块”。第一步是矿工将有效的交易分组到块中——这或多或少是任意完成的,并且提供更高处理费的交易更有可能更快地被包括在内。一旦完成,矿工就会在区块中创建数据的“哈希”。哈希是一个单向函数,它以一种或多或少随机的方式将数据转换成定义长度的单个数字和字母链——哈希不能从输入数据中预测。但是,即使稍微改变输入数据,也会以一种不可预测的方式完全改变哈希值。第一个块(block)的散列形式区块链的第一个链接,可以称之为散列A为了第二块(block B)交易包括,必须创建一个散列的第二块(散列B)。这两个散列,和一个额外的随机数nonce,然后组合成一个新的哈希散列AB。当一个后续添加块的散列C,它与哈希散列AB和现时标志形成散列ABC,等等。就像比特币本身一样,每个区块都包含了之前区块的信息。这使得系统安全:如果不改变包含它的块以及每个后续块,就不能改变任何事务。虽然这并非不可能,但这需要付出的努力应该起到威慑作用。

工作量证明原则和赌徒的毁灭

既然任何人都可以将交易块添加到区块链中,那么是什么阻止人们添加虚假交易块来索取比特币奖励呢?答案很简单:添加区块是一项艰巨的工作。为了接受新添加的区块,比如前面例子中的区块B,哈希AB必须满足某些集中设置的标准。目前,标准是哈希开头的零个数。这就是nonce的由来:通过修改nonce,矿工可以改变哈希AB,使其以所需数量的零开始。然而,没有办法计算出nonce需要是多少才能给出所需的哈希值——解决方案只能通过反复试验来找到。任务的难度(对应于哈希开头的零的数量)每隔一段时间就会调整一次,因此平均需要大约10分钟才能解决。这种调整意味着,尽管计算机变得越来越强大,但添加一个区块所需的工作量大致相同。首先找出解决方案的矿工可以将他们的区块添加到链中,并获得12.5比特币的奖励。这个过程需要时间和计算能力,被称为“工作量证明”系统。 Such systems are designed to prevent denial of service attacks, in which a service is essentially 'spammed' with malicious requests, to the point that it can no longer deal with legitimate reqests. They also intend to deter hackers from adding or modifying blocks:

从理论上讲,由于添加一个区块需要做大量的工作,单个恶意攻击者试图添加一些“不诚实”区块的速度将比网络上诚实操作的每个人都要慢得多,因此无法成功攻击网络——为了实现这一点,他们必须创建他们的不诚实链,而不是网络上其他部分扩展其诚实链。修改区块也是如此:修改区块后的区块链必须以比诚实链增长更快的速度进行修改。这可以被建模为“赌徒破产”问题:随着黑客越来越落后,他们接管网络的可能性越来越小。

比特币管用吗?

从理论上讲,比特币网络是绝对无懈可击的:系统根本不会被欺骗。然而,在现实生活中,情况要复杂一些:该网络已被黑客入侵多次,价值数百万美元的比特币已在此类攻击中被成功窃取。此外,必须说的是,比特币只有在用户相信它有价值的情况下才有价值——这使得它成为一种不稳定的投资,就像最近几乎一夜之间的繁荣和崩溃一样。最后,在比特币网络之外,一个人的比特币仍然没有什么用处:目前,似乎不太可能有人用加密货币支付每周的杂货……

评论

添加注释