cda

您的位置:首页 > 精彩阅读 > 深度丨解读比特币背后的奥秘丨附中字视频

深度丨解读比特币背后的奥秘丨附中字视频

2018-01-12

深度丨解读比特币背后的奥秘丨附中字视频

"拥有"一枚比特币意味着什么?

很多人都听说过比特币。这是一种数字货币,不需要特定政府发行,也不依赖银行管理账户和验证交易。而且没有人真正知道其发明者。

我们会从一步步说明,你将如何创建自己的比特币。首先,从你与朋友记录付款的公共账本开始。随着你对朋友和周围的信任开始逐渐降低,如果你聪明地引入密码学的一些概念用来解决信任危机,最终你将得到"加密货币”。

附有中文字幕的视频如下:

针对不方便打开视频的小伙伴,CDA字幕组也贴心的整理了文字版本,如下:


加密货币

比特币只是第一个加密货币的实例,而如今有数以千计的加密货币与传统货币进行交易。理清你自己发明加密货币的过程,能为我们理解当下几大主流加密货币打下基础,认清何时以及为何存在不同选择的余地。

与任何电子支付一样,存在很多方便易用的应用用于发送和接受货币,而不需要知道是怎么实现的。区别在于其背后并不是某家银行来验证交易,而是基于密码学中某些数学方法的分散式的信任列表验证体系。

账本和电子签名

首先,我希望你暂时不管加密货币。先从更基本的概念入手:账本和电子签名。

如果你和朋友们有很频繁的金钱来往,比如AA支付饭钱等。总是用现金很不方便,所以可能会用到公共账本,记录了之后将会发生的交易信息。比如Alice支付Bob 20美元,Bob支付Charlie 40美元等。

这个账本将是公开的,每个人都能查阅。就像网站一样,每个人都能访问并添加新的记录。到了每个月底,大家一起看到交易记录、进行结算。如果你支出大于收入,就付钱;如果收入大于支出,就拿出多余的钱。

因此这个简单体系的协议如下,每个人都能向账本添加交易信息,到月底大家一起结算。

但公共账本存在一个问题,即每个人都能添加记录。应该怎样避免Bob未经Alice同意下记录,Alice支付Bob 100美元。我们凭什么相信账本中的记录都准确无误呢?

这里就需要用到密码学中的技术:电子签名。

目的是就像手写签名一样,Alice能够在交易信息旁留下记录,证明她了解并且同意这笔交易,而且这个签名不能被他人伪造。乍一想,电子签名似乎不太可能实现。

无论电子签名是如何产生的都会被计算机读取和复制,那究竟该如何防止伪造呢?

公共密钥和私人密钥

方法是每个人都需要生成一对公共密钥和私人密钥。每一个密钥都是一串比特。私人密钥有时也被称为秘密密钥,以便缩写为SK;公共密钥则缩写为PK。

正如其名,私人密钥是由你自己保存的。现实生活中,你签署的所有文件中的签名都是一致的。电子签名则更进一步,它会随着签署的内容变化。看上去是一串1和0代码,通常长度为256位。内容的轻微改变都会让签名看上去完全不同。

讲得更正式一点,产生这样的签名需要一个函数。取决于信息的本身和你的私人密钥。私人密钥确保只有你本人能产生该电子签名,这个签名还取决于签署的信息,意味着其他人不能简单地复制这个签名并伪造在其他信息上。

同时还有一个函数用于验证签名是否有效,这里就要用到公共密钥,作用是得出是或否(T/F),指出这个签名是否由公钥对应的私钥产生。这里不会探讨这些函数具体是如何实现的。

但保证了如果不知道私钥,你将无法得出有效的签名。具体来说,并没有比穷举和验证更好的办法。可以用大家都知道的公钥进行验证。

现在想想256位比特到底有多少可能的签名?总共有2的256次方个可能的签名。这是一个天文数字。假设你验证了对应某个信息一个签名是有效的,你可以相当有把握地认为这个签名只能由私钥产生,且该私钥对应用于验证的公钥。现在确保每个人在交易后签名,这很棒。

但还存在一个漏洞。

比如Alice签署了一条Alice支付Bob 100美元的交易记录,尽管Bob不能在新交易上伪造Alice的签名,但他可以把这条记录随意进行多次复制。记录的对应签名依然是有效的。

要解决这个问题,当签订新的交易信息时,交易信息还必包含一个唯一的编号与之对应。

那样如果Alice多次支付Bob 100美元,账本上的每条记录都会需要一个新的签名。太好了,电子签名大大减少了初始协议中的信任危机。

但要真正实现,仍然需要依赖类似的诚信制度。也就是说,你相信到了月底每个人都会遵循协议并用现金结算。万一Charlie欠了很多钱,但拒绝出来还钱该怎么办?

