2008年11月,中本聪发布了比特币白皮书《一种点对点的电子现金系统》,从此开启了区块链技术的新天地,虽然中本聪在2011年后销声匿迹,但白皮书中涵盖了中本聪最希望传递的比特币的世界观,对于每一个区块链入门者都是必读,以下为个人的总结与点评
1.介绍(Introduction)
基于信任模型的交易:
(1)传统金融中介增加成本
(2)支付交易可逆,欺诈不可避免
基于密码学原理:
(1)点对点交易,不存在金融中介
(2)不可回滚的支付交易,防止欺诈
个人点评:本节强调的是目前传统的中心化金融模型有许多不可避免的问题,可以通过密码学保证的分布式账本解决。
2.交易(Transactions)
每一位电子货币所有者通过对前一次交易和货币接受者的公钥(pubilc key)签署一个hash数字签名,然后发送给下一位所有者。
(1)收款人使用付款人的公钥(public key)校验,是否是正确的付款人发送
(2)由于交易中有收款人的公钥,所以只有收款人使用自己的私钥才能解锁并将该货币传递下去
但以上过程仍然有问题,无法解决双重支付问题,即货币所有者将同一电子货币签名后发送给多个收款人。
传统金融:通过中介机构判断并确认用户是否进行双重支付
比特币:通过公开宣布货币的所有交易,形成唯一公认的历史交易序列,由系统内所有参与者认同交易
个人点评:通过非对称加密的公私钥,可以解决虚拟货币的归属权问题,但是同一个货币可以由归属人付给多个人,也就是双重支付,仅使用加密在货币体系里是不够的。(这里其实隐含了货币体系必须要有人记账)
3.时间戳服务器(Timestamp server)
对区块形式存在的一组数据实施随机散列(HASH)加上时间戳,将区块连成一个链条,形成区块链
个人点评:本节实际上给出了比特币账本的雏形,也是区块链(Blockchain)名称的来源,每一个区块就是一页账本,他们的顺序是由时间戳来决定,由Hash函数保障账本的真实性。
4.工作量证明(Proof-of-Work)
计算一个随机数(Nonce),将随机数与区块头一起计算随机散列值(Hash),该散列值要满足以N个0开头(N为变量,可通过N来控制计算难度,N越大,难度越大),此即为“挖矿”的内部原理。
工作量证明的用途:
(1)保证区块链(Blockchain)的不可篡改性,由于区块形成了链条,如果要修改区块,必须重新完成之前所有的工作量,所以随着区块链高度越高,越旧的区块越难以篡改。
(2)工作量证明的本质是一CPU一票(与传统的一IP一票不同,攻击者要获得更多的票数需要投入大量的成本),如果大多数的CPU为诚实节点,那么正确的链条将以最快的速度延长。
个人点评:上一节的模型能保证账本的顺序和真实性,但是无法阻止人为的创造多个账本,而这些账本中只能有一个是被大家认可的,所以必须创造一种共识机制。比特币的共识机制即为工作量证明(POW),即工作量(Hash计算)最大的那个账本是大家公认的正确账本。
5.网络(Network)
网络的运行步骤如下:
(1) 新的交易向全网进行广播;
(2) 每一个节点都将收到的交易信息纳入一个区块中;
(3) 每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;
(4) 当一个节点找到了一个工作量证明,它就向全网进行广播;
(5) 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
(6) 其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区快的随机散列值。
两个节点如果同时完成了工作量证明,并进行广播,由于网络传输的原因,可能出现两条一样长度(工作量)的链条,该情况要等下一个工作量证明被发现来判断哪一条最长。
个人点评:全网的节点(矿工),将通过努力完成工作量证明来争夺将新区块写入区块链的权利(记账),如果有人先完成并被确认有效,所有节点就会转向争夺下一个区块的写入权。
6.激励(incentive)
(1)通过完成工作量证明,可以获得一定量新的电子货币作为激励
(2)另外一个激励为交易费,如果比特币(2100万枚)全部已进入流通,激励将完全依靠交易费,使货币免于通货膨胀
激励系统也有助于鼓励节点保持诚实,如果一个攻击者拥有大量的算力,他利用这些算力进行挖矿收益很可能高于攻击比特币网络。
个人点评:网络节点(矿工)争夺记账权相应的必须有一定的激励,否则没有人有动力去记账,这种激励就是记账人可以获得一定量的新比特币和交易费。(比特币的产出量为记录一个块50枚比特币,每4年减半,2018年已经经过两次减半,目前为12.5枚)
7.回收硬盘空间
交易信息构成Merkle树的形态,通过merkle树的原理可知,只需要根节点(root)与路径即可验证交易的正确性,使得用户只需要存储区块头(含有Merkle root),在需要时获取Merkle树路径即可校验一笔交易。
不含全部交易信息的区块头(Block header)仅80字节,区块生成速率约为10分钟一个,每一年只产生数据4.2MB
个人点评:比特币的区块头始终只有80字节,却可以包含交易相关信息,即是利用梅克尔树记录交易,在区块头放入梅克尔根(梅克尔树我们在后面章节会详细讨论)。
8.简单的支付确认
在不运行完整网络节点的情况下,也能够对支付进行校验。节点只需保留区块头,通过merkle的分支校验某次交易是否存在即可。
个人点评:早期的比特币账本数据量较小,全网节点实际都是全节点(存储账本所有数据),但是中本聪在设计初已经预见到账本容量随着时间持续膨胀,全节点的负担将会越来越重。此时可以使用只保留区块头的方式,利用梅克尔树来验证交易,这样可以大大减少节点的存储占用空间。
9.价值的组合与分割(Combining and Splitting Value)
每次发起一次交易,输入可以有多个,输出只有两个:一个用于支付,另一个用于找零
个人点评:比特币作为货币,需要具备可灵活分割合并使用的特性,通过输入输出的分割与合并使交易变的非常灵活。
10.隐私(Privacy)
传统模型:金融中介提供一定的隐私保护
比特币:通过公钥生成的地址,交易虽然在全网广播,但公众能得到的信息仅为某人将一定数量的比特币发给了另外一个人,但无法确认这些人是谁。
个人点评:由于比特币的账本是全网公开的,所以隐私保护是一个重要课题,比特币利用公钥Hash作为交易地址来对外表现交易的输入输出过程,这里有两个好处:
(1)由于公私钥是随机生成的,仅知道公钥Hash并不能知道具体是谁做了交易
(2)某公钥地址的私钥持有人,能随意支配该地址上锁定的货币,但没有人知道谁是真实的私钥持有人
11.计算
攻击者即使拥有了巨大的算力,也仅能更改他自己的交易信息,试图拿回他刚付给别人的钱(双重支付)或者拒绝别人的交易信息。无法凭空创造价值或掠夺别人的货币。
--后面内容涉及较多数学计算,不再详述,有兴趣的自行翻阅白皮书。
个人点评:工作量证明有一个风险,就是有人如果控制了全网大量的算力(如超过51%),实际上他可以控制大部分的记账权,对于比特币网络将产生风险。但是比特币的设计将这种风险产生的后果降到了较低的水平:
(1)由于仅有算力,没有私钥,无法随意掠夺别人的货币。
(2)虽然他可以拒绝别人的交易计入账本,但这种破坏实际并不会对别人造成货币的损失。
(3)他还可以试图进行双重支付,但如果在大额交易中对方进行多个块(如6个以上)确认来验证交易,仍然很难完成双重支付。并且这种攻击发生会很容易被察觉,比特币社区可以快速做出应对。
综上所述,进行51%算力攻击需要花费巨大的成本,但是获益其实并不大,如果能掌握51%算力,进行攻击的收益可能远不如成为一个诚实节点进行挖矿的收益。当然如果有人以破坏比特币网络为目的,并完成51%算力攻击,势必会对比特币产生影响,但并不可能杀死比特币。
白皮书链接:https://github.com/GammaGao/bitcoinwhitepaper/blob/master/bitcoin_en.pdf
加入知识星球和HWer一起成长
更多好文请关注后查看历史消息
领取专属 10元无门槛券
私享最新 技术干货