大数跨境

经典项目解读之比特币白皮书(一)

经典项目解读之比特币白皮书(一) Bitkoala考拉财经
2018-10-09
2
导读:本文主要分成四期解读中本聪的白皮书,让大家对使用了区块链技术的比特币这个成熟应用能快速理解

本文主要分成四期解读中本聪的白皮书,让大家对使用了区块链技术的比特币这个成熟应用能快速理解。边框内的文字是白皮书原文翻译,注解部分是解读。让我们从摘要开始:

摘要:本文提出了一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何的金融机构。虽然数字签名(Digital signatures)部分解决了这个问题,但是如果仍然需要第三方的支持才能防止双重支付(double-spending)的话,那么这种系统也就失去了存在的价值。

我们在此提出一种解决方案,使现金系统在点对点的环境下运行,并防止双重支付问题。该网络通过随机散列(hashing)对全部交易加上时间戳(timestamps),将它们合并入一个不断延伸的基于随机散列的工作量证明(proof-of-work)的链条作为交易记录,除非重新完成全部的工作量证明,形成的交易记录将不可更改。

最长的链条不仅将作为被观察到的事件序列(sequence)的证明,而且被看做是来自CPU计算能力最大的池(pool)。只要大多数的CPU计算能力都没有打算合作起来对全网进行攻击,那么诚实的节点将会生成最长的、超过攻击者的链条。这个系统本身需要的基础设施非常少。信息尽最大努力在全网传播即可,节点(nodes)可以随时离开和重新加入网络,并将最长的工作量证明链条作为在该节点离线期间发生的交易的证明。

注解:任何一篇白皮书或论文摘要部分都非常重要,其实摘要最重要的是告诉读者,我发现了什么问题,并且通过什么办法解决这些问题,且说明了解决这个问题的主要方式和优势。

其实你只要仔细看了比特币白皮书摘要部分就知道中本聪抛出的问题了,“一个需要第三方支持的点对点电子现金支付系统是没有价值的”这容易和传统上的p2p形成误解,很多p2p系统其实是需要一个第三方支持的,比如有些p2p系统需要一个或多个索引服务器,迅雷下载就是比较典型的,他需要一个中心化的服务器帮助点对点建立连接,所以我们要搞清楚p2p与去中心化的p2p,知道了这些,比特币以及其他竞争币就可以一句话进行概括了,“一个去中心化的p2p支付系统”,既然是支付系统就当然要解决双花问题,这和是否是去中心化没有关系,只是中心化的系统更容易解决双花问题而已。

那么通过摘要我们就知道了,比特币系统要解决的两个主要问题,一个是去中心化的p2p系统,一个是支付要解决的双花问题,所以整个白皮书提到的技术方案都是围绕这两个问题展开的,其实中本聪在写这篇论文时,有关去中心化的p2p系统已经有比较完善的解决方案了,所以白皮书的重点都放在如何通过p2p系统解决双花问题。

要解决双花问题就必须记账核对,那么如何在一个没有中心的p2p系统中记账又受到认同呢,比特币引入了基于时间戳的随机散列,并且让其形成前后文相关的序列,这就是为什么称之为区块链的原因。

这里必须插一句,我认为记账且不可更改是一个比特币的副产品,首先区块链记账不可更改是有前提的,这经常被称为51%攻击,根据原文摘要的这句话“除非重新完成全部的工作量证明,形成的交易记录将不可更改”,由于采用了复杂的POW工作量证明计算,更改交易记录将非常的耗时和需要大量运算,从客观上实现了“不可更改”的目的,但是从业务设计的角度,这是一个缺陷,如果更改是交易双方认同的而且合法的,或者说被绝大多数节点认同的呢?由于技术的限制比特币系统进行了取舍,所以不得不保留了这个缺陷(参见CAP原则),同时在白皮书中把这个缺陷讲成了一个特点,这是中本聪先生非常聪明的地方。

其实比特币后来的一些事实证明,比特币的滥用也是因为这个缺陷,基于暗网的非法交易,网络勒索,包括黑客盗用比特币,“门头沟”交易所跑路等,都是利用了这个缺陷,其实根据“多数人正义“这点来讲,这些交易都应该撤销,但是这个要回滚交易的代价实在太大,大到不可实现(需要分叉),看到这里你就知道比特币系统不是你想象中那么完美了吧。

摘要中还透露一个比特币系统的重要特点”这个系统本身需要的基础设施非常少“,因为没有了中心化的服务器存在,相关的维护、备份、容灾、管理等成本会大大降低,这都是在比特币白皮书中需要仔细关注的。