使用现金结算的唯一原因是其中有人欠了钱。有个聪明的办法不需要再用现金结算,只要能够避免有些人的支出超过所得。开始可以让所有人在账上支付100美元,账本上最先记录几条:Alice获得100美元 Bob获得100美元;Charlie获得100美元等等。

现在只需拒绝账本上入不敷出的人的交易。举个例子,如果前两条交易记录为:Charlie支付Alice 50美元,Charlie支付Bob 50美元。如果他想记录Charlie支付你20美元,那将是无效的,和他没有签名一样无效。

注意,这就意味着验证一条交易需要了解到目前为止所有的历史交易信息,在加密货币中同样如此,但仍有待优化。

有趣的是,这个过程去掉了账本和真实货币的联系。理论上,如果世界上所有人都是用这个账本,你整个一生都可以在这个账本上支付并获得金钱中度过,根本不需要转化为真实的货币。

Ledger Dollars

为了强调这一点,我们把账本上的货币单位称为Ledger Dollars,简称为LD。

你也可以将LD自由地兑换成真的货币,举个例子,Alice在现实中给了Bob 10美元,作为交换 Bob在公共账本上记录:Bob支付Alice 10美元。但这样的兑换不会被协议所保证。这更类似在市场上,你将美元兑换为欧元或其他货币。

这是理解比特币和其他加密货币时第一重要的内容。这实际上就是一个账本,历史交易总和就是当下的货币(currency)。

当然就比特币而言,比特币并不会因为人们用现金购买就进入到账本上,之后我会细说新的资金如今进入账本。但此之前,我们目前的LD体系和加密货币的原理还存在很大的区别。

我提过,这个公共账本存在于公共地点,比如网站,所有人都能添加记录。但那样就需要信任这一中心机构,即谁来管理这个网站? 谁来控制添加记录的协议?

为了解决这个问题,可以让所有人都获取该账本的副本。当你想进行交易时,如Alice支付Bob 100美元。你需要将这个信息传播给网络中所有人,并且记录到他们的那份账本上。除非进一步做些什么,否则这样的体系会很糟糕。

如何让所有人确保账本正确呢?

当Bob收到了类似Alice支付Bob 10LD的交易,他如何确保每个人都收到并相信这一交易呢? 并且能让他之后用这10LD支付给Charlie做交易。

试着想想你自己收听到传播的交易信息,如何确保其他人也接受相同的交易信息并按照相同的顺序。这是关键所在,也是有趣的难题。

你能否得出一个协议,决定接受或拒绝交易信息,从而确信遵循该协议的其他人,并且按哪种顺序他们的账本与你的完全一致。

这是在比特币原始论文中提出的问题。简单地讲,比特币的解决办法是,选择信任消耗最多计算资源的那份账本。

这涉及到"加密哈希函数”。基本的思路如下:如果将计算资源的消耗作为信任的基础,那么伪造的交易记录和不一致的账本,则需要不可能达到的计算能力。

提醒大家一下,这里涉及的内容是一般比特币的用户并不需要了解的。但这个想法实在是太酷了!如果你掌握了,那你就理解了比特币和其他加密货币的核心。

哈希函数

首先,什么是哈希函数?

这些函数的输入可以是任何信息或文件,输出为固定长度的比特字符串,如256位。输出值成为这个信息的哈希值或摘要,目的是看似为随机的,但并不是随机的,对应信息总是输出相同内容。但如果你稍微修改输入,也许只是修改了其中一个字母最终的哈希值将面目全非。这里演示的哈希函数"SHA256”。

当输入稍作修改,得出的输出毫无规律可言,这不是普通的哈希函数,这是加密哈希函数。这就意味着逆向计算是不可能的。

如果给出一串1和0的字符串,然后让你找出SHA256函数中哪个输入会得出这串字符。那么你只能通过猜测和检验的方法。进行2的256次方个尝试显然是不现实的。你可能会想,如果你深入这个函数的原理,那么你就可以对输入进行反向推断,而不是通过瞎猜,但目前没有人可以做到。

有趣的是,目前还没有严格的证明逆向计算是困难的。目前大量的安全零度都依赖加密哈希函数,以及它的这个性质。如果看到浏览器和视频网站建立的加密连接背后的算法,或者浏览器连接银行网站时的算法,你很可能会看到SHA256算法的名称。

但现在我们的关注点是,这样的函数如何证明一系列的交易信息所需要的计算力。想想,有人给你一份交易记录并说,”嘿!我发现了一个特殊的数字,你把这个数字放在这份交易记录后面,对整个内容采用SHA256函数,输出的前面30个数字都为0!"

