Blockchain Basic Principle

Table of Contents

1 区块链

A blockchain is a distributed database that is used to maintain a continuously growing list of records, called blocks. Each block contains a timestamp and a link to a previous block.

区块链的最著名应用是比特币结算系统。比特币结算系统是分散地建立在网络上的(称为P2P网络),它是一个去中心化的结算数据库,个别数据节点被破坏或者被人为篡改不会影响整个比特币结算网络。

区块链的设计使得它天然具有较高的 Byzantine fault tolerance

2 区块链原理

尽管区块链这个的概念是由 Satoshi Nakamoto 于2008年提出的。但其思想却是由Stuart Haber和W. Scott Stornetta于1991年在其论文“How to time-stamp a digital document”中提出。

Stuart Haber和W. Scott Stornetta的论文主要解决问题: 如何证明电子文档的创建时间和最后的修改时间? 这个问题有很多应用场景,如可裁决谁先提出某个专利想法等等(如两个人A和B都声明自己先发明了微积分,A拿出一个文档说我于x年就把这个想法记录下来了,B拿出一个文档说我于y年就把这个想法记录下来了,如果年份都是可信的,那么法官简单比较下哪个年份更早就可裁决出谁先发明了微积分了)。

2.1 简单的解决方案

下面是一个简单的解决方案,它可以证明电子文档的创建时间和最后修改时间。
系统中引入一个可信的time-stamping service(TSS)。用户每次对电子文档有修改(包括创建)就把文档提交给TSS,TSS记录下收到文档的时间(即当前文档的最后修改时间),而且要保存文档的一个复本。要证明文档的最后修改时间就很简单了。由于TSS是可信的,那么直接拿着文档去找TSS,TSS在其内部数据库中查找,发现这个文档的确存在,而且是X年X月X日提交的。

这种方案可行,但存在很多问题:
(1) 隐私性不好。如果文档是机密信息,用户不仅要确保自己不泄露,还要确保TSS不泄漏。
(2) 带宽和存储要求。如果文档很大,则会带来很大的带宽压力和TSS存储压力。
(3) TSS本身的能力限制。万一TSS的硬盘坏了,那就什么都没有了。
(4) TSS本身的可性度。这是最关键的问题,怎么保证TSS是公平的?上面方案中并没有相关方案用于防止TSS和用户A串谋起来欺骗用户B(如TSS造假说用户A于X年X月X日提交了某个文档,但实际上用户A并没有提交,用户B也无从验证TSS是否在造假)。

2.2 改进方案(无法解决TSS本身可性度问题)

对于上面简单的解决方案所存在的4个缺点,前面3个缺点容易解决。这里给出一个方案能克服前3个缺点(但第4个缺点还是存在)。

2.2.1 使用Hash

不发送文档本身给TSS,而是发送文档的Hash值给TSS。这样第1个和第2个缺点基本得到解决。

2.2.2 使用数字签名

进一步,如果使用数字签名技术: TSS把文档Hash值再加上收到文档的时间作为整体进行数字签名后返回给用户。

这样,TSS本身几乎不用存储什么东西了,这样第3个缺点也基本得到解决。

2.3 最终方案一:linking(blockchain采用的方案)

如何在上节介绍的改进的基础上进一步解决TSS的可性度问题(第4个缺点)呢?

注意到“用户提交文档的Hash值和提交时间”是无法提前知道的。 如果我们把“上一次”用户提交文档的Hash值和提交时间作为“这一次”数字签名的一部分输入,这样所有的数字签名过程是有序的(组成一个链),这样TSS无法伪造签名了(TSS无法在链中悄无声息地插入一个节点,因为这会使得新插入节点后面结点的签名信息不一致,很容易查找出来)。

2.4 最终方案二:random-witness

random-witness是另一种解决TSS可性度问题的方案。不过,Blockchain没有采用这种方案,这里不介绍。可参考Stuart Haber和W. Scott Stornetta的论文(在原始论文中这个方案称为“Distributed trust”)。名字“random-witness”来自Dave Bayer和Stuart Haber的论文“Improving the Efficiency and Reliability of Digital Time-Stamping”。


Author: cig01

Created: <2017-04-02 Sun 00:00>

Last updated: <2017-07-23 Sun 16:08>

Creator: Emacs 25.1.1 (Org mode 9.0.7)