1.简介:

互联网上的贸易,几乎都需要借助金融机构作为可资信赖的第三方来处理电子支付信息。虽然这类系统在绝大多数情况下都运作良好,但是这类系统仍然内生性地受制于“基于信用的模式”(trust based model)的弱点。我们无法实现完全不可逆的交易,因为金融机构总是不可避免地会出面协调争端。而金融中介的存在,也会增加交易的成本,并且限制了实际可行的最小交易规模,也限制了日常的小额支付交易。

并且潜在的损失还在于,很多商品和服务本身是无法退货的,如果缺乏不可逆的支付手段,互联网的贸易就大大受限。因为有潜在的退款的可能,就需要交易双方拥有信任。而商家也必须提防自己的客户,因此会向客户索取完全不必要的个人信息。而实际的商业行为中,一定比例的欺诈性客户也被认为是不可避免的,相关损失视作销售费用处理。而在使用物理现金的情况下,这些销售费用和支付问题上的不确定性却是可以避免的,因为此时没有第三方信用中介的存在。

所以,我们非常需要这样一种电子支付系统,它基于密码学原理而不基于信用,使得任何达成一致的双方,能够直接进行支付,从而不需要第三方中介的参与。杜绝回滚(reverse)支付交易的可能,这就可以保护特定的卖家免于欺诈;而对于想要保护买家的人来说,在此环境下设立通常的第三方担保机制也可谓轻松加愉快。在这篇论文中,我们(we)将提出一种通过点对点分布式的时间戳服务器来生成依照时间前后排列并加以记录的电子交易证明,从而解决双重支付问题。只要诚实的节点所控制的计算能力的总和,大于有合作关系的(cooperating)攻击者的计算能力的总和,该系统就是安全的。

注解:我是这样看待简介的,中本聪很清楚比特币系统因为妥协所造成的缺陷,就是刚才说的不可更改,所以在简介中就阐述了可更改的弱点,这也是我认为最有争议的地方,“如果缺乏不可逆的支付手段,互联网的贸易就大大受限”这点有些牵强

但是,简介中说明的通过数学,通过密码原理代替中心化中介信用(金融机构)使交易达成却是革命性的,这也是比特币最有研究价值的地方,这里面需要注意的是比特币系统代替的是中心化中介的信用,并不能保证交易双方的信用,相反一旦交易的某一方出现信用问题这笔交易是无法撤销的,对于初次接触比特币的人一定要尤为注意,也就是说和传统银行交易不同,一旦你确定支付,哪怕对方是骗了你,你的交易损失是无法追回的。这里面又一个悖论,你是信任中心化中介的信用还是信任你的交易对方的信用,这就要仁者见仁了,如果你选择后者那么比特币系统是你的好选择,如果你选择前者,那么传统的中心化支付是你的选择。

总之,白皮书简介传达给我们的就是,你需要一个去中心化中介,并且主要保护卖家的系统,如果你需要保护买家,你任然需要一个第三方担保机制,"而对于想要保护买家的人来说,在此环境下设立通常的第三方担保机制也可谓轻松加愉快"

而对于系统的安全性完全通过攻击算力成本保障,这是一种算力的比拼,你可以简单的理解为,正常的算力是大于想作恶的算力这个前提的。了解了这一点,你就会知道如何选择合适的数字货币,避免山寨币陷阱了。

2.交易:

我们定义,一枚电子货币(an electronic coin)是这样的一串数字签名:每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。

注解:白皮书的这张图非常重要,它说明了比特币的交易记录方式,是一个基于时间序列的链式结构,如果说是链式结构可能有人理解起来有困难,你可以把每笔交易想象成一条记录,这条记录记录了付款人和收款人以及交易数据等重要信息,如果您有数据库基础,那么这每条记录是非常容易理解的,如果没有数据库技术,你可以想象成为是纸上记录的条目,比如“王二麻付给大鱼2块钱”。

有意思的来了,我们还是用简单语言来举例,如果是数据库或者纸上的记录,那么很容易更改,所以必须用加密的方法保障这条记录不被更改,于是比特币系统采用不对称加密算法对这条记录进行加密,不对称加密算法有个特点,公钥(public key)可以公布出去让所有人知道,这也就是常说是比特币钱包地址(当然比特币钱包地址会对公钥重新编码不影响实质),那么“王二麻付给大鱼2块钱”这条记录就是王二麻同学用大鱼的公钥进行了加密,其内容只有大鱼用私钥才能解开,换言之也就是大鱼拥有了这条“记录”。