找到这样的一个数字有多难?对于一个随机的信息,其哈希值前30位都是0的概率是2的30次方分之一,差不多是十亿分之一。而且因为SHA256是一个加密哈希函数,找到这个特殊数字的唯一方法只能是穷举验证。

所以刚才那个人基本上尝试了十亿次,才找到了这个特别数字。一旦你知道这个数字 验证起来很快,计算一下哈希值,发现开头是30个0。

工作量证明

换而言之,你能很快地验证这确实经过了大量计算,但不需亲自付出这么多重复劳动。这称为"工作量证明”。

重要的是,这与交易记录紧密相关,如果你更改了其中一条交易信息,即便是轻微的改动,也会完全改变的哈希值。那么又需要经过十亿次尝试,才能找到新的工作量证明。即找到那个特别数字,对应的哈希值会以30个0开头。

现在回到我们的分布式账本的情景。每个人都在传播交易信息,我们想找到一个方法让所有人都确认何为正确的账单。正如我所说,比特币原始论文的核心是:让每个人都信任需要最多计算的那份账单。

为了实现,首先要将账单整理成区块。每个区块包含了一系列交易信息以及其工作量证明,即有一个特别数字,其哈希值以一系列0开头,暂定已60个0开头。

同样交易信息经过发送方签名才被有效,区块只有含有工作量证明时才有效。而且为了确保区块有一定顺序,我们规定区块在头部信息中必须附有前一区块的哈希值。如果你想改变其中某个区块的内容,或者交换两个区块的顺序,这会改变后面区块的内容。从而改变那个区块的哈希值。然后又影响下一个区块,诸如此类。

这需要全部重新计算,重新寻找每个特别数字,使得区块的哈希值以60个0开头。因为区块这样相互链接,与其称为账本,不如称为"区块链”。

在这个新的体系之下,如今允许世界上的每个人成为区块的建立者,意思是说他们都将收听网络中的交易信息,整理这些信息生成区块,然后进行大量计算,寻找特别数字使得区块的哈希值以60个0开头。一旦找到了这个数字,他们就将该区块传播出去。

为了奖励该区块建立者的付出,当他建立了一个区块,我们允许他在开头获得一笔特别的交易信息,即他获得10 LD 这称为"区块奖励”。

这不同于我们一般接受或拒绝交易的规则,它并不来自于其他人,所以不需要签名。也意味着整个网络中的LD,会随着新区块的产生而增加。建立区块通常叫做"挖矿”,因为需要大量的计算力,也会为整个经济中引入新的货币量。

矿工所做的其实就是,收听交易信息、建立区块、传播区块。在矿工眼中 每个区块就像是小型的彩票,每个人都想尽快猜到数字,直到其中的一个幸运儿找到了那个特别数字,能让区块的哈希值以很多0开头。

如果收到了两份完全不同的区块链,我们倾向于选择最长的那份,即需要最多的工作量的那份。如果暂时难分上下,等待下一个区块,总有一个会形成更长的区块链。

因此即便没有中心机构,每个人也在维护自己的那份区块链。但如果每个人都信任最多工作量的区块链,我们就达到分散化的共识。

为什么这样能够建立一个可信的系统? 什么时候应该相信这个系统里的交易很可信?

也许Alice想要用伪造的区块欺骗Bob,即她给Bob一个区块里包含里她支付Bob 100 LD的信息。但她没有把这个传播给其他人,因此其他人还认为她仍持有那100 LD。为此她要比其他所有矿工先找到工作量证明,他们都在独立计算区块。这确实是可能发生的!

可能Alice比其他人都先找到这个证明,但Bob还会收到来自其他矿工的区块传播。所以为了让他相信伪造的区块,Alice需要全部独立计算,继续添加新的区块。这与来自其他矿工的区块都不同。

但系统规定,Bob总是信任他收到的最长的那个区块链。Alice在前几个区块还可能保持领先,刚好碰巧她比其他所有矿工都先找到那个区块。但除非她拥有所有矿工计算资源的50%,所以更可能发生的是,其他矿工计算的区块会比Alice伪造给Bob的区块发展的更快。所以经过足够长的时间,Bob会拒绝收到的来自Alice的区块链,而选择其他所有人计算的那份更长的区块链。

注意,因此你不应该立即信任收到的新区块。而要等到后面有几个新的区块添加。如果还没收到更长的区块链,你就能信任这个区块和其他人的区块链是一致的。

到此,我们讲解了所有的主要内容。我希望这个视频能够让大家,在今后遇到新概念时有理性的思考。目前有大量的资金涌入加密货币中,我并不打算评价这是好还是坏。但我认为对于想要进入该领域的人群,了解些基础知识是很有用的。

完 谢谢观看

分享到:

OK