比特币的另类解释之表情包·中篇

本文翻译至Tess RinearsonMaking Money Bitcoin Explained (with Emoji), Part 2,该翻译和发布已获得原作者允许。由于本人能力和时间有限,翻译如有纰漏或不妥,还请见谅。若对内容和翻译有任何建议或意见,欢迎交流。


第一章,我们了解到了比特币是一种去中心化的货币,不由任何政府和金融财团发行和管理。另外,我们讲述了哈希的基本概念。现在我们一起来看看比特币矿工是如何利用哈希来赚钱的,以及比特币如何利用密码学来保证其被信任,唯一和不被复制,还可以完全且不可逆的转账。


比特币,像美元一样,价值波动。即使价值波动,人们依旧相信货币。
当美元有黄金保障时,人们相信美元因为它可以换真金白银。现在人们相信美元因为相信美国政府,也相信政府保障的银行。
比特币生来值得被高度信任,并不是因为背后有黄金或政府,而是依赖数学,确切的说是两种技术的智慧结晶:哈希和公钥加密。

哈希和比特币区块链

比特币区块链是每笔比特币交易的账簿。它是一个区块序列,每个区块包含一组比特币交易。你可以把区块链想象成一系列的包裹,每个包裹装着十分钟内的交易记录。

你也可以想象这些包裹一个挨一个堆起来,最早的交易记录区块在最下面,而最新的则在最上面。挪动这个堆中的任何一个块,这个块之上的所有块就会倒下来。这让篡改很容易被发现。
每个块都有一个唯一的哈希,一个很大数字的指纹,用十六进制表达的话就是一段毫无规律的字符串。比如,某一个块的哈希可能是“00000000003e95b0ac78cb961d0“。
为了我们的讨论更加简单明了,我们用表情包代替大数字来表示哈希。我们假设第一个块的哈希是⚽️ (一个足球),第二个块的哈希是🐙(鱿鱼),第三个块的哈希是🌂(雨伞)。这个用表情包哈希表现的区块链看起来就是这样的:

还是之前的场景,伊丽莎白转给我5块钱的比特币,然后我在想转给你。我转账的这条记录会和其他新增区块里面的交易记录一起加入到区块链中。区块链中的每个块都能确定在序列中的位置因为它包含了前一个块的哈希值。换句话说,第一块不仅包含了一组交易记录,还有前一个块的哈希值(即🐙)。
假设比特币系统刚刚计算了区块 📦3的哈希值🌂。一旦我付给你5块,比特币网络就把我们的交易记录在下一个区块。我们称这个新的区块为📦4,它暂时还没有哈希值——现在这被标记为一个问题。

有趣的部分就来了。被称为“矿工”的强劲的计算机通过计算来把📦4加到区块链。第一个成功计算出这个新块的哈希值即为胜出,赢家可以获得12.5比特币作为奖赏(这个值未来会不断缩小)。
这就是新的比特币是如何被挖掘的。一旦一个哈希值被成功得计算出来,它将立即广播给所有矿工。其他矿工可以校验这个值,把它加入他们手上区块的副本,然后再比赛寻找下一个区块的哈希值。
哈希计算很简单。笔记本电脑都能在一秒内计算出成千上万的哈希值。
然而在比特币网络,寻找找一个正确的哈希值平均花费矿工们十分钟,但是因为这不仅仅是计算哈希值。比特币网络要求哈希值非常非常小——和其他可能的哈希值比起来,这样让寻找一个合适的哈希值就变的极度繁琐了。哈希值可能是一个大到叹为观止的数字。和所有可能的值比起来,一个万亿级的数字也算小的了,就像地球在宇宙中一样渺小。
矿工们想要找到一个不大可能的小的哈希值,唯一方法就是一遍又一遍的重试。每次尝试都不一样。虽然矿工不能变化哈希的计算方式,但他们可以改变计算的内容。
矿工们为之求助于叫“临时变量”的东东,那就像上篇里面小狗眼睛上的一个像素的黑色跳蚤。

