Bootstrap

中本聪原始比特币论文解读:点对点的电子现金系统

摘要:

解读中本聪比特币的论文《Bitcoin: A Peer-to-Peer Electronic Cash System》

中本聪比特币论文的结构

下面是发展于2008年10月31日, 中本聪比特币的论文《Bitcoin: A Peer-to-Peer Electronic Cash System》一种点对点的电子现金系统的目录:

1.Introduction 简介

2.Transactions 交易

3.Timestamp server 时间戳服务器

4.Proof-of-Work工作量证明

5.Network 网络

6.Incentive 激励

7.Reclaiming Disk Space 回收硬盘空间

8.Simplified Payment Verification 简化的支付确认

9.Combining and Splitting Value 价值的组合与分割

10.Privacy 隐私

11.Calculations 计算

12.Conclusion 结论

中本聪原始比特币论文的逻辑结构如下:

1 点题:点对点、分布式的时间戳(timestamp)服务器,原则是算力为证(computational proof)。

----------

2 通过签名的交易电子货币->引出要解决双重支付(double-spend)问题;

----------

3 (实现基础)时间戳(Timestamp )服务器,构建区块(block)链(chain)

4 (实现基础)区块补随机数,得到工作量证明(Proof-of-Work)

5 网络的工作流程

6 由激励机制产生新货币,替代中央权威( central authority )

----------

7 (优化)打桩(stubbing)老区块->优化磁盘

8 (优化)不完整节点也能确认工作量证明

9 (优化)多输入多输出的可能性

10 (优化)隐藏公钥来保护因素;

----------

11 攻击者节点可能有情况;概率指数级

----------

12 实现了不依赖信任的电子交易(electronic transactions without relying on trust)。

本篇文章标题里面提出的是Bitcoins(比特币),文中重点则是区块链这种思路的实现。

在原始的论文中,大概是这样的思路:

  • 目标很明确,找到一种“不依赖信任的电子交易方法”,

  • 因此需要解决支付的问题,

  • 方法是通过时间戳服务器的工作量证明

  • 在实现的主流程中,又增加了一些优化的方法

原始的论文对于具体的实现其实比较简略,里面有一些默认知识——比如分布式系统、密码学。

背景知识

1 去中心化的结构

传统的交易系统,是依赖中心化的结构的,其实也就是银行,也被称之为信任机构。

在去中心化的结构中,奉行的是点对点的结构,这些点在分布式系统中是对等的存在,也就是被称之为每一个Nodes。

节点代表分布式系统中的计算机,有无中心化有着本质的区别。

下面是中心化的结构结构,在交易系统中,银行代表的就是中心节点。

下面是无中心化的结构,各个节点是对等的关系,也称之为点对点(Peer-To-Pear)。

2 哈希函数

哈希函数(Hash function)是一种从任何一种数据中创建小的数字“指纹”的方法。

哈希函数的基本原则就是:

  • 哈希函数可以有不同多种算法;

  • 哈希函数不可逆,从输出不能得到输入;

  • 同一个哈希函数的输出不同,输入一定不相同;

  • 同一个哈希函数的输出相同,输入大概率相同的,也可能不同;

  • 同一个哈希函数的输入不同、输出相同情况称为哈希碰撞;

下面图表示了哈希函数的各种情况。

下面是常见哈希函数的表格。

例如:

MD5的输入不限长度,输出是是产生128位(16字节)的哈希值;

SHA-256是SHA-2的一种,输入限定为2^64-1,输出256位(32字节)的哈希值,

3 非对称加密

非对称加密(Asymmetric cryptography)是单向加密算法,密钥由一对组成:

  • 公钥(Pulic Key)

  • 私钥(Private Key)

要一条密钥加密后只能用相对应的另一条密钥解密。

下面是公钥、私钥的加密、解密的特点。

公钥和私钥是成对生成的,对于非对称加密来说,公钥可以公开,私钥不可以公开。

非对称加密有下面几个场景:

下面与Bob用Alice的公钥加密,将自己信息传输给Alice的过程。

下面是Alice用自己的私钥签名,将内容发布,证明本段内容出Alice自己的方法。

下面则是描述了迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange)。

《1.Introduction 简介》:区块链的目标

《2.Transactions 交易》:进行传输

本节首先介绍了基本交易的情况,这里面涉及了非对称加密的过程。

每一个交易者需要做的事情是,通过下面两个部分生成一个Transaction:

