首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

区块链:西门庆戏耍武大郎

这是Dreamer的第72篇原创

上篇文章:《

区块链:西门庆与潘金莲的爱恨情仇

书接上回,西门庆和潘金莲公布恋情后,因为消息是透明公开的,很快传到了武大郎耳中,武大郎很快召回了武松,预合计抓住这对奸夫淫妇,好来个double kill。

于是上演了一场,西门庆与潘金莲巧戏耍武家兄弟。

故事情节是这样的:消息散播后,潘金莲与西门庆害怕被武家兄弟追杀,慌乱中俩人跑散了,分别跑到了两座山上,只能远远相望,不敢下山。因为武家兄弟坐落在山下城中。武家兄弟每日在城门口轮班监视,只要发现他们格杀勿论。因此两个人若有一人先下山,一定会被武家兄弟抓住并且杀死,如果两个人约好地点见面,然后迅速跑掉,便可远走高飞。但问题就在于,如何约定一个时间,并且不能被武家兄弟发现。

看起来很简单,俩人一起冲下山直接就跑了。但有一个问题,山上没有信号,传递消息只能靠通信兵,而通信兵必须经过武家兄弟守护的城池才能传递消息。

假设:潘金莲看到一个通信兵来通知:“今晚12点城外集合,与西门庆远走高飞”。请问潘金莲敢信吗?

如果你信了,半夜12点跑出去了,结果发现武家兄弟在等着你。别奇怪,别惊讶。西门庆发给潘金莲的消息是:“凌晨1点城外集合,远走高飞。”

很明显,通信兵被武家兄弟截杀了,换了个新的,骗潘金莲在半夜12点出来,凌晨1点的时候在抓住西门庆,最后真就double kill 了。

因此只传输纸质信息会带来两个问题:

1)信息会被篡改。

2)收到信息的人无法判断信息的真实性。

那到底该怎么办呢?有两个办法:

一是数字签名,例如在比特币交易中,这只适用于点对点的传输场景。如果想把信息向全部通讯兵广播,就需要第二种方法:工作量证明。

1

啥是工作量证明?

百度一下你就知道了:工作量证明(proof-of-work)指通过完成一定工作量以阻止网络恶意攻击的方式,简称POW。

简单理解一下,“一定的工作量”就像是傻瓜式工作,假如我让你猜个数,你从1开始数数,一直数下去,你一定能数到我心中想的那个数,只是花费时间和力气的问题。

但在工作量证明中,猜得不是随便的数,而是一个普通的数字,这个数字添加文本信息后面,就会在哈希值前面衍生出很多个0。

回到故事中,西门庆给潘金莲的消息是:“凌晨1点城外集合,远走高飞”。这样发的结果傻子都能读明白,自然容易泄露信息,因此会被武家兄弟截杀。

于是,西门庆与潘金莲事先做了个约定:

西门庆找一个数字,加在文本信息的后面,使得“文本消息+数字”的哈希值以5个0开头。如果没有按照约定,那潘金莲收到的消息就肯定不是西门庆发的。

在这里的5个0代表的是工作量的难度,0越多代表这个数字越难找到。

2

工作量证明过程

接下来用简单的方式演示寻找数字的过程:

哈希算法有很多,每种哈希算法的结果都不一样。我们取其中一种哈希算法举例说明(感兴趣的人可以自己脑补一下10多种哈希算法)。

绝大部分的哈希值都不是以“0”开头,举个例子:“凌晨1点城外集合,远走高飞”的哈希值是以“8880a”开头。

西门庆与潘金莲的任务就是找到那个普通数字,把这个数字加到文本信息后面去哈希,当哈希值前面出现5个0的时候,这个数字就是他们要找的值。

简单粗暴的方法就是从0开始,把0加在文本消息“凌晨1点城外集合,远走高飞”之后,变成“凌晨1点城外集合,远走高飞0”,得到的哈希值是08880agdas8s1d2fc3c......

这个哈希值很显然不是以5个0开头的,所以0这个数字不是符合要求的数字,西门庆与潘金莲还需要继续找。

哈希值长度为64位,为了方便理解,只是展示前一段的哈希值。这里特别说明一下,找到1个0或2个0开头的哈希值很简单,随便蒙几个数字可能就找到了。但如果找5个0的开头哈希值就很难了。

寻找“0”开头的哈希值相对容易,一下就找到了9个,但是却没有出现“00000”开头的哈希数字,连“00”开头的都没有。

所以,继续找吧

又继续找了一些,发现以“0”开头的哈希值很少,可能找几百个都发现不了一个带“0”开头的哈希值。为尽快说明过程,以下就把一些不以0开头的哈希值省略掉了。

继续找:

“00”开头的哈希值也真是不好找,我都怀疑西门庆和潘金莲是不是已经怀疑人生了。找了近千个数字彩发现了几个以“00”开头的。

为了不让西门庆和潘金莲吐血,我们次数省略几万个哈希值,只为了找奥那以“00000”开头的哈希值。

继续.....

继续找.....

风雨无阻的找......

如果没有省略号,我怀疑这篇文章你能看到老......接着找......

十年寒窗苦找,只为博红颜一笑......

我靠( ‵o′)凸,皇天不负有心人。

终于找到了。

文本信息变成了:“凌晨1点城外集合,远走高飞9981666542”,这个对应的哈希值满足了要求:00000s56a2d5g7fd5......

