Bitcoin

比特币底层工作原理

风险投资人 Fred Wilson 在自己的博客 http://avc.com 上面推荐了一个视频 http://avc.com/2013/10/video-of-the-week-bitcoin-under-the-hood/ 《比特币底层工作原理》,视频在 youtube 上面。youku 上我搜了一下,有人给配了中文字幕。不过,我实在是太喜欢这个视频了,所以今天这期是我自己对这个视频的前面的一小段精彩内容的翻译和幻灯片的重新制作,希望你喜欢。

什么是比特币

首先来看看,宏观上,比特币到底是个什么东西?就是个账本,上面记录着账号和账户余额。账本有很多拷贝,比特币网络上的每一台计算机上都有一份。这些账户上的数额其实也对应不上现实世界里的任何东西。比特币有价值,就是因为人们愿意拿比特币去买东西。它有价值,说白了就是因为大伙认为它有价值。这一点上,跟现实中的货币也是一个道理。

需要付款时,你就向比特币网络公布一条交易信息,让你自己的账户余额减少,让收款人的余额增加。这样网络上的其他人也会把这个交易更新到自己节点的账本中,然后进一步广播这个交易到更多人的节点。这个,再加上一点数学方法实现的安全机制就是所谓的比特币系统了,简单地说,比特币系统就是一个让大量计算机共同维护一个账本的系统。

不需要信任

这个听起来似乎和银行维护他们的大账本没有太大区别。但是实质上,由于账本是由一群人,而非一个组织来维护,所以比特币系统有着自己明显的特点。首先,使用银行的时候,你只是知道你自己的账户信息,但是比特币这里,每个人都知道其他所有人的信息。同时,你可以信任你的银行,或者至少出了问题你知道找谁打官司,在比特币网络上你是和匿名陌生人打交道,所以你不能相信任何人。

好在比特币系统上,你不需要信任别人。有数学的方法可以来保证系统正常运行。下面咱们就来解释一下,比特币系统是如何让一帮互不认识的人来维护你的账户的。

最基本的,如果 Alice 想给 Bob 付款,她只需要向网络上广播一条信息,里面包含付款对象和金额,比如她要给 Bob 五个币。每一个收到这个信息的节点都会用这个信息来更新自己的账本,然后把信息传递给其他节点。但是这些人如何来确认交易信息的发出者就是 Alice 本人呢?

私钥签名保证安全

比特币有自己的一种很独特的密码,叫做“数字签名”。跟纸笔形式的签名一样,数字签名可以用来确认签署者身份。同时要知道,数字世界里面拷贝一个东西可是非常容易的啊,所以数字签名有着一个巧妙的方式来解决这个问题。跟我们平常用的密码不同,每次交易的数字签名都是不一样的。因为在比特币的世界里,我们一直会跟完全陌生的人打交道,所以你肯定不希望把可以反复使用的密码暴漏出来。

数字签名使用了两个非常有意思的秘钥,私钥是用来创建数字签名的,公钥是用来验证数字签名的。私钥可以被认为是真正的密码,数字签名可以帮你证明你拥有真正的密码,同时不需要真的把密码展示给别人。公钥同时也是你的收款地址,所以当别人给你汇款时,你只要给他你的公钥就行了。当要花钱的时候,你就需要证明自己是这个公钥的真正的拥有者。需要用交易信息加上私钥来生成数字签名,这样他人就可以拿到你的数字签名和信息,通过运算验证这些是不是和公钥对应的。通过数学方法,人们可以不看私钥就能确认私钥持有者的身份。

很重要的一点是,因为签名是依赖信息本身生成的,所以每个交易的签名都不同,你拿到我的一个签名,也不能在另外其他的交易中使用。另一方面,也没有人能够篡改交易信息,因为信息变了,签名没变,那么验证也就通不过了。

这个背后的数学原理是比较复杂的,如果你感兴趣,可以 google 一下 Elliptic Curve Digital Signature Algorithm 和 Mathematical Trapdoor 。