15分钟真读不完……@@
上次说到
如果你在发送文件『波多野结衣教学视频第二讲第三小节』时,用哈希函数做一个摘要(可以理解为『压缩』),把『波多野结衣教学视频第二讲第三小节』压缩成『波视节』三个字,然后用你的私钥XXOO把『波视节』三个字加密成『ABP』这3个字母,把『ABP』这3个字母放在你发出去的文件旁边,这3个字母就能证明这个文件是你签署的。
为什么呢?
因为私钥加密的东西只有公钥能解密,所以如果我收到了你发给我的一个包裹,里面包括两个文件,一个写着『原文件』,一个写着『我用私钥加密过』,我用你的公钥解密后者,得到了和『原文件』一样的东东,我就可相信这个东西是你发的了,对么?
回到上面说的例子,我用你的公钥123456解密『ABP』,得到了『波视节』三个字。然后再同样把你发给我的『波多野结衣教学视频第二讲第三小节』用哈希函数做一个摘要,也得到了『波视节』三个字。居然一样!那我相信这东西就是你做的!
就这样,这个莫名其妙的『ABP』在这件事情上就成为了你的数字签名,可以证明这事儿是你认的。
可是,可是,发个文件,这样做没问题,你把『波多野结衣教学视频第二讲第三小节』发给张三和我,皆大欢喜。可如果这是100块钱呢?你只有100块,可是你发给张三之后,又发给我,我们俩都查了你的数字签名也查不出错,你就可以把100块钱花两遍!这就是经典的『双花』问题(记得装逼时要说是『双花』,这样别人听不懂会显得技术更高深一点哈)。
一般的解决办法就是引入一个第三方,你给我100块的时候其实是把钱打给它,它重新印张新钱打给我,有第三方管着,这样就使得你100块钱只能花一次。
我们不搞第三方,直接用这个nb的去中心化网络搞定。我们就认定『先发生的交易为大』——如果你先给张三钱,再给我钱,整个网络就会把钱给张三。那么我们需要解决的问题就变成了:网络怎么知道哪笔交易先发生呢?答案是『都记下来』。
每一笔交易都必须全网广播,所有参与的节点必须就所有交易的『先来后到』达成共识,形成一个大家都认可的历史账本。而每个人在收钱的时候,则需要网络中大部分节点给他确认说『对对对,这钱是首先打给你的,之前没打给过别人』。
你给任何人的每一分钱,都必须昭告天下,然后全天下都拿出小本本把这事儿记下来,同时还看一下表把发生的时间记下来。因为可能有人离你近,有人离你远,所以每个人记下来的时间还不一样,最后他们自己会去对答案,少数服从多数,把大家的记录统一起来。
好了,到这里……我们也仅仅是把几个名词解释了一下,还是没有说这一小节(真的是一小节,中本聪论文里半页纸而已)的核心:『A同学要转钱给B同学怎么办呢?简单,他把上一个『转账交易』和B同学的公钥放在一块儿,签名哈希一下,贴到他所有的那个币的链尾上,就搞定啦。收款人可以通过检查签名来验证这个链的所有权。』
还记得上一篇说的么——『我们管一串数字签名链条叫做一个数字币』。
最开始的时候,币是中本聪同学的。如果他要把钱转给你,应该怎么办呢?他会在这个钱上加一个数字签名,写上『这个钱我给XXX了』,然后把这句话广播出去,让所有人都记下来。
具体怎么做呢?他会把『中本聪的钱』这个信息,加上你的公钥123456,一起哈希成一个摘要——比如哈希成了『ABC』,然后用自己的私钥把『ABC』加密——比如加密成了『KYC』,然后把『KYC』贴到『中本聪的钱』这个链的尾巴上,就好了。
因为中本聪同学的公钥也是公开的(比如是246789),所以所有人都可以拿着246789去解密KYC,得到ABC。然后任何人都可以把『中本聪的钱』和你的公钥123456拼到一起哈希压缩一下得到ABC。两个都是ABC,大家就觉额这事儿没错,中本聪确实把钱给了你。
之后你怎么把钱给我呢?你全网吆喝一声『我把这钱给Mars啦』,然后用把『中本聪给钱给XX』(上一个交易)和我的公钥(假设是112233)放一块儿哈希压缩成KYF三个字母,再用自己私钥OOXX把字母加密成KKY三个字母,把KKY放在『我把这钱给Mars啦』这句话旁边当做签名。所有人都可以拿着你的公钥123456去检查,用123456解密KKY,得到KYF。大家只需要看把『中本聪给钱给XX』和112233放一块是不是也能得到KYF三个字母,就能验证这笔付款是不是经过了你授权。
写了这么多才解释了不到两页纸的白皮书,我也是醉了……
担心还是写太复杂了(没办法呀,要把加密原理说清楚的话……),再通俗简单一点讲一遍吧。比特币世界里的钱,可以理解为一个活页本,第一页写的是『中本聪的钱』,第二页写的是『中本聪把钱给XXX啦』和中本聪的亲笔签名,第三页写的是『XXX把钱给YYY啦』和『XXX』的签名……每次交易都会在这个活页本上再加上一页,让这个钱的上一个主人写上把钱给了谁,以及附加上签名,这样就使得钞票得以流转起来。
如果有坏人想作弊,他自己copy一个活页本,在给我的本子上加一页『我把钱给Mars啦』然后签名;在给你的本子上加一页『我把钱给XXX啦』然后签名。我们怎么发现这笔钱被花了两遍呢?
中本聪同学给出的方法是『让网络中所有人都来做记录和见证』,当坏人给我的本子上加上一页『我把钱给Mars啦』然后签名时,系统会把这张活页纸发给网络中所有的人,并且问他们『这个签名对么?』&『他之前把这个钱给过别人么』,网络中所有人各自查自己的账本给出答案,最后得出共识结论说『签名对』&『钱之前没花过』,然后我就收到了这个钱,所有人也都把这张活页纸copy一份存到自己的账簿中。
等坏人再给你同一张钱时,系统会再次把这张写着『我把钱给XXX啦』的活页纸发给网络中所有人,网络中大部分人已经收到并且保存过『钱给Mars』的前一张活页纸,所以都反馈说『签名真的,可这个已经在更早的时候花过啦!』拒绝接受这个交易。这样你就不会收到钱,也不会给坏人发货之类的,不会有损失。
很多地方为了简单还是讲得不是很严谨……不过我觉得应该也不重要:P
如果我说我写了这么多,才cover了中本聪同学白皮书的一页半内容,你会不会觉得很崩溃@@。
还好一共只有8页^_^。
欢迎赞赏,认识我的人打个Bitcoin给我就好啦~:P
Token Economy Design社群发起人介绍
任鑫,05年开始在中美做电商,11年创立『今夜酒店特价』,13年把公司卖给了京东,开始做京东O2O。15年再创业IM服务助理,2017年底转型区块链,是要发车(yaofache.com)和轻钱包糖果车的创始人。
要发车(www.yaofache.com)是区块链行业信息聚合平台,有最全的数字货币行情和资讯信息,在加密货币的世界里开得一手好车。
想要加入TED(Token Economy Design)社群,请添加微信:renewyourdream
本文转自任鑫Mars在要发车的专栏文章:《15分钟读懂中本聪比特币白皮书开始装逼(2)》