专栏名称: Linux爱好者
伯乐在线旗下账号,「Linux爱好者」专注分享 Linux/Unix 相关内容,包括:工具资源、使用技巧、课程书籍等。
目录
相关文章推荐
Linux就该这么学  ·  输入中文秒变运维代码的神器,竟还接入满血 ... ·  8 小时前  
Linux就该这么学  ·  谷歌为Pixel手机推出Debian ... ·  昨天  
Linux爱好者  ·  董事长十几刀刺死 ... ·  2 天前  
Linux爱好者  ·  分布式系统编程已停滞?! ·  2 天前  
Linux就该这么学  ·  去你的996!打工人非牛马,大厂强制下班双休 ·  2 天前  
51好读  ›  专栏  ›  Linux爱好者

走近比特币:一个故事看懂“区块链”

Linux爱好者  · 公众号  · linux  · 2017-07-12 22:23

正文

(点击 上方公众号 ,可快速关注)


英文:Mohit Mamoria,翻译:赛博朔方

www.4hou.com/info/news/6152.html

如有好文章投稿,请点击 → 这里了解详情


区块链是比特币的底层技术和基础架构,本质上是一个去中心化的数据库。区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)并生成下一个区块。


狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一 种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。


以上定义摘自百度百科。很多菜鸟朋友看完这段解释依然满脸懵逼,到底什么是“区块链”?


起因


除非你完全没有接触过信息安全,否则一定听说过比特币和区块链。毕竟这两个名词也是近两年来各大国内外媒体争相报道的热词。尤其是继今年5月爆发的WannaCry病毒爆发以后,很多从未接触过的人都开始加入讨论大军。


我的很多朋友都不懂技术。最近几周他们一个个都变身好奇宝宝,围着我问比特币和区块链。我想这两个名词的热度一定还会持续攀高,对他们不够了解的人也还有很多很多。何不采用通俗的语言对“区块链”做一个解释,把这个概念传播开来?


和网上一般的名词解释不同(不管三七二十一,下个定义再说,其实并没有什么卵用),我们以它的作用为切入点来理解区块链的工作机制。


故事的开端


Joe是你最好的朋友。他出国旅游后的第五天给你打了个电话:“兄弟,我需要点钱,出国之后把身上的钱都花完了。”


你回复:“我马上打过来”,然后挂了电话。



接着你又打电话给你的银行客户经理:“麻烦你马上从我的账户转1000美元给Joe。”


客户经理:“好的,明白。”


客户经理随后确认了你的账户是否有足够的余额。因为你是百万富翁,所以客户经理进行了如下的操作:


交易账单


你打电话给Joe说你已经把1000美元转过去了。



回头我们再来看看刚刚到底发生了什么。你和Joe都信任那家银行来管理你们各自的财产。整个过程中实际并没有真实货币的物理流动。整个过程只涉及录入系统的两个账户即可。更准确地说,全程只需主动权属于该银行的两个账户就可以完成。


在这样传统的货币体系中,我的问题就来了。


交易双方的信任机制建立需要借助第三方。这种“中间人”的方式由来已久。那么你可能又要问了:“这种信任机制有什么问题吗?”问题在于除交易双方以外的“监督者”只是单个个体。这种情况可能存在以下风险:


如果有人有意或无意地摧毁了某个人或某个第三方组织机构就可能足以引起社会混乱。


如果记录了某个交易的注册表遭遇火灾怎么办?


万一你的客户经理不小心划了 1500 美元到你朋友的账户怎么办?


如果他是故意这么做的呢?


世界上有没有无需借助银行就能帮助我们完成安全转账的系统?


要想解决这个问题,我们首先应该静下心来好好思考,问自己一个更深层次的问题:我们能不能自己掌握账户和历史交易的信息呢?


这的确是一个值得探讨的问题。答案当然你一定也已经猜到了——那就是“区块链”。现在我们就开始学习这个分布式账本是如何运作的。


故事的发展


该方法得以实行的必要条件是必须有足够多的人愿意在交易时不依赖于第三方。只有这样,这一部分的人才能够自己掌控账本资料。


那么人数要达到多少才足够呢?在下面的例子中,我们假设有10个人愿意放弃银行或其它任何第三方机构。在双方达成协议的前提下,他们互相之间能够在不知道对方身份的情况下时刻掌握对方账户的一切信息和动态。



1. 一个空文件夹


一开始每个人都会获得一个空文件夹。随着时间推进,这十个人都会在他们现在空的文件夹里不断添加记录交易信息的纸张。


2. 交易发生时


接下来,这个交易网络中的每个人都带着纸和笔坐下来,准备记录下在这个系统中发生的每一笔交易。


假设,2号想给9号10美元。


为了完成这笔交易,2号大声地告诉每个人:“我要转10美元给9号。请大家都在自己的纸上记下来。”



然后每个人都检查确认2号是不是有10美元及以上的余额能够转给9。如2号余额足够,那么大家都在空白纸上记录下这笔交易。


纸上的第一笔交易


这笔交易这样就算完成了。


3. 持续发生的交易


随着时间的流逝,这个交易网络中出现交易需求的人越来越多。无论何时他们产生交易需求,都会通知网络中的每个人。只要有人听到了这个通知,他/她就会在他们各自的纸上记录下来。


这个过程会持续进行,直到这张纸上的空间不足。假设每张纸只能记录10次交易,那么只要第10次交易完成,每个人纸上的空间也就随之耗尽。


当白纸被填满


这时候我们就需要把这张纸放进文件夹并拿出另一张新的白纸,重复上面步骤2的过程。


4. 把纸张放进文件夹的注意点


在把纸张放进文件夹之前,我们需要对这张纸用网络中每个人都认可的专有密钥进行密封。但是密封后我们要确保的是,这张纸就只能尘封在文件夹里,无论是谁无论何时都不能对其作任何修改。并且如果每个人都相信这个“封印”,那么也就意味着每个人都绝对信任这张纸上的内容。这种密封方式也是区块链的关键所在。


以前第三方或中间人都会说服我们相信无论他们在注册表中记录了什么,里面的内容都不会发生改变。但在现在这个分布式的、去中心化的系统中,这个印章(密钥)就为我们建立了这种信任机制。


故事的高潮 (一)


新的问题又来了。我们应该如何密封这张纸?


在学习如何密封之前,我们先来了解印章的工作原理。


假设我们现在有一个机器,如果你把一个里面装着东西的盒子从左边放进去,这个魔法机器会从右边吐出一个装着其它东西的盒子。


【术语解析】这个机器实际叫作“哈希函数”,但是今天我们不讨论技术。所以我们暂且称它为“魔法机器”。


魔法机器(即哈希函数)


如果我们把装有数字4的盒子从左边放进去,它会从右边给出下列字符:dcbea。



如果已知条件是输出结果为“dcbea”,要想知道从左边输入的是什么非常困难。但是每次如果你把4放进去,最终的输出结果“dcbea”是肯定的。


我们来试试发送其它数字。如果放入26会得到什么呢?


哈希(26)=94c8e


这次我们得到的是“94c8e”。从26的输出结果来看,结果也可以包含数字。


了解到这儿,我们可以开始思考下一个更加深入的问题了:


“如果我想从右边得到一个以3个零为开头的结果(如000ab、00098、000fa等),那么我应该从机器的左边放入什么内容?”








请到「今天看啥」查看全文