写点什么

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

用户头像
韩超
关注
发布于: 2020 年 08 月 14 日
中本聪原始比特币论文解读:点对点的电子现金系统

摘要:

解读中本聪比特币的论文《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)

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

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


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

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

  1. 加密:公钥加密、私钥解密,保证传输安全,在不安全的传输过程中无法偷窥;

  2. 签名:私钥加密、公钥给所有人解密,证明出自本用户,中途篡改无效;


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



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


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


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


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

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


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

  1. a hash of the previous transaction

  2. the public key of the next owner

上面的图要从中间一个开始看,这也就是 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)组成的分布式系统。

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

  1. 新的交易向全网进行广播; 

  2. 每一个节点(Node)都将收到的交易信息纳入一个区块中; 

  3. 每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明; 

  4. 当一个节点找到了一个工作量证明,它就向全网进行广播; 

  5. 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性; 

  6. 其他节点表示它们接受该区块,表示接受的方法则是:在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机哈希值视为先于新区快的随机哈希值。


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

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


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


《6.Incentive 激励》:

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



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

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


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

待续

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


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


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


《10.Privacy 隐私》:


《11.Calculations 计算》:


《12.Conclusion 结论》:


用户头像

韩超

关注

还未添加个人签名 2017.10.20 加入

还未添加个人简介

评论

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