回想一下,添加一个像素就让小狗照片的哈希值截然不同。对数字内容做一丁点儿的修改,也会使之哈希结果大不一样,且不可预测。
临时变量是盲目的猜测。在比特币区块中添加一个数字,经过尝试和错误的工程,以期望这个数字可以帮助计算出最后胜出的哈希值。矿工把这个区块所有的交易记录,加上前一个块的哈希值,再加上一个临时变量,然后计算哈希。每个矿工尝试不一样的临时变量,希望区块中加入它后可以产生一个符合条件的小的哈希值。事实上,成功的矿工也许需要尝试数百万个不同的临时变量。
如今,一般需要经过一千万亿尝试才能找到一个临时变量产生一个成功的哈希。因为有非常多的矿工,并且都在使用相当强悍的计算机,这样每十分钟会有一个胜出者。如果平均时间变得少于10分钟,比特币网络会自动通过要求更小的哈希值来加大运算难度。
金子值钱是因为金子是稀有金属,一个合适的哈希变得值钱也因为它是一个稀有的数字。这个数字的质量(小)让它变的很罕见。矿工简直是乱猜,通过千万亿计的猜测,期望成为第一个碰到一个数字(临时变量)可以用来生成满足比特币系统严苛条件的哈希值。比如,比特币系统的要求可能是要求哈希值要小于0000000003e95b0acc32ac089222。赢得这个挖矿的策略就是有足够强大的计算机能力来做非常多的尝试。
比特币网络要求哈希值小于某特定的大小。回到我们的表情包,让我们把这个限制想象地更友好一些:比如,我们说网络要求哈希值必须是一种动物。在矿工的第一次尝试,哈希值时这样子的:

上面3个只有一个满足要求:樱花和梨都不是动物,但海豚是的。
由于第二个矿工发现了正确的哈希,他将获得奖励。这个奖励包含新的比特币,这就是这个过程被称为“挖矿”的原因,就像是矿工在挖掘新的比特币,也就像之前淘金一样。
如果挖矿进度太快,那比特币就会泛滥,引起通货膨胀。为了避免这种情况,比特币软件设计带有自适应限制机制。如果哈希值太容易被找到,网络就会选择一个更严格的限制。
假如,我们表情包区块链里面挖矿太快,为了解决这个,限制就会做一些调整:从下一个块开始,哈希值必须是一种动物,并且是一种带爪子的动物。
矿工们运行他们的哈希函数发现:

没有一个哈希是带爪子的动物,所以矿工们继续尝试:

现在,第三个矿工发现了一个正确的哈希:熊是有爪子的动物!然后这个矿工可以在网络中广播这个哈希值和相应块中的数据。由于哈希计算很快,其他矿工可以计算这个块的哈希来校验这个哈希值,🐻,是否满足限制条件。然后他们把这个块加入他们的区块链,这样他们和其他人保持着大约(或多或少)的同步。接着,矿工们开始收集下一个块的交易记录。
现在,区块链的哈希看起来是这样,包括了称为🐻的块。我转给你5块钱的交易就在这个块里。

公钥加密算法

哈希是比特币依赖的数学概念中的一个,公钥加密算法则是另外一个。
在密码学中,人们总是用“Alice”和“Bob”作为相互交流的角色。我们就用他们来帮我们解释下公钥加密算法后面的基本原理。
假设Alice想给Bob发送一个装有机密文件的公文包。(在密码学里,Alice似乎一直在干这事儿)。如果Alice和Bob有相同的密钥,那就很简单了:她给公文包加一把锁,用她的钥匙锁上,然后发给Bob。

Bob收到公文包之后,他可以用他的钥匙开锁——因为他的钥匙和Alice的是一样的,然后Bob就可以获取到机密文件了。这个过程就是密码学中的对称加密。
然而人们彼此之间往往没有这种匹配的密钥用来传送机密,因为安全地传输密钥可不是一件简单的事。如果Alice有一种私有且安全的方式给Bob发送一个密钥,那她也可以用这种方式直接把文件发给Bob。
因此Alice和Bob没有同一把锁的相同的钥匙。相反,他们每个人都有自己的锁和自己的钥匙,这样的话,他们其实可以不传输他们的钥匙。
我们来看怎么实现这个:
Alice用她的锁和钥匙把公文包锁上,然后发给Bob。Bob收到后,他并不能打开Alice的锁,但他可以用他自己的锁再把公文包锁上。

然后发回给Alice:

然后Alice用她的钥匙把公文包上的她的锁打开。

现在公文包上就只有Bob的锁了。Alice再把公文包发回给Bob:

现在Bob就可以轻松地打开公文包拿到文件了。
这样一来,Alice和Bob就没必要再去纠结如何悄悄地共享一个密钥了。他们只需要每个人都有自己的钥匙和锁就可以了。
但是要是另外一端的接收人不是你想的那个人呢?如果出了什么岔子,Bob变成了一头牛呢?

