【这篇博文发到论坛上去后,见https://bbs.wenxuecity.com/currentevent/1903301.html
在两天内有1万5千多的点击。也有人问了一些问题。我把第一版(见上面的链接)重新整理了一下。】
区块链(Blockchain)从字面上说就是由一组“区块”(Block)组成的“链“(Chain)。但现在区块链有着更广泛的含义。本文把区块链直观地定义为:
区块链就是一个“智慧”账本,它在互联网上有多个等同的拷贝。当一份拷贝作出合法的变更时,其他拷贝可以验证这个变更的合法性,作出相同的变更,使得所有的拷贝同步得一摸一样。
区块链由一个很重要的特点:它能被合法地更新,一旦更新后,其内容就不能再被更改了。任何非法的篡改,要么技术上不可行,要么被立刻察觉到。
区块链实现技术实际上已很成熟,主要就是:
- Merkle Trees (默克尔树)
- Schnorr Signatures (斯诺尔签名)
- Fiat Shamir and Pedersen Commitments(菲亚特、沙米尔、佩德森承诺)
- Hash Cash (散列现金), 即为计算出某种散列值(或者说一个特定的值),计算机必须付出得计算量,即计算代价。
这些大都是上世纪80年代和90年代的技术。区块链巧妙地把它们组合起来,为现代数字化社会提供新的应用。
以上的这些都是些数据安全(Data Security)的术语,区块链的用户不必知道技术细节。这些技术已经成功地用在了比特币(Bitcoin)上。十多年过去了(比特币由中本聪发表于2008年10月31日,见“Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, www.bitcoin.org, 31 Oct 2008”),比特币的安全性可以说是很可靠的,实现比特币的区块链实际上经受了各种攻击的考验。
那么,区块链到底是什么呢?这里用一个“简化版”来描述它的主要特性。细节得钻研中本聪得文章。
这里我们先用“电子币”来描述区块链的概念,然后在给出区块链在电子币以外的应用。
假设一个国家的公民和企业都使用电子币。所有的电子币的交易历史,即从它开始的每次转手,都记在一本有多个(数量可不等)等同拷贝的“公开账本“上。这些拷贝有“智慧“,会做计算,实现我们前面讲的那些技术。这就是一个”电子币区块链“。
假定每个电子币的原始出处可以被验证是真实的,比如说是国家银行发的,带有国家银行的电子签名,大家都接受。即,每个电子币在一开始是真实的。
国家在开始发行电子币时把不同的电子币发给了一些个人和企业。这里所谓的“发给”指的是把每个电子币的归属记在”公开账本“的每个拷贝上。如 (这里我们用[…]表示“区块”,+ 表示“链接”)
时间点0:
[电子币#1:张先生] + [电子币#2:张先生] + [电子币#3:张先生] +
[电子币#4:王女士] + [电子币#5:王女士] +
… +
[电子币#500:李超市] + … 全是李超市的电子币 + [电子币#999:李超市] +
其它(时间点0)
=========================================================
技术注解:
每个区块的尾部都有一个“区块编号”, 每个区块的首部有个“区块幸运号”。技术上,[电子币#1:张先生] 应该为:[电子币#1:区块幸运号,张先生交易内容,区块编号]。
实际上还要复杂,如,“区块编号”有一规定的格式,比如,它要以20个0开头,“区块幸运号”是个随机数,它使得上一区块编号与本区快的散列值为本区快编号。
本文是简化版,细节请阅读中本聪的原文。
=====================================================
这本“公开账本“在网上有许多等同的拷贝,供人们随时随地的查询。如果有一份账本的拷贝与别人的不一样,这就是本假账。在后面我们会看到,在区块链里作假不容易,好不容易作假成功又很容易被抓到。
从上面这个“公开账本“,我们可以很清楚地看见,张先生有3个电子币,王女士有2个,李超市有500个,等等。
假如张先生要用一个电子币在李超市采购(这里用“一个电子币“是为了方便描述,可以用0.1个,也可用1.1个,原理是一样的),他可以写一张交易单,如“转电子币#1给李超市,张先生签”。
李超市当然可验证这张交易单的真实性,因为上面有张先生不可更改的电子签名。但要让这份交易合法,即李超市“拿到”电子币#1,这笔交易必须记到这本“公开账本”上,成这样:
时间点1:
[电子币#1:张先生] + [电子币#2:张先生] + [电子币#3:张先生] +
[电子币#4:王女士] + [电子币#5:王女士] +
… +
[电子币#500:李超市] + … 全是李超市的电子币 + [电子币#999:李超市] +
其它(时间点1,与时间点0的“其它”已不一样) +
[电子币#1:转给李超市]
再看这个“公开账本”,稍加计算,我们可以得到,张先生有2个电子币,王女士2个,李超市501个。
我们上面谈到,这个“公开账本”有很多拷贝,它们是怎么“同时”更改的呢?
实际上,每个“公开账本”的拷贝就是在一个网络计算机(服务器)的数据库上。这些计算机就是所说的“挖矿机”,它们会把一个交易合法地加到它的“公开账本”的拷贝上。
那什么又是‘合法地加到它的“公开账本”的拷贝上’呢?这就是一个“挖矿机”得找到“本次交易区块的幸运号”以产生一个符合要求的“本次交易区块编号”。
为什么”挖矿机“愿意做这个费力的事呢?因为他可以挣前面提到的“散列现金 (Hash Cash)”。
“散列现金”的来源,可以是多样的,为简单起见,我们假设国家奖励0.1个电子币给加上一个合法交易“挖矿机”的拥有者。一个“挖矿机”的拥有者,也能是公司,甚至就是国家本身。 一个区块链有很多“挖矿机”。
=====================================================
技术注解:比特币的设计是使得一个“挖矿机”做“合法的”区块链更新(即挣合法的散列现金)或发现一个新的比特币比干非法的攻击更有利可图,使得黑客没有攻击比特币的动机。详见中本聪原文。
=====================================================
当一个交易在“公开账本”的一个拷贝上被成功地加上后,这台“挖矿机”就通知其它的“挖矿机”:“账本已被成功更改” 。其它“挖矿机”做下面几件事:
- 验证这份交易的真伪:这个可以验证一下张先生的电子签名。
- 验证成功“挖矿机”账本的完整性:检查这台“挖矿机是否”挣到“合法的“散列现金”。
- 验证自己的拷贝是否与送来的拷贝的前一时间点版本一致,即检查送来的拷贝在成功更改前与自己现在的拷贝是一样的
- 然后更改自己的拷贝,使得它与成功“挖矿机 “上的拷贝一致。
这样,大家就有了个一致的“公开账本”。这个“电子币区块链”就被“合法”地更新了。
注意:任何人可以在任何时候看到所有的“公开账本”拷贝。另外,我们也可想象每个人都有自己账户,知道自己有多少钱在账上。比如说前面的张先生,他只知道自己的账上还有2个电子币,至于是几号币,他可能并不关心,就像大多数人不关心纸币上的编号,只要不是假币就行了。
到这我们可以看到,区块链就是一个记账系统,它可以把合法的交易记上去,一旦记上去后就,任何非法篡改会立刻被检测出来。
我们来看几种可能的攻击情况:
- 黑客进入一个“挖矿机X”,想在电子币#2上加上一条“转电子币#2给孙假药,张先生签“这样的交易。但黑客无法得到张先生得电子签名,这条交易一上去,所有其它”挖矿机“都知道这个交易是假的,马上通知”挖矿机X“。这种直接进入系统搞数据篡改在技术上是行不通的。
- 假如“挖矿机H”的主人是张先生,而张先生是个隐藏的黑客。他能把时间点1做的交易变掉吗?假如现在是时间点2,电子币#1已被转手了几次,为简单起见,我们假设就一次(没有转手的情况也是一样的):“转电子币#1给蔡市场,李超市签”,这时 的“公开账本”看起来像这样:
时间点2:
[电子币#1:张先生] + [电子币#2:张先生] + [电子币#3:张先生] +
[电子币#4:王女士] + [电子币#5:王女士] +
… +
[电子币#500:李超市] + … 全是李超市的电子币 + [电子币#999:李超市] +
其它(时间点1) +
[电子币#1:转给李超市] + … +
[电子币#1:转给蔡市场交易单] +
其它 (时间点2)
黑客张先生不能在“挖矿机H”上简单地去掉 [电子币#1:转给李超市] 以及以后的交易。这样电子币#1又回到了时间点0,他的区块链被大大缩减了,马上就被发现。
他可已试试把[转给李超市交易单]改成“转0.1个电子币#1给李超市,张先生签”。张先生有自己的电子签名,他可以改,改完后再自己加上去,不挣”散列现金”。但他光改自己的交易单是不够的,因为电子币#1的交易历史在“挖矿机H”上的完整性被破坏了,他必须自己把所有后面的合法交易全取下来,即,把 [电子币#1:转给蔡市场交易单] + 其它 (时间点2),全部拿下来,再重新”合法“地加上去,以保持电子币#1的交易历史在”挖矿机H“上的完整性。这样做,他一是要损失很多”散列现金“,二是他要有比所有其它挖矿机合起来都要大他的计算能力,三是他得”合法“账本没人承认,因为跟大家的都不一样。而他改了以前的历史事实大家一眼就能看出来,因为只有他能改,他有张先生的电子签名。
在中本聪的文章里(Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, www.bitcoin.org, 31 Oct 2008”),还讨论了许多其它更为复杂的攻击情形,比如,多个“挖矿机“黑客合作的情形,但都证明不是可行的,无论是在理论上还是在比特币的实践上。他也讨论了两台”挖矿机“同时成功地把同一个交易加在自己”公开账本“拷贝的情形,这也有解决方案。
如果把电子币匿名,我们就有了密码币。比特币就是个很好的例子。
所以说,区块链可以看作一个数据库的相同版本分布在互联网上。它们可以被同步地合法地更改,但不能被非法地篡改。
区块链除了在电子币上有许多应用外,还有许多其它应用。如防假货。我们可用下面王女士买LV包做为一个例子来说明一下区块链在物流市场里的应用。这个例子纯属虚构,用以解说区块链可能的应用。
当LV为商家A生产出一个包后,它就赋予这个包一个唯一的标识码,比如LV#1,并把LV#1和这个包的特征登记在一个“贵重品区块链”里, 如
时间点0:
[LV#1:卖给商家A] + [LV#2:卖给商家A] + … + [LV#100:卖给商家A]
[LV#101:卖给商家B] + [LV#102:卖给商家B] + …
这里我们必须强调,LV卖给商家A的包是真实的。
跟我们前面的“电子币区块链”的例子一样,一旦登录进去,这个LV包的历史,比如“LV#1卖给商家A”,就无法再改变了。
王女士在购货前,先在“贵重品区块链“上查一下,比如这个包是否已经卖出去了(她实际上不用自己看,她的购物应用程序会帮她查好),因为市场上不会有两个包具有一样的标识码。
当王女士确认商家A和LV#1的真实性后,用她的电子币付款,买下这个包,“贵重品区块链”就记下这笔交易,“LV#1被商家A卖给王女士“,这个包就是王女士的了。
时间点1:
[LV#1:卖给商家A] + [LV#2:卖给商家A] + … + [LV#100:卖给商家A]
[LV#101:卖给商家B] + [LV#102:卖给商家B] + … +
[LV#1:商家A卖给王女士]
这样商家还会卖一个假LV包吗,假如调包?如果商家卖个假包,真包他会怎么办?肯定没法再卖了,因为真包的标识符,LV#1,已进了“贵重品区块链“,在 [卖给王女士] 的区块里。
自己用?那又何必卖假包呢,不光自己还要花钱买假包,还要冒丢了做LV生意的风险。不如真包就自己用,用完后二手卖掉,还省了买假包的钱。
转卖掉?这个真包没有了LV的唯一标识符,真的也只能当成假的卖。
当假货送人?那就成了花大钱买假货。
当然,如果商家A铁了心就要这么干,别人也无奈。他自己祈求别被发现,铁了心冒丢了做LV生意的风险。
另外一种情况,商家X做假LV包,并标记他的假包为LV#1,因为他知道LV#1是个合法标识符。王女士上网,看到商家X在卖LV#1,价格更合理。她会买吗?她一查,商家不对,是假的。她不会在商家X那儿买标有LV#1的包。商家X作假就暴露了。
至于直接卖假货,是不可能的事,因为一个假货无法当真货登记到“贵重品区块链”里。假LV包的标识符不会有LV的签名的。
区块链还有许多其它的应用,如个人履历,智能合同(Smart Contract),法律文件、有机食品管理与跟踪等。这里就不一一列举了。比特币的成功,让人们相信区块链的技术是可行的,尽管要做到这一点,需要大量的计算资源和高速通信设施。
总结一下,从用户的角度看,区块链就是一个能够被随时随地查询、不能被非法篡改、也不能轻易摧毁的数据库。
=====================================================
Q&A:
- 问:区块链安全吗?答:有安全的把握,尽管没有绝对的事,但比特币给大家树立了一个正面的技术先例。
- 问:区块链能提供私密性吗,比如,不被监视?答:这要看用什么模式了。如果采用比特币这种“开放匿名“模式, 个人隐私没问题,但这会导致“去中心化”。有些组织是不愿意看到的。当然,也可用一个机构来统一管理,这样做的优点是区块链更新可以做得很快(挖矿机不用费力地去挣“散列现金”),甚至能进行有限的脱线(offline)交易(传说中的“两个手机一碰“)。但这个机构最终能监控每一笔交易。匿名技术细节在中本聪的文章有详细介绍。
- 问:量子计算机会击破区块链系统吗?答:量子计算机的发展对现在基于椭圆曲线上离散对数的密码系统肯定有影响。但现在“后量子密码”(Post Quantum Crypto)日臻完善。新的区块链系统应该会考虑到这一点。
=====================================================