比特币白皮书十周年,重温白皮书纪念
2008年10月31日,中本聪在网站上发表了比特币白皮书,至今已经十年过去了。你有没有仔细读过?在这个特殊的日子,币圈邦德推出比特币白皮书解读,带你重温。
读之前必须要了解一个基础概念,哈希(hash)。哈希作为动词就是把任意的输入长度通过散列算法变成固定长度的输出,而且无法逆向推倒,哈希值就是所输出的固定长度。
经过散列算法,相同的信息会得到相同哈希值,即使信息有细微改变,得到的哈希值也会不同。
下面进入正题。
1
中本聪在标题里就给比特币下了定义:一种一种点对点的电子现金系统(A Peer-to-Peer Electronic Cash System)。 一种最纯粹的点对点电子现金在交易过程中只涉及到交易双方,不会有第三方金融机构参与 。不过想绕过第三方机构,双花(同一笔钱花两次)问题是要必须要解决的。
在比特币网络中,使用了数字签名,时间戳,PoW等方法,下面将详细讲解隐藏在比特币背后的技术。
2
在现在的转账系统,也就是存在第三方金融机构的转账系统中,信任问题是不可避免的。完全不可逆的交易实际上不可能存在,总会存在纠纷,仲裁花费就会增加交易成本。同时由于支付是可能逆转的,商家要提防客户,要求他们提供更多的信息,所以信任必须存在。
电子支付系统需要的是加密证明,而不是基于信任。这样双方就可以直接交易,不需要第三方的参与。
在这个系统里,比特币就是一串数字签名链。每个人在转账过程中,签署币过去的转账记录的哈希和下一个接收者的公钥,接收者验证签名后就能宣示所有权了。
在这里解释一下公钥和私钥的关系。私钥是由256位数字0和1组成的随机数,将其转换成64位十六进制显示。所以比特币的私钥共有2^256个,数量和可见宇宙中所有原子数差不多。 公钥由私钥通过椭圆曲线加密算法得到,比特币地址由公钥通过哈希得到。
他们之间严格按照私钥得出公钥,公钥得出地址的顺序,不能逆推。用私钥加密过的信息可以用公钥解密,用公钥加密过的信息可以用私钥解密,地址是用于转账,可以由公钥证实。
所以交易信息(哈希值)用私钥签名后,用公钥验证签名就能确定“比特币”之前的所有者。由于每次的交易信息都不同,所以每次交易都会有新的签名信息。
在这里介绍一个特别的概念,UTXO(Unspent Transaction Output),即没有花费的输出。很有意思, 比特币其实不是“币”,它其实是一种UTXO。 比特币账本记录的是一笔笔交易,转账中肯定包括输入和输出,如果还有没有花费的输出,就是这个地址剩余的比特币数。除了矿工挖到区块奖励的比特币外,其他的比特币都来源于前面地址的UTXO。
3
回到上一话题,接收者很难验证这些“币”是否被双花,通常情况下就要引入信得过的第三方机构,或者造币厂验证是否双花。在每次转账过程中,造币厂回收之前的币并重新发放新币,新币只通过这个造币厂发放,于是就避免了双花,但是又有一个问题,每一笔交易都要通过这个造币厂。
如果要在系统中除掉这个第三方造币厂,就要系统中所有人都知道转账的前后顺序,转账记录就要被公开,参与者都要同意唯一的转账顺序。 接收者需要证明在每次转账过程中,大多数节点都同意币是第一次被接收的。
时间戳就是为了解决这个问题,给交易一个不可伪造的时间标记,让所有人都确认转账顺序。
时间戳是将等待被时间戳的区块,散列其中的内容,然后将哈希值通过报纸或者网络广播出去。时间戳证明了数据在那个时刻存在,因为只有那个时刻存在,才会得到相应的哈希值。 每一个时间戳的哈希都包括前一个时间戳,因此形成了一条链,每个新加上的时间戳都在之前时间戳的后面。
4
分布式的时间戳服务器需要建立在点对点的基础上,这里使用的是PoW(Proof of Word,工作量证明)的共识机制。 PoW的过程是寻找一个值,让这个值的哈希值满足一定条件, 比如说用SHA-256算法(SHA-256哈希函数)。哈希值是从一堆数字0开始的,寻找这个值的工作量随着数字0的增加指数增长,但是要验证这个值是否符合条件只需要1次哈希运算。
实现PoW是通过加入随机数的方式,直到找到一个能达到那么多0的哈希值, 这个哈希值是由之前区块的哈希值,随机数和区块交易共同决定的 。找到符合条件的哈希值,CPU就花费了劳动实现PoW。 除非重新完成这么多的工作量,区块是不会再被改变的。 之后新的区块会连接这个区块,如果要改变还要改变所有在这之后的区块。
PoW还解决了决定权的问题,如果用一个IP一票的原则,那拥有很多IP的人就可能推翻这一切,代表大多数。 如果一个CPU算一票,最长的链最能代表大多数,因为其中包含了最多的工作量。 诚实节点控制大多数CPU的时候,诚实链就会比其他竞争链要长。如果有人要攻击,修改之前的区块,就要重复那已完成的工作量,还要超过诚实链的长度, 随着区块增加,较慢的攻击者追上的可能性会随着区块增加指数递减。
PoW的难度会随着每小时平均产出区块数量而定,如果产出过多,难度就会增加。
5
比特币的运行网络步骤如下:
1. 新的转账广播到所有节点;
2. 每个节点收集新的转账打包成区块;
3. 每个节点为区块找到有难度的工作量证明;
4. 当节点找到工作量证明,向所有节点广播;
5. 如果那个区块上的交易都经过确认有效且没有被双花,那节点们就接受这个区块;
6. 节点接受这个区块的方式表现为,将这个区块的哈希当作之前的哈希值,在这个区块之后继续创造区块。
一笔交易被确认的程度,要看它所在区块之后的区块数。后面的区块数越多,代表这个交易记录越难更改,所以被认可程度更高。
节点一直在最长链上工作延长它,如果两个节点同时广播了不同版本的区块,那其他节点接收的顺序总会不同。在这种情况下,出现了分叉,节点们在不同的区块上工作延伸,不过他们会将两边都储存下来避免另一边会超过自己这边。 一旦一边变得更长,那较短链上的那些节点会转换到较长的那边。
新的转账没有必要广播到所有的节点上,只要他达到节点们那里,就会被打包成区块。区块广播允许丢失信息,如果一个节点没有收到区块,他会在收到下一个区块的时候意识到,并且会重新补上。
6
比特币的发行不依靠任何机构,每个人都可以“制造”比特币。区块里第一笔交易很特殊,区块发现者会被奖励新币,这种激励会让节点支持网络。 这种持续稳定增加一定数量币的方式和黄金矿工一样,花费一定资源增加黄金数量。在比特币系统里,CPU的时间和电力就是需要花费的资源,所以那些打包区块寻找哈希值的节点称自己是“矿工”。
激励也会体现在转账费上 ,收款方收到的会比付款方少一些,少的那部分就是用于奖励打包区块的奖励。一旦预期数量的币(2100万)都已在流通,那激励就会过渡为转账费。在这个体系下,是不会出现通货膨胀的。
激励会鼓励节点诚实,如果贪婪的攻击者聚集CPU攻击诚实节点,他就会改变支付来双花,或者用它来造新币。他会发现如果遵照规则,在最长链上挖矿会更有利可图,遵守规则可以拥有更多的新币,搞破坏反而会损失财富。
7
如果最近的交易已经被最够多的区块确认,那它之前已花费的记录就可以被废弃,节约空间。 为了不改变区块的哈希值,交易记录被散列成默克尔树(Merkle Tree)的形式,只有根被包括在区块的哈希中,储存在区块头上。旧的区块可以去除默克尔树的分支来压缩,内部的哈希值不需要储存。
交易以默克尔树的形式被散列 在区块中去除交易0-2之后
没有转账记录的区块头大概是80字节,如果每十分钟产生一个区块,80字节*6*24*365=4.2 MB一年。2008年的RAM是2GB,根据摩尔定律每年还要增长1.2 GB,即使区块头都储存在内存里都不是问题。
比特币系统中默克尔树的储存方式,还可以应用在SPV (Simplified Payment Verification,简单支付确认)上。
没有网络的全节点也可以验证支付信息,用户只需要储存最长链的区块头信息,获得这个区块转账记录的默克尔树分支。 他不能自行检查交易记录,但是能通过链条定位这个转账记录,就代表节点接受了这笔交易,后面增加的区块可以进一步确认网络已经接受了它。
在诚实节点控制网络的时候,SPV确认更值得信赖,但是当攻击者掌控时网络,也更容易受到攻击。 因为网络节点们可以自己证实交易记录,所以这个简易方法可能被攻击者伪造。 为了避免被作恶节点攻击,当网络中节点检测到无效区块时,发送警报,提示用户下载全节点并且警觉那些不一致的交易。 要更安全和更快的确认交易,还是自己运行全节点比较好。
8
传统银行对于隐私的保护,在于很难向被信任的第三方获得信息。 在比特币系统里,所有交易都要公开,保护隐私就好换另一个的思路,保持公钥匿名。 大家都能看到一个人向另一个人转账,但是没法将这个信息联系到具体的人身上。这和股票交易所的模式很相似,时间和交易量时公开的,但是不知道交易双方。
还有另一种防火墙,可以在每次转账过后,换成变新的密钥对。 有些情况下不可避免要用多个输入,这就表明了这些输入都属于一个人。如果有一个公钥暴露了拥有者,那与之相关的交易记录都会被曝光。
9
这是一种不需要基于信任的电子支付系统,最初设计了数字签名的框架,用来证明币的所有权。为了避免双花问题,在点对点网络中使用工作量证明,记录公开的历史交易记录。如果诚实节点掌握大多数CPU算力,攻击者不可能成功改变系统。同时,PoW也是一种投票方式,在比特币系统里,算力为大,大多数算力代表最长链,也代表了大多数人的利益。区块奖励也让节点们更加维护比特币系统,与其用召集算力攻击比特币,不如老老实实挖矿能获得更多利益。
从比特币诞生至今,“比特币是世界最大的骗局”“比特币就是传销”“比特币是庞氏骗局”等等言论时不时地质疑一番。但读完白皮书之后,那些言论自然不攻自破。 隐藏在比特币背后一个个巧妙的设计,使比特币在没有任何官方机构背书的情况下运转了十年之久,从零开始成长为市值1100亿美元的庞然大物。