前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度丨解读比特币背后的奥秘丨附中字视频

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

作者头像
CDA数据分析师
发布2018-02-23 10:19:49
6550
发布2018-02-23 10:19:49
举报
文章被收录于专栏:CDA数据分析师

翻译/校对: Mika

本文为 CDA 数据分析师原创作品,转载需授权

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

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

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

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

视频内容

针对不方便打开视频的小伙伴,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的区块链,而选择其他所有人计算的那份更长的区块链。

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

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

非常感谢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CDA数据分析师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯电子签
弹指间,放心签。腾讯电子签(E-Sign Service)致力为企业及个人提供极简且高效的电子合同管理工具。您只需要一部手机即可完成合同签约及常见的合同管理操作;电子签将对签约全程进行区块链记录,为您的业务与生活保驾护航。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档