15分钟彻底读懂中本聪比特币白皮书(1)

互联网 2018-04-08 10:36:00

如果你理工科背景,懂一些编程和密码学,英文大致OK,可以直接看中本聪原文:https://bitcoin.org/bitcoin.pdf,这样逼格最高。

如果没有这些背景知识,又不想仅仅从一些通俗段子里理解比特币和区块链,希望真的读懂这篇开山之作,可以试试读我的改写版,应该会比较省力气(而且不会像那些漫画版之类的那么浅,我打算把里面的技术啊数学啊都讲清楚)。

bitcoin

标题:比特币——一个点对点现金交易系统

摘要:略(摘要里牵涉太多概念,后面在正文里我一个个解释吧)

1. 介绍

现在线上商业大多有个可信的第三方中介(比如微信、支付宝),有第三方就会有第三方仲裁(比如你投诉淘宝卖家没给你发货要求退款)之类的事情,这增加了系统的成本。这个成本使得小规模交易不可能,比如如果每笔钱都需要1毛钱的处理成本的话,1毛钱以下的转账就没法做。

更糟的是,因为有仲裁和钱可能被退回去的风险,所以卖家会特别谨慎,这个谨慎增加了体系对于『信任』的要求,又增加了成本。比如如果你给我的钱肯定退不回去,我就懒得去查你到底是好人坏人,反正收到钱发货就好。可如果存在可能是你可能搞鬼然后串通或蒙蔽第三方(比如阿里巴巴)让他之后逼我把收到的钱吐出来退回去,我就得先查查你背景,看你长得像不像骗子(比如职业差评师之类),我这个担心和额外的工作(查你背景),对于系统来说就是额外的成本。线下大家都付现金就没问题,不需要第三方,我也不担心被逼退钱,可是线上一直没有这种选项存在。

所以呢,我们需要一个新的付款方式,就像现金系统一样,不需要第三方担保,也不需要在你我之间建立信任,就可以直接交易。付过的款不会被退回,这样卖方就安心了。实在要保护买方的话,传统的监管机制(类似支付宝)也还可以用。在这个论文里,我们会提出一个牛逼方法,这个方法可以解决双花问题(怎样防止骗子把一块钱在网上花两遍),我们会用一个分布式的时间戳服务器来记录交易解决这个问题。而只要系统中大多数节点是诚实可信的,整个系统运转就是可信的。

2. 交易

第一句:『我们管一串数字签名链条叫做一个数字币』。

好吧,这句话不像人话,我帮中本聪同学解释一下。生活中,我们给别人钱是给了他一张纸,所以我们理解的『钱』或者『币』就是一个实际存在的东西。但是在网络上,其实我们给别人打钱的时候,并没有物理上给他什么东西,而仅仅是记了个帐。

比如Mars用支付宝给Mango打100块钱,支付宝并不会把什么东西从Mars那里挪动到Mango那里,而是会在Mars名下账户里记账『减去100块』,而在Mango那里记账『加上100块』。

这是站在支付宝的角度思考,以人类为中心来记账,如果我们站在这100块钱的角度以它为主角记账呢?则应该第一天记录为『我出生啦,在中国人民银行』,然后记录它一系列的遭遇流转——『我从人民银行到招商银行账户啦』、『我从招商银行账户到了一个叫做今夜酒店特价的公司财务账上啦』,『我从财务账户到了一个叫Lei的人手上啦』……『我从XX手上到了一个叫做Mars的人手上啦』、『我从Mars手上到了Mango手上啦』……

在数字世界里,我们让每个人在转钱给别人时签个名(技术上以后详细说)才能转成,那么这一系列的签名『人民银行』、『招商银行』、『今夜酒店特价』、『Lei』……『Mars』、『Mango』……其实就代表着这张钞票的前世今生,也就是这张钞票本身——最后一个所有者要把它给谁的话,签个名转给对方,把对方的签名也加到这一串名字里就好(细节以后说)。这也就是这句『我们管一串数字签名链条叫做一个数字币』的意思。

接着,中本聪同学说:A同学要转钱给B同学怎么办呢?简单,他把上一个『转账交易』和B同学的公钥放在一块儿,签名哈希一下,贴到他所有的那个币的链尾上,就搞定啦。收款人可以通过检查签名来验证这个链的所有权。

是不是每个字都会念,可是完全看不懂这段话什么意思!?

这张示意图,是不是看着不明觉厉,但是完全搞不清在干嘛?!

好吧,我来一个一个词解释(泪)。

首先解释什么叫『公钥』、『私钥』。这东西叫非对称加密。我们外行脑子里的加密就是在文件上加个密码,谁有密码谁就能打开文件。比如你问我要日本爱情动作片,但是又怕别人看见内容,就电话我说『你把文件加密传给我哈,密码就是123456就好』,于是我就加密文件,设了个密码123456,然后微信你加密后的文件,你回家输入123456就可以看片了。

可是,要是有人监听了我们电话呢?岂不是就被人发现我们在传小黄片了?有什么办法可以让我们更安全——就算别人既截获到了文件,又偷听了电话密码,却还是打不开文件?

非对称加密就可以做到,每次他会生成一对『公钥』和『私钥』。然后就是见证奇迹的时刻——所有用『公钥』加密的文件只能用『私钥』解码,所有用『私钥』加密的文件只能用『公钥』解码。

说人话,举个栗子,你用到了神奇的非对称加密A算法,它给了你『公钥』是123456(仅为示例……),『私钥』是XXOO。你就可以电话我说『给我片子,公钥是123456,算法是A』,然后我用123456作为公钥加密文件传给你,你回家输入XXOO就可以解码看片了。

发现神奇的地方木有?你从头到尾没有在电话里说过『XXOO』这个私钥,你不需要告诉我这个(我也猜不出来),所以就算被第三方听到了,他们拿到文件也还是打不开!欧耶!

这样一来,你只需要生成好自己的『私钥』和『公钥』,然后公告天下『公钥』,大家都用『公钥』加密内容后再发给你,就再也不用担心内容被别人偷看了(其实有点过度简化……先将就看吧,理解最重要,下文也是如此)。

然后,然后,我们来解释『数字签名』是什么鬼。

假设你已经公告天下说我的公钥是123456了,我给你发文件已经不怕被抓了。那么,你能不能用这个密码体系再做另一件事情呢——『证明你认可某个文件』(达成和物理世界里签名一样的效果)。

刚刚已经说过,『私钥』只有你自己有,所以,如果有个办法证明『创建文件的人拥有对应123456的私钥』,就能证明这个文件是你创建的。

怎么证明呢?我们刚刚又说过,『公钥』加密的文件,只有『私钥』能解开;『私钥』加密的文件,只有『公钥』能解开。如果你在发送文件『波多野结衣教学视频第二讲第三小节』时,用哈希函数做一个摘要(可以理解为『压缩』),把『波多野结衣教学视频第二讲第三小节』压缩成『波视节』三个字,然后用你的私钥XXOO把『波视节』三个字加密成『ABP』这3个字母,把『BBX』这3个字母放在你发出去的文件旁边,这3个字母就能证明这个文件是你签署的。

What?!Why?!这3个字母跟我有毛关系啊,我名字又不是ABP,你肯定会有这样的疑问……

下次给你解释哈,实在写不完了,我也没想到这么一小段要解释这么长@@。

相关资讯Relevent