比特币随想 - 从数字签名到信任

长话短说:

  • 比特币通过数字签名,把归属权问题从信任问题(高成本)变成了验证问题(极低成本)。
  • 比特币通过工作量证明,把排序和维持不变的问题从信任第三方(不稳定且变数多)变成了信任能源消耗(稳定且标准)。

起起伏伏的密码学

密码学最辉煌的世代可能是二战的时代(很不幸),战争把人类的通讯推向了密文时代,如何把一段信息从 A 传送给 B,并且不泄漏给第三方成了极为关键的问题,因为泄漏信息的代价可能是战争的失败。

二战结束后,密码学仍然很重要,但是转为地下,而且继续主要为军事目的服务。毕竟,普通人能有什么不能告人的秘密呢(笑)。

然而,90年代,互联网的出现再一次把密码学推向了风口浪尖!人们在互联网互动、娱乐、支付、交易,突然间普通人的信息也很重要了,人们可不希望自己的银行秘钥因为一次晚上交易就被盗,或者误认为一个黑客网站是他的银行网站。

但是,密码学虽然成为了互联网的主要部分,密码学本身却还只是在一个小圈子里,比如学术圈和一些互联网的极客,毕竟普通人不需要知道信息论,也不需要知道如何分解质数也可以上网购物。

然而,2009年一切都变了,一个匿名者:中本聪,在圈子里发布了一个名为比特币的点对点支付网络的提案。从那以后,民用领域最值钱的密码学产品诞生了:比特币。如今,你可以用 2 个比特币在村里买一栋不错的别墅。

数字签名 - 如何证明你发出这段比特

比特币的基石之一:数字签名(Digital Signature)。数字签名可以干什么呢?

咱们说,小明电脑里面有个文件,文件包含:小明给小红 40 元。现在小明把这份文件公开在网络,但是小明希望小红可以确认这文件的内容真的是小明本人发出的,因为互联网的特性,任何人都可以创建一个文件,然后写上:小明给小红 40 元,甚至写上:小明给小红 400 元。如此一来,小明岂不是成了冤大头,背上巨额债务?

小明有两个选择:回到原始时代,写一封信给小红,然后签字画押;寻找一个大家都信任的第三方,证明这段信息是小明本人发出的,并且存留档案以后后续查阅。然鹅,这两个方案都不太理想,因为即使是签字画押也需要司法系统来背书,总之非常低效,与互联网时代格格不入。

非对称密码学给出了答案。现在有一个办法让小明可以把这份文件公开在网上,并且小红可以验证这真的是小明发出的,而且其他人却不能伪造这份文件,即使这份文件只是一串比特而已。很神奇不是吗?

以下是小名的做法:

  1. 准备两个整数,一个秘密的,d;一个公开的,e (咱们先不说怎么准备,这是数学家们的事情),只需要知道这是两个双生的数字,相互关联,是成对出现的
  2. 把 e 公开在网上,告诉大家:嘿!这是我的公钥,你们可以通过他来验证信息是不是我写的
  3. 用 d 对那份文件的比特进行操作(没错,程序员负责这里,不是你)得到另一个整数,sig。这个 sig 就是所谓的数次签名了
  4. 小明公开了他的文件,同时也公开了这个签名。然后告诉大家:嗨!这是我写给小红的信息,你们都来看看!哦对了,这是这份信息的签名,你们可以用之前的整数 e 来验证这信息确实是我写的。
1
2
3
magic_number = h(e, d) <-- e 和 d 是相关的,但是不同的
sig = f(m, d) <-- 签名就是用 d (私钥) 处理信息后,得到的一串比特
m =?g(sig,e) 验证就是用 签名 sig、公钥 e 计算后得到数字跟信息源比较,对上了就验证成功

如此,小明就证明了信息的所有权。公钥密码学精妙的地方在于:咱们假设签名的信息是 m,即使m,e 和 sig 都是公开的,而且 sig 是根据 m 和 d 计算得到(没有任何随机性哦,确定的函数),黑客也无法轻易获得小明的私钥,d!奇妙的是,任何人都可以通过
m,sig,和 e 验证信息是否属于生成 e 的私钥 d,即小明!

但是这里有两个问题:

d 是秘密的,只有小明一个人知道。但是如果 d 被泄露,任何人都可以伪造小明的身份发言。在缺乏第三方的时候,你不是你,你的私钥就是你。所以比特币圈子有个名言:不是你的私钥,不是你的币!

另外,我们说小名公开了自己的公钥,e,但是 我们如何相信 e 属于小名呢?。当然这个问题对比特币来说不重要,以为没有任何动机发布一个错的公钥。但是这个问题对于整个互联网安全却至关重要,为了解决这个问题甚至诞生了一个产业:证书颁发机构!基本上这就是一个被大众信任的第三方,用来确保公钥背真的是公钥应该的主人。

数字签名和比特币

比特币的基础之一正式数字签名。比特币网络协议正式通过数字签名的方式证明交易记录的所有权的。正如刚才的例子,通过数字签名,小明证明了他发出了那段信息,同样,比特币交易的所有权也是通过数字签名的保证的。

中本聪甚至在白皮书中这样定义比特币:我们将电子货币定义为:一串数字签名。所以,下次别人再问你比特币是啥,你就告诉他,比特币是一串数字签名!

我们常说的比特币地址,就是上文例子中的,e,也叫公钥。这么说不全对,因为比特币地址跟私钥,d,的关系并不是一一对应的,而是一个私钥控制多个地址。但是道理一样,我们把地址理解公钥的作用就好了。

而我们常说的钱包,其实就是私钥,d,就是那个你不能告诉别人的秘密数字!这么说也不全对,钱包的核心是私钥,但是钱包本身通常是套用来帮助你与比特币网络互动,但是只要你有私钥,e,你甚至可以直接编程与比特币网络互动,不需要钱包软件帮助你;同样,没有私钥,e,钱包什么也做不了。

信任在哪里

正如公钥密码学把终极问题推向了信任,对公钥的信任;整个比特币网络也需要信任,这可能跟媒体的宣传不符,比特币难道不是去中心化网络吗?不需要信任吗?哈哈,对也不全对。

比特币通过工作量证明去除了对第三方机构的信任,可以有效避免双花。但是比特币终归是交易系统,交易,或者说交流最终都要归于信任!只不过,比特币的工作量证明,有意或者无意的把信任推给了能源!

我们为什么相信比特币区块链记录的信息呢?因为每条信息都需要矿工花费电力和CPU资源,换句话说,每天信息都有能源背书,有巨大的成本。这就是我们信任的基础!

因为有了公钥密码学(数字签名)我们不需要信任交易的归属权,我们只需要验证归属权;但是关于交易还有一个重要的概念就是顺序和不可变性。试想,如果我今天付给你的钱,明天单方面反悔怎么办?你肯定会起诉我,让我付出代价对吧?但是这时我把信任放在了第三方仲裁机构上。

比特币网络通过工作量证明,巧妙把排序和惩罚连接到了能源消耗上,我把信任放在能源的消耗上。只要作弊的经济收益小于作弊的成本,就没有理由作弊。

长话短说

比特币通过数字签名,把归属权问题从信任问题(高成本)变成了验证问题(极低成本)。

比特币通过工作量证明,把排序和维持不变的问题从信任第三方(不稳定且变数多)变成了信任能源消耗(稳定且标准)。