黄:2008年有人用一个日本名字 Satoshi Nakamoto (中本聪) 在一个密码学网站发表一篇论文 “Bitcoin: A Peer-to-Peer Electronic Cash System”, 描述比特币的电子货币系统。后来這篇文章就成为比特幣的藍圖。 可是从来沒有人能夠找到中本聰, 所以現在很多人懷疑根本沒有中本聰這個人,而是有人用這個名字來發表有關比特幣的論文。
林: 早在1998年有一個在 Microsoft 工作的美籍华人 Wei Dai (戴维)在网上發表過叫做 b money 的一篇文章。中本聰的比特幣就是從 b money 發展出來的。 現在有人懷疑中本聰就是戴维的筆名。
黄:我看不像。尽管戴维短短的那篇b money 很有创意,但中本聪的论文写得很内行, 和戴维一比就像教授和本科生的差别。
汤:听说比特幣的运作用到现在电脑软件和密码的最新技术,你同意吗?
林: 不错, 它所用的 P2P 模式在网络运行不需要伺服器 (Server), 因而可以避免被监管。在比特币交易中所用到的区块链 (blockchain) 技术也相当新穎,有人说将会被大量的用到网上交易。此外它所用的椭圆曲线加密法也是当今最先进的加密法之一。
汤:你能不能简单的用一句话来说明比特币是什么?
黄: 比特币是一种虚拟货币, 它有一套完整的在网络上产生和交易的法则和机制。
林:我看比特币更像一种高级的电子游戏,一种由一流软件专家和密码专家搞出来的游戏。
汤:林的看法会不会有点偏激?
黄:我也有点同意林的看法。在2010年5月22日,有一个叫 Laszlo Hanyecz 的人首次用比特币买东西,也就是说有人首次愿意接受比特币与实物的交换。那时Laszlo Hanyecz 花了一万个比特币买了两片 pizza. 在今天(2018-1-9)这一万个比特币就等於 145550000 美金。在比特币出现的时侯大家是把它当作一种游戏。
汤:那比特币怎会升值到今天这个地步呢?
林: 这是很难答的问题。有人说全部比特币的数目只有二千一百万个, 所以物以稀为贵,也有人说比特币便于储藏和携带, 也不受政权更替的影响。我看这都不是根本原因,我只能说我找不到它初期的升值的原因。如今大家都一窝蜂地跑去买的时候,它当然会遵循經濟學上的供求法則而升值, 这和股票一样。
黄:更根本的问题是比特币的价值何在?
汤:它不像黄金,也不像由庞大經濟实力来支撑的美元。
林:如果你问我黄金的价值何在?我只能说它价值在于很多人喜欢。如果你问我黄金和大米价值那一个高? 我会说正常时期是黄金高,但世上也会有大米比黄金价值高的时刻。
汤:我同意黄金的价值是出于一种约定俗成。当然它在工业上有一定用处,但远比不上它的价格。 大米的价值是比较实在的,但它容易变坏而不能成为货币。下一次如果有人问我比特币的价值何在?我也会说它价值在于很多人喜欢。
黄:现在有人算出来,生产比特币所需要的电力,差不等同于它现在的价值。
汤:不会吧?现在一个比特币值一万四千美金。
林:生产比特币是靠“挖矿”的过程,有人成功但绝大部分人失败。我猜黄所言包括了众多失败者的电脑所用的电力.
汤:我也想知道比特币是怎样生产出来的, 不过我先要请你谈谈比特币的实际运作。
黄:如果你的电脑有2GB 的 RAM, 50GB 的可用硬盘空间, 那你就可以下载比特币的软件成为一个节点 (node). 比特币就是靠千万个这样的节点去运作的。而比特币没有大阿哥,节点没有级别之分,都载有比特币 所有交易的记录. 作为一个节点你可以参加“挖矿”去生产新比特币,也可以收取交易中买卖两方的手续费,这些下面会再提到。
如果你只想参加新比特币的买卖那你只需下载比特币的钱包(wallet). 这个钱包里有一个秘密的私鑰 (private key) 和一个或多个公鑰(public key). 这个私鑰是要保密的,是一串很长的数字, 它能证明你是比特币的持有人,公鑰也是你在比特币网络上的地址,是发给与你交易的人或机构。 当你作比特币交易时私鑰是用来作你的数字簽章 (digital signature). 你交易的对像就用你发给他的公鑰去验证你的数字簽章.
汤: 我见过的比特币公鑰是有英文字母的,不全是数目字。
黄: 那是因为那串很数目字太长,要用十六位进 (hexadecimal) 的办法来表示。十六位进就用到一些英文字母。
林:公鑰私鑰的运作都是由比特币软件在幕后操作的,如果你只想买比特币你不用管这些。
黄:如果你只想买几个比特币来玩最简单的方法是上网找一个 bitcoin exchange, 比如 coinbase 那种。在那里你可以下载比一个钱包,不过你首次买比特币时也得用你的credit card 或者银行户口付账。
汤:我没兴趣买比特币, 我只想知道比特币如何运作。你能解释一下公鑰和私鑰的运作吗?
林:用公鑰和私鑰来加密解密是密码学里比较新的方法。著名的公鑰和私鑰的加密法有 RSA ,Elgamal , 和椭圆曲线加密法, 都是数学加密法, 其中椭圆曲线加密法要比其它两种好一点。比特币交易中的数字簽章就是椭圆曲线加密法的数字簽章。
我先讲公鑰私鑰在加密过程中的角色。如果B想要和A加密通讯他先要得到A的公鑰, 然后用这公鑰把讯息加密发给A, 而 A就用他的私鑰解密。这个公鑰就算给敌人或黑客截获也没关系,因为它不能用来解密。在这个意义来讲我们不太担心鑰的交递。
汤 :那也只能用作B 对 A的单向加密通讯啊。
林:对,但对某些应用这就足够了。我给你举一个例子吧, 你上网到你的银行网站,你会看到银行互联网地址是以 https 开头而不是 http, 这表示通讯是加密的。首先银行的网站会给你那一方发一个公鑰,然后https 所调用的软件就会在你方(比如你的laptop) 随机(random) 地搞出一个新的“对称鑰”,再用所收到的公鑰把这个对称鑰加密送回银行, 银行的一方就可以用它的私鑰来解密得到这个对称鑰,在这之后通讯双方就可以用这个对称鑰加密和解密了。如果你再输入你的ID和密码,这些数据都会经过对称鑰加密後才送出。这里所说的“对称鑰”可以用作加密和解密。
黄:你们扯远了,我们在讨论比特币, 并不是要深入研究加密法。
汤 :我偏要林多讲一下对称鑰。
林:我只能讲一个对称鑰的例子。在这里对称鑰可以看成一个bit string, 就是一串0和 1, 实用的对称鑰起码有128 bits 那么长。这些0和 1的排列就决定你怎样去加密。 比方说你的对称鑰是01110101 ………..
作为简化例子你的加密软件可以把前三位数目 011 拿出来化为十进,那就是3,然后再拿第四位来作左右位移的指标(0左1右),现在第四位是1, 那我们就把你要加密数据在电脑里的二进数目向右移3位来加密。这种把戏还有很多,都是按加密鑰的0 和 1 的排列来运作的,解密时也按这个密鑰来作逆运算。加密解密都用它,所以叫对称鑰。怎样把通讯一方搞出来的对称鑰安全的交到通讯的另一方是密码学的重要课题。
汤 :你再详细讲一下数字簽章.
林:据我所知数字簽章首先是从RSA 编码法发展出来的。RSA 有一个特点,那是不单止用公鑰加密后可以用私鑰解密, 倒过来用私鑰加密后也可以用公鑰解密。你的私鑰就可以用来簽章,当你要在一份电子文件簽章的时侯,你的软件就用一个散列函数 (hashing function) 把这篇文件花作一个整数N (散列函数对不同文件会算出不同的整数,详情会在另外一篇文章 "sha256"去解释), 然后用私鑰把N加密变成另一个整数M, 再把N, M, 和你的公鑰公诸于众, 这就完成了你对这个电子文件的簽署。如果有人想验证时他可以用你的公鑰去解密M, 如果答案是N, 那就证明了那是由你的私鑰所簽发的。
汤: 那怎样保证N是从那篇文件得到的?
林:那个散列函数是公开的,你可把那篇文件用散列函数来算一次去验证N.
黄:对商业合同的电子文件现在可以找专门机构做这种数字簽章的,你从它那里得到你的私鑰,在它的网站簽发,别人也可以上网去验证。从2000年起中国的合同法就承认了数字簽章。
汤 :那比特币怎样去用数字簽章?
林:你的比特币钱包不是有私鑰吗?当你作比特币买卖时它的软件就会把你交易的数据用散列函数化成整数,再用你的私鑰加密变成另一个数,然后把这两个数目连同你的公鑰送出去。当这些数据到了节点 (node) 的时候, 节点的软件就可以用你的公鑰对这些数字运算来作比较, 那就能验证这 order是否是由这公鑰所对应的私鑰发出的。这都是不经人手由软件在幕后操作的. 这数字簽章在技术上是基於椭圆曲线加密法.
汤:比特币又是怎样生产出来的呢?
林:这就要长篇大论了。我先要再回到散列函数(hashing function)的问题. 这里所讲的散列 (hashing) 是按照一个既定的方法把一篇文件变成一个数字。 比特币就是用到美国国安局所设计的散列函数 SHA256, 这种散列函数的特点是对不同的文件(就算只相差一个字)不会算出同一个散列数值。可以用作捡验电子文件是否遭遇窜改。 比如说我写了一个遗嘱,但又不想给儿女先看,我可以先把文件的SHA256数值发给他们, 我死后他们就可以把收到的遗嘱用SHA256再算一次来比较,就知道文件的真伪了。
我现在假定有一批人刚好在网上进行了比特币交易,这些交易的记录是在网上公开的,如果你是节点(node) 的参与者, 你把这些未经整理好的交易记录按比特币的特定格式整理好,形成所谓的区块 (block), 再把它串连到已存在的区块上,然后再算出这区块的SHA256数值, 如果你算出来的散列数值前面有足够的零的话, 那你的工作就会被接受了,你就会得到12.5 个比特币作为报酬,而你串连成功的区块就是新的区块链。 这个过程就叫挖矿 (bitcoins mining), 是全由软件管理的.
汤:你前面算是讲得头头是道, 后面就算我不懂数学也知道你讲错了。既然那个区块是由那些比特币交易记录构成,你怎会一定算出前面有零的散列数值呢?
林:对!你对! 我忘了一点:如果你算不出前面是有零的散列数值, 比特币的运作允许你在那个区块后面再加一些数字,通常是每加一个数字再算一次, 一直算到散列数值前面有足够的零为止。所加的数字在密码学上叫 nonce, 我不知到中文名称。
黄:事实上不止你在算,外面有几千人也在算,第一达到足够的零的就得到这12.5个比特币。其他人就要等下一次了。SHA256 这个散列函数的数值是有256位数的二进数目 (256 bits),前面有足够的零就是说那是足够小的数目。
汤:那散列数值要多小才叫成功呢?
黄:不知道! 这完全取决於比特币的运作系统。比特币面世之初挖矿是容易得多的,现在就要很多个零,比特币的运作系统故意把难度增高来减慢比特币增加的速度.
汤: 这实在无聊! 一大堆人在用 SHA256 散列函数去碰彩。
不过我要加一句。我们以前所说的比特币交易要等到挖矿者把交易者的交易记录放到他们的区块串连成功后才算交易成功。
汤:那要等多久呢?
黄:据说不会太久,因为很多人在挖矿. 我也听说过交易者宁愿付多一点手续费,企求挖矿者优先把他的交易放进区块.
汤:有人说去挖矿就是去解一个数学难题。
林:如果真的是这样比特币都被读数学的挖走了。我看用 nonce 去凑拼出前面是零的散列数值那种闹剧被误解为数学难题了。实际正如你说大家都是用超快电脑或特制电脑用大包围的办法去碰彩. 不过从另一角度来看, 设计者是用此来减低新比特币的产生速度.
黄:我们刚才对区块的讨论不够深入。其实把新区块串连到已存在的区块上加上它的散列数值就形成所谓的区块链 (blockchain). 它就是一部由比特币面世到目前所有交易的档案。这个区块链立刻会在比特币网中广为流传。而这个散列数值也是记录在区块链上的,谁都可以重新用SHA256 散列函数去把区块链的数据再算一次来验证这个散列数值。 通过这个机制我们可以保证这些档案不会被窜改,区块链在比特币网中广为流传也保证了比特币的生存空间。
还有, 用 nonce 去凑拼出前面是零的散列数值也不算是闹剧,这个过程叫 proof of work (工作量證明),这个过程要花时间要花资源,就算黑客掌握了区块链的知识,他要去改动区块链的数据也得问自己那是否值得, 因为对改动后的数据他得重新用 nonce去凑拼出前面有足够零的散列数值。挖矿者挖矿成功实在是带有幸运成分的,很可能他挖了300次只有一次成功。黑客也能这样幸运吗?
林: 你们对比特币的前景怎看?
黄:在技术上来讲你不可能取缔比特币, 中国在2017年9月关了三个比特币exchange, 只能使比特币的流通缓慢下来,并不能制止比特币的网上交易。但比特币近来的暴涨是不健康的,很可能引发一场暴跌。现在外面又有这么多的虚拟货币和它竟争,我不会去现在去买比特币的.
汤:外面的 Ethereum, Ripple, 和Litecoin 都有它们的市场,但规模远不如比特币大。
黄: 既然我们提到了散列函数,我不妨多口问你们一句,你有没有担心过你银行户口的password被银行的IT职员偷了呢?
林: 我从没听过这样的事。
黄:不用担心,银行绝不会在他们的硬盘里储藏你原来的 password, 他们只会储藏你 password 的散列数值. 你可瞭解为scramble 后的password, 一个数目字。当你下一次 login 的时候,银行的电脑就会把你输入的 password 同样 scramble一次去比较硬盘里的散列数值来确定你的 password。计算散列数值他们可以用 SHA256 或别的散列函数。
林:黄的意思是你不可能从散列数值倒过来重组出原来的 password. 不过这次黄也是离题了。还是回到比特币的讨论吧。
汤: 我认为挖矿这事是浪费资源。你看一大堆人用大功率的电脑日以继夜开足马力去“挖”, 这有点像….
黄:像什么呢?
汤:像大跃进时期的大炼钢。