那么如何证明这条记录是王二麻创建的呢,这里面稍微有点绕,因为王二麻在创建这条记录的时候通过自己的私钥对这条记录进行了签名(一串HASH数据),同时又在交易末尾公布了自己的公钥,如果你熟悉不对称加密算法就知道,通过王二麻的公钥进行计算,如果得到的值和签名一样,你就知道这是王二麻用自己的私钥创建的数据了,因为别人是不知道王二麻的私钥的。

原文中“我们定义,一枚电子货币(an electronic coin)是这样的一串数字签名”,很容易让人误解的是这里的电子货币是个具体数字,其实它是一条加密的记录(数据),也就是说你拥有的交易记录才是你的数字资产,这里面你需要注意的是,这条记录里面没有你的姓名、身份证号等这些中心化系统中常见的识别所有者的字段,唯一表示你身份的是你的公钥(钱包),证明你所有权的是你的私钥(密码)。

当你拥有支付一条记录时,你就拥有了一定数量的所谓比特币,这时候你就可以创建一条新的记录把它花出去,那么会重复图中的过程,你需要用别人的公钥创建一条新的新的记录,这里需要注意的是,这条新的记录里面包含了你从别人那里收到这条记录的信息(图中的签名过程其实为了证明你确实拥有过这条记录,这是不对称加密算法的特点,公钥可以加密数据或验证数据,私钥可以解密数据或对数据签名),如此循环往复形成了一个交易链条。

通过公开公钥就可以知道这条记录的来路,直至最终到最初的所有者(很多改良的数字货币为了强调匿名交易和不可追踪,修改了交易结构,让这个过程无法进行),这就是我们说的上下文相关,如果你要篡改记录是很困难的,你需要修改所有这个链条上的交易,而且这些交易记录都是加密的,且在数字加密上是循环相关的。

那么第一笔交易如何来的呢,这就是我们说的“挖矿”这是对矿工进行POW工作量证明的奖励,简单讲就是不停的进行HASH计算碰运气了,得到最原始的“随机数列”,这个以前有文章说过。

下面我们继续看原文提出的问题:

该过程的问题在于,收款人将难以检验,之前的某位所有者,是否对这枚电子货币进行了双重支付。通常的解决方案,就是引入信得过的第三方权威,或者类似于造币厂(mint)的机构,来对每一笔交易进行检验,以防止双重支付。在每一笔交易结束后,这枚电子货币就要被造币厂回收,而造币厂将发行一枚新的电子货币;而只有造币厂直接发行的电子货币,才算作有效,这样就能够防止双重支付。可是该解决方案的问题在于,整个货币系统的命运完全依赖于运作造币厂的公司,因为每一笔交易都要经过该造币厂的确认,而该造币厂就好比是一家银行。

注解:这一段话里面最重要的是提出了关于双重支付(双花)的问题,我们前面说过,根据这个交易链条,我们可以知道之前的每位所有者,但是有一个东西是不知道的,那就是某位记录的拥有者是否同时创建了两条或多条新的记录,将他的比特币花出去,如果没有一个机制来保证一切都会乱套。

“通常的解决方案,就是引入信得过的第三方权威,或者类似于造币厂(mint)的机构,来对每一笔交易进行检验”中本聪在白皮书指出了传统的两种方法,并且说明了他们的坏处。

第三方权威验证就是典型的中心化系统,这个和设计初衷违背pass掉了,造币厂模型其实也是中心化的系统,中本聪也将其pass掉了,但是中本聪创造了交易公布模型,即人人都可以参与验证是否双花的过程,在比特币系统中存在功能不同的节点,如果你参与到交易的验证过程中那么你也就是一名“矿工”了,通过矿工模型你不但可以挖到新的比特币,也可以参与验证计算获得奖励,这就是为什么比特币交易过程中你需要花费手续费的原因了。

下面我们接着看中本聪提出的如何解决造币厂中心化问题:

我们需要收款人有某种方法,能够确保之前的所有者没有对更早发生的交易实施签名。从逻辑上看,为了达到目的,实际上我们需要关注的只是于本交易之前发生的交易,而不需要关注这笔交易发生之后是否会有双重支付的尝试。为了确保某一次交易是不存在的,那么唯一的方法就是获悉之前发生过的所有交易。在造币厂模型里面,造币厂获悉所有的交易,并且决定了交易完成的先后顺序。如果想要在电子系统中排除第三方中介机构,那么交易信息就应当被公开宣布(publicly announced),我们需要整个系统内的所有参与者,都有唯一公认的历史交易序列。收款人需要确保在交易期间绝大多数的节点都认同该交易是首次出现。