那就会这样了:
1. Alice发送公文包。她以为她发给Bob了,但是其实她是发给了一头奶牛。
2. 这头惊人聪明的奶牛在公文包上加上了它的锁并发回给Alice。
3. Alice开心地以为收到的公文包上的锁是Bob的(其实是属于一头牛的),然后她打开了自己的锁并将公文包再发了出去。
4. 奶牛打开公文包上的锁。
5. 奶牛吃了机密文件。哞~
没有人想让他们的机密被奶牛消费,所以我们多做一步来保护我们的机密:Bob得让Alice准确地知道他的锁长什么样。这样Alice可以校验收到的公文包上新加的锁是不是Bob的。
事实上,Bob复制了他的锁,并公开,随处可见。让每个人都知道Bob的锁的样子没有关系,因为只有Bob才有钥匙打开他的锁。与此同时,这可以让Alice可以识别Bob的锁。她可以检查公文包上的第二把锁是不是Bob的,然后再打开她自己的锁。
我们是用物理的锁和钥匙,那要复制和分发锁并非易事。还好我们现在是在说数字内容,我们说的数字密钥和锁,都是数字。
这个锁是一个公开的数字,而钥匙是私密的数字。这个私密的数字,即为私钥,可以用来“解开”公开的内容。公开的数字,也许有点儿容易弄混,就是公钥。
这就是公钥加密算法。
人们需要谨慎保管他们的私钥,因为私钥可以解密任何它对应的公钥。(在密码学上,这个解密的过程有时被称为签名。)人们广泛公开他们的公钥,这样其他人就知道这个特定的锁到底锁了什么内容。
在比特币系统中,公钥加密算法被用来证明所有权。为了解释具体是怎么运作的,首先我们需要弄清几个术语。在比特币系统中,有私钥,公钥和地址。

不像Alice和Bob传文件的例子,比特币系统里的密钥不是用来加密的。没有什么神秘的公文包需要解密。这些密钥是用来证明所有权的。
在比特币世界里,Alice不再给Bob发送秘密公文包。相反,她有一个透明的玻璃盒子,里面装了她的锁和比特币。

如果Alice要转比特币给Bob,她需要做两件事情:
1. Alice要把Bob的锁放到盒子里。这很简单,因为Bob到锁其实就是一个公开的数字。这样以来,Bob可以通过打开他的锁来证明他有拥有这个盒子。
2. Alice需要证明盒子里面的第一把锁是她的,而不是别人的。她可以证明这一点,因为她可以用她的钥匙来打开那把锁。她的钥匙就是一串没有分享给任何人的数字。

然后,当Bob决定把这些比特币转给别人(比如说Carlos)的时候,他也要做同样的事情:他添加Carlos的锁并用他的私钥签署这笔交易。
在这个场景里,锁到底是什么?总地来说,锁就是公钥。但比特币协议在公钥加密算法有些改变——不光包含了Bob公钥本身,还加入了Bob的比特币地址。比特币地址从公钥中衍生出来。这就像是Alice放了一个Bob锁的特殊代表。并且,一个公钥可以产生几乎无数多的地址,Bob每次可以用一个不同的地址,如果他想的话。
我们再回来之前我转给你的那5块钱。我把5块钱转到了你的比特币地址——那是根据你的公钥生成的。而的你公钥是从你的私钥生成的。在数学上,你的比特币地址和你的私钥是绑定的。如果你有某些地址对应的私钥,那你也持有这些地址上的比特币。
如果你想花掉这5块钱,那你需要创建一个新的交易,交易里面包含了收款人的地址,并用你的私钥签名。这就像用收件人的锁锁上公文包并且解开你自己的锁。
另外使用地址还有一个有趣的影响,那就是,比特币是近乎匿名的。
比特币是化名的,因为你的地址是你的化名。比特币不会关联你的姓名,唯一需要的就是你的私钥。
只有你有你的私钥,你就拥有你的比特币。随便你怎么玩。


到目前为止,在第一章,我们了解了比特币是去中心化的货币,而不是由任何政府和财团发行的,以及什么是哈希。在第二章,我们了解了比特币矿工如何用哈希真正地赚钱以及密码学如何保障比特币的唯一性和不可复制性却又可以转账。
在第三章,我们将介绍怎么用比特币和区块链来不止赚钱,以及这些技术如何成就新的金融工具。