"9981666542"这个数就是西门庆和潘金莲苦苦寻找的数字,找到他比找本拉登都难。本拉登还能有点蛛丝马迹,这个数只能一点一点苦算。

上文中省略号的部分,其实就是工作量证明,证明你真正的寻找过。虽然哈希运算很简单,每次只要0.001s,但几十亿的哈希计算,却需要10天的时间。如果你想一天算出来,就得用10台高性能计算机一起算。

回到故事中,如果武家兄弟截获了通讯兵的消息,篡改成“半夜12点城外集合,远走高飞”,那么武家兄弟得重新算这个数字,还得有个前提,他们知道西门庆与盘锦约定了5个0的事。

西门庆把“凌晨1点城外集合,远走高飞9981666542”发给了潘金莲,潘金莲计算后,得到了“00000s56a2d5g7fd5......”,五个零的前缀让潘金莲开心的吃了10个烧饼。

赶快打扮,准备半夜远走高飞。但是,这真万无一失了吗?

武家兄弟也不傻,他们也懂哈希。

武家兄弟截获信息后发现:“凌晨1点城外集合,远走高飞9981666542”,一哈系发现前面有5个0。于是,武家兄弟篡改了信息,并且模仿西门庆的手法,用工作量证明算出了一个数:“凌晨1点城外集合,远走高飞668845544”。潘金莲收到消息后:“凌晨1点城外集合,远走高飞668845544”,一哈系,发现也是5个0的哈希值。

如果潘金莲信了,明年的今天就是她的忌日。因此,潘金莲还是不能相信这个消息的事实,主要是传输的通讯兵不靠谱。

潘金莲绝望了,跪在山上大哭,真的没办法了吗?

3

天下没有解决不了的问题

解决这个问题最好的办法就是:增加通讯兵的数量和提升计算哈希的难度。

增加通讯兵:这个简单了,原本西门庆派出一个通讯兵,这个通讯兵一旦被劫持,就会发生篡改以至于影响最终逃跑的结果。如果,西门庆派出10个通讯兵,武家兄弟即使抓住了2,3个通讯兵也不会有很大的影响,并且武家兄弟也知道了拦截2,3个通讯兵没有用,也不户去费力气计算工作量证明了。剩余的通讯兵会把真实消息带给潘金莲,潘金莲一哈希就知道事情的真假了。

增加难度:原本西门庆与潘金莲的约定是计算出5个0开头的哈希值,现在为了防止被武家兄弟轻易破解,他俩约定计算出8个0的哈希值。这从计算上大大的增加了难度。

武家兄弟一看到消息对应的哈希值是8个0,脑袋都得大了。这要篡改一下这个哈希值,的需要几年的时间,等他们计算出来,西门庆与潘金莲可能连孙子都有了。更何况还有10个通讯兵,这个篡改方案让武家兄弟彻底放弃拦截了。

所以,武家兄弟绝望了,找数字会花很长的时间,在找数字的期间,其他的通讯兵已经把消息送到了,即使找到了那个数字,也没有什么卵用了。

因此,潘金莲与西门庆必定远走高飞了!

回归到现实生活中,这个故事其实讲述的就是“拜占庭将军问题”,西门庆与潘金莲相当于2个将军,武家兄弟相当于被进攻的城池。在增加3个将军,就演化成了“拜占庭将军的问题”。学习比特币之前,你一定会听说到“拜占庭将军问题”,这个问题很好的为比特币的原理做一个基础知识补充。

按照上文工作量证明的原理,几位将军只需要将“消息+数字”让10个通讯兵去传给对面山头的将军,对面山头将军在进行哈希计算,确定消息的真伪。几次信息传输,就会确定攻城的时间。只要将军们意见达成统一,最终必将获胜。

“拜占庭将军问题”只是理想情况下的实验,现实生活中有手机,有电脑等通讯设备,传递信息要比实验中简单的多。故事都是一种类比:敌城被比喻成互联网,各个将军是互联网上的节点,通讯兵是指传递消息的方式,“消息+数字”指的是区块,数字在区块链中有个专业术语:随机数。

“拜占庭将军问题”解决了,就诞生了比特币,比特币世界中有一些人,他们记录交易信息、寻找随机数,称他们为“矿工”。

4

简单总结

信息不对称,信息不准确一直是一个痛点。在分布式网络里面,每个节点可能是蒙圈的状态,他们不知道谁说的事正确的,谁说的是错误的。其实,很简单,每个节点只要广播出自己知道的真实事情即可,无需关注其他人说的真伪。

有的人会说,如果全网节点都是说的是假的,那信息是不是就失去了价值?

但毕竟还是好人多,只要绝大多数节点不做坏事,广播真实的事情,并且使用工作量证明的方法,全网的就会形成正确的共识。这属于数学的问题。

挖矿的结果是对真实信息的记录,并且很多人都争先恐后的挖矿,毕竟有相当值钱的币子在作为奖励,按照这种方式,正确的消息远大于那些错误的信息。

不轻易相信任何的节点,这是正确的思维,但要相信数学概率,数据概率往往最真实的展示现实的世界,拿赌博来说,嬴与输一直是1/2的问题。傻子一般都会想,这次输了,下次一定会赢,其实下次输赢的概率仍是一半一半。

关注公众号,回复“学习区块链”,我会免费发送给你一本关于“区块链“的电子书。

书籍名称:《区块链-从数字货币到信用社会》

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180314G1I55Z00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券