注解:这段话里面最需要理解是这句“从逻辑上看,为了达到目的,实际上我们需要关注的只是于本交易之前发生的交易”,前文我们知道比特币的交易是一个时间序列的链条,在产生一条新的交易记录时永远有先后顺序,即便是双花你总有先后顺序,你不可能同时创造两笔交易,那么我们只需要证明其中一条是有效的即可,并且将其记录到交易链条上即可,那么其他的交易就是无效的了(这也就是比特币的交易确认原理,交易确认是需要时间的),多么聪明的原理啊,中本聪确实聪明!

要证明其中一条是有效的又不允许中心化从存在,那么只有一个办法了,就是发动所有的人参与这项活动,进行“多数人的正义”,所以原文中“那么交易信息就应当被公开宣布(publicly announced)”这句话就容易理解了,如果你不公布交易信息,其他人怎么进行交易验证呢?

比特币就是在交易创建时将信息公布出去,如果有多数人优先确认并将其记录下来,这个过程就完成了,举个简单地例子,比如5个人在一起同时用纸记录一个交易,现在有人说“王二麻给大鱼2块钱”,这里面有三个人都同意这件事并将其记录下来,并把记录的纸复印5份,人手一份,那么他们就有唯一受到认可的记录了,也不知道这个比喻是否恰当。

3. 时间戳服务器  

本解决方案首先提出一个“时间戳服务器”。时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样。显然,该时间戳能够证实特定数据必然于某特定时刻是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一个链条(Chain)。

注解:时间戳很容易理解,以前有文章说明(参考文末延伸阅读),原文中说“时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳”,加上时间戳容易,但是如何取得时间呢,如果是加上本机时间,那么每个节点的时间都不统一,况且有人恶意更改本机时间呢!

如果不是本机时间,去网络上取国际标准组织的时间似乎是可行的,但是,这是典型的中心化操作啊,和中本聪倡导的去中心化理念不符。

那么如何获得一个去中心化的时间呢,我也是后来才搞清楚的,其实方法很简单,还是利用“多数人的正义”,时间来自于连接的其他节点(node)时间的中位数(mean,是个数学概念,比平均值更不受极端数字影响),要求连接的节点(node)数量至少为5,中位数和本地系统时间差别不超过70分钟,否则会提醒你更新本机的时间。同时,在接收到新的block时会拒绝时间与自己差距+2小时和-(前11个block时间中位数)的block。

由此我们知道了这个时间的正确来源了,还是利用大多数人的机器时间,其实比特币的核心理念一直是认为多数人是正义的,我一直在想如果从一开始比特币的系统时间就比实际时间快1年的话,其实对整个系统是没有影响的,原因很简单后加入的节点都会按照前面多数人的时间中位数更改自己的节点时间,最后成为比特币系统自有的时间模式,好在比特币系统运行刚开始,时间还是比较准确的。

了解比特币时间戳的机制后,后面的就容易理解了,将一段时间内,准确的说是,两个区块的产生间隔中的所有交易进行Hash运算,再盖上时间戳,这样我们就有了一个按时间序列产生的所有交易的记录了,区块链就这样形成了。

因为时间是线性增长的,所以区块链是按照时间先后顺序组织起来的,所以核心代码中关于时间的机制异常重要,我认为这是安全上比较脆弱的环节。

往期精彩回顾

教你如何在泥沙俱下的区块链项目中鉴别“真金”

【项目分析】云产链IHT:落地于房地产行业的区块链项目

采访币咖交易所张智皓:熊市下,为什么要打造第一家投顾挖矿的交易所?

区块链的自我洗牌在即,传统企业的下一个风口曝光!

终于赴港IPO,比特大陆下一盘大棋,一代矿霸的陨落与再度崛起!

瀚方创投许量、LiBaiDrunk莫飞做客「捕手对话」:行情跌跌不休,区块链企业究竟何去何从?

套路还是阴谋?瑞波币再次超过以太坊,暴涨背后暗藏玄机

币价就像登山,牛市即将来临——神马M10发布会闪亮展现

历史性的变革——论商业的本质及其基于信息化趋势下的转型

杭州互联网法院全国首创司法区块链正式上线!

香港瀚海ACT主题会议暨全球区块链青年领袖(香港)峰会

启赋资本宋昶做客「姗姗话天使」:从投资人角度教你了解区块链的投资策略

【声明】内容源于网络
0
0
Bitkoala考拉财经
1234
内容 766
粉丝 0
Bitkoala考拉财经 1234
总阅读2
粉丝0
内容766