上面的图要从中间一个开始看,这也就是Owner 1生成的交易(Transaction)。#1也就是对应图中的hash,#2也就是图中Owner 2's Public Key,用Owner 1's Privete Key签名之后,形成了Owner 1's Signature。因此,每个人都可以知道,这个Transaction是Owner 1发出的。

根据非对称加密的远离,由于别人没有Owner 1的私钥,因此不能篡改内容,也能证明这个内容肯定就是Owner 1发布的。

注意:此处的Owner 2's Public Key代表了一个地址,这是在后面隐私环节需要优化的。

此处引出了另一个问题,Owner 1本身有可能有双重支付(double-spend),如果没有中心化的信任机构,则需要进行公开宣称(publicly announced),然后收款人(payee) 得到大多数接节点的认可——首次出现。

本节的目标是电子交易的传输问题。

【已解决问题】: 采用非对称加密的手段,私钥加密保证了内容(电子货币)的所有者。

待解决问题: 每个内容是真实的,没有双重支付;

《3.Timestamp server 时间戳服务器》:形成区划链

本节介绍的时间戳服务器的本质是,将数据加上timestamp然后进行哈希,逐个数据因此形成了一个链。

本节是区块(block)链(chain)的本源,区块也就是加了时间戳的数据,链则是它们形成的链条。

区块链的结构实现了一个电子交易核心的问题:记账。

【已解决问题】:哈希的结果是让“记账”保持正确、不被篡改,形成链条之后,则是逐层保证。

〖待解决问题〗:某些节点恶意记账;

《4.Proof-of-Work工作量证明》:增加计算负担

本节提出的工作量证明是一个负担,让每一步的生成有更多的计算量,这样做的目的是增大计算的成本。

为了保证不被篡改,通过incrementing a nonce in the block的手段,用随机数(nonce)附加在内容的后面,以产生N个0作为约束条件,以工作量最大的结果作为共识。

例如,SHA-256的哈希结果是256位、32个字节,如果要求前面有8个0,那么就是前面一个字节为0,在找随机数的时候,就需要反复试验,直到找到为止。 至于有多少0的要求,则就是难度。

由于哈希算法的不可逆性,因此找到一个满足条件的哈希值很难,而验证这个数值正确与否却很容易。因此,只要算出来,很多可以达到多节点的共识。

上面的逻辑是,在以CPU为大多数表决的系统中,如果大多数CPU是诚实的,结果就是正确的。

在比特币的实际实现中,难度是动态调整的,随着算力的增强,逐渐调高难度保证生成的速度不变。

比特币的实现中,其实结构并不复杂。

Block的结构如下所示:

  • Block Size:4字节,区块大小

  • Block Header:80字节,区块头

  • Transaction Counter:1-9字节,交易的数量

  • Transactions:交易的内容

其中,Block Header的结构如下所示:

  • Version:4字节,版本号

  • Previous Block Hash:32字节,上一个区块的头,SHA256哈希

  • Merkle Root:32字节,Merkle的根

  • Timestamp:4字节,UNIX时间戳

  • Difficulty Target:4字节,难度目标

  • Nonce:4字节,随机数,用于达到工作量证明

大约也可以用下面的图来表示。

工作量证明原理在于,如果要改变一个区块,那么区块以后的“新区划”都需要重新计算,这也是就是需要耗费算力。

本节是电子交易的关键环节,解决伪造的问题。

【已解决问题】:用工作量证明的共识,来确定公认的正确内容。

〖待解决问题〗:完整的流程;

《5.Network 网络》:基本流程

本节已经给出区块链运作的基本的流程,网络(Network)的意思是多个节点(Node)组成的分布式系统。

区块链网络工作的过程是:

在区块链的运作过程所,每一个节点在争取“记账”的权力——有共识的区块,因此节点们都在努力算,首先算出来的可被接受。

上面意思是,交易广播不需要达到全部的节点,节点丢了区块也可以补回来。

本节到此为止,区块链的去中心化的流程可以跑通了,剩下的问题是:节点为何要做计算?

《6.Incentive 激励》:

激励(Incentive)的作用是要节点记账,否则节点没有动力去记账。

在区块链节点记账的过程中,有两种收益,一种是交易费的差价,一种是新货币。

对于比特币系统来说,如果所有币都已经被挖完,那就只有交易费,而没有新货币的奖励。

本节的含义很简单,解决了节点为什么要计算的问题,因为可以获得新币。

待续

《7.Reclaiming Disk Space 回收硬盘空间》:

《8.Simplified Payment Verification 简化的支付确认》:

《9.Combining and Splitting Value 价值的组合与分割》:

《10.Privacy 隐私》:

《11.Calculations 计算》:

《12.Conclusion 结论》: