区块链的一些背景知识

区块链最近很火,自己在看一本书了解一下,这里用自己的语言组织了一下区块链的一些背景知识~

传统的财务安排

传统的交易是以物物交换的形式发生的,货物交换有一个显著的弊端就是需要多方之间的协调。

随着社会发展,有两样东西出现解决了协调的问题:信用和现金。

以现金为基础和以信用为基础的两种系统难分伯仲:

  1. 现金可以帮助我们精确的确定一个东西的价值。但以现金为基础的系统,需要一些初始的现金分配来启动整个系统。
  2. 以信用为基础的系统,获得他人债务的人需要承担一定的风险,因为有可能另一方不会回来解决欠下的债务。

在线使用信用卡交易的问题

当我们使用信用卡进行在线交易时,目前更多是通过 PayPal 等第三方机构,这种方式避免了将信用卡信息直接交给卖方。

这个架构的好处是买方不需要将信用卡具体信息交给卖方,避免了风险。甚至不需要给卖方个人信息,从而保护了个人隐私。但是存在的问题就是多出的交易步骤增加了交易成本,买方和卖方都需要在同一个中介商开通账户。

中间者架构的根本问题在于认证,信用卡和现实中的实体进行了绑定,交易便捷性和安全性很难兼顾。

比特币完全去除了和现实身份的绑定,从而巧妙避免了这个问题,每个用户使用公钥作为身份。

现金

现金提供了两个附加的优点:

  1. 更好的匿名效果。
  2. 可以离线交易。

比特币没有完全做到上面两点,但是比较接近:

  1. 比特币没有现金一样的匿名性,由于总账完全公开,你的交易可能会被收集在一起,进而得到你的身份信息。
  2. 比特币不能完全离线交易,但是好在它不需要一个中心化的服务器,而是依赖点对点网络进行交易。

将密码学应用在货币中

1983年 David Chaum 最早提出将密码学应用在货币中,方法大概是:
每一份“钱”上附加一个签名和一个唯一的序列号,卖方收到这样一份“钱”时,除了验证签名,还会去服务器验证这个序列号是否已经被使用了。唯一序列号的作用就是为了防止一分“钱”被花了两次。卖方定期将收到的“钱”交给服务器,获得新的带有签名和唯一序列号的“钱”。

这个方法的问题在于没有匿名,由于每次交易都需要到服务器验证序列号是否被使用,那么服务器就能记录每个人的消费记录。

Chaum 提出了第一份严肃的数字货币方案,他找到了能使系统保持匿名的同时解决一份钱被花两次的方法:

每当一个人从服务器获取一份新的钱时,这个人指定一个序列号,这个序列号服务器不可见,之后服务器对这个序列号进行签名。买卖双方使用这个签名来进行交易。

这个方法依旧需要一个中心化的鉴权机制,如果这个中心服务器挂了,整个系统也就不能工作了。

为了解决一分钱被花费两次的问题,一个聪明的方法就是不在去组织一分钱花两次,而是想办法检测一分钱花两次,在交易发生后卖家再去验证这份钱的有效性。Chaum-Fait-Naor 方法为:每个属于你的钱都和你的身份一同加密,除了你之外没有人能够解开,银行也不能。每当你要花这个钱时,卖方会要求你解密这个加密串的随机一部分,并将这部分记录下来。这段解密并不能让卖家完全得到你的身份,但是如果你想要再次花这份钱时,两次消费解密的两段密钥都会最终传到银行,银行将能够通过这两份解密后的信息完全得到你的身份(进而向你讨债)。Chaum-Fait-Naor 方法得到的货币不能够再分,如果你有100块,想买75块的东西,需要先去银行兑换成75块和25块的两份货币。除此之外 Chaum-Fait-Naor 方法在性能等很多方面都还有改进空间。

将密码学应用在货币中的尝试有很多,也有例如 DigiCash 这样的创业公司,但都失败了,主要的问题是不能够说服银行和商人使用这个货币。

比特币允许用户和商人、用户和用户间的交易,它其实并不对用户和商人进行区分。用户与用户之间能直接进行交易这一特性,或许是使比特币成功的关键。

保持货币稀有

对于虚拟货币来说,什么让他真正的有价值呢?有一类方法是使用各种等价物来为虚拟货币做背书:

  1. 将一定量的美金存在银行,发行相应数值的虚拟货币,与美金一比一兑换(美元做背书)。
  2. 某个国家直接授权政府部门印发数字货币。(国家信誉做背书)
  3. 将一定量的黄金存在一行,发行一定数值的虚拟货币,规定与黄金的兑换比例(黄金做背书)。

使用等价物作为背书,那么等价物自身价格、信誉的变化也会影响虚拟货币的变化。那么有没有一种方式可以让虚拟货币独立有价值呢?

答案是肯定的,那就是稀有性。想要让一种虚拟货币有价值,需要在设计上保证这种虚拟货币是稀有的。数字货币保持稀有的方法,是系统设计要求通过解决一个花费时间计算的问题来挖取新的虚拟货币(也就是说的挖币)。

在比特币中,这个需要花费时间计算的问题是一个改进了的 Hashcash 的方法。

区块链

区块链是比特币的另一个关键组成部分,相当于一个总账,安全地记录所有比特币交易。

区块链内容很多,比特币对于区块链的应用有以下要点:

  1. 比特币使用了一个 Hashcash-esque 协议,延迟了新块加入到链中的时间。
  2. 区块链系统确保了新块创建的平均速度是10分钟一个,但是在两个新加入块之间的间隔是变化的。
  3. 对于比特币来说,如果一个攻击者想要改变之前的历史,需要比其他参与者加起来要多的算力。(也就是超过50%总算力)

比特币组合了一个周期性自动调整问题困难度的机制。(因为硬件速度一直在发展)