从国际支付角度,翻译了《比特币白皮书》

赵越 Eren ZHAO

共 7228字,需浏览 15分钟

 ·

2021-09-21 15:37

为什么翻译比特币白皮书?

互联网提升了信息分发的效率,比如字节的信息流、滴滴的叫车服务,以及淘宝购物,但是由于互联网的信息都是可复制粘贴的,无法直接传输钱,所以需要第三方的独立机构做信任备注:帮助传输钱。

传统国际支付模型中(如下图),涉及发卡行(Issuing Bank)、卡组、渠道(Vendor)、收单行(Acquiring Bank),每一个组织都要收费。根据不同国度,收费虽然不一致,但是收费一般都很高:国内5‰,南美7%,北美5%等。

02b8a7ba6931192a978d4a54f87bb61e.webp


在不同的地区,因为互联网基础设施以及银行基础设施的发展不同,都衍生了不同类型的支付巨头公司。

中国互联网基建比较好,所以支撑了支付宝的码付,非洲电信业发展比银行业更快,所以有肯尼亚的M-pesa,欧美的银行业基建好,但是银行太多,所以有了对应的Vendor供应商:Stripe,墨西哥的预付凭证等,不同场景下催生了不同类型的公司:

亚洲:码付为主

中国:Alipay, WeChatPay

印尼:OVO,Gopay

菲律宾:Gcash

印度:PayTM

非洲:电信转账为主

肯尼亚:M-pesa

尼日利亚:OPay,USSD

埃及:Fawry

南美:预付凭证为主

墨西哥:OXXO

巴西:BOLETO,Nubank

北美:卡付为主

美国:Stripe,Square,Paypal

等。。。


基于国际支付费率以及各地支付形态不同的背景,又重新看了一遍比特币白皮书、体验了比特币数字货币钱包。也分享出来,希望和相关的国际支付同学进行交流沟通。我的微信:TMTyumu



以下是翻译的比特币白皮书正文




Bitcoin:一种点对点的电子现金系统


摘要. 理想的点对点电子货币系统,通过在线支付,不需要通过金融机构,就可以将钱从一方转到另一方。虽然数字签名提供了部分解决方案,但是如果为了避免双重支付,仍然需要第三方平台的话,那么数字签名系统带来的价值将会消失。我们提出一种解决方案,在点对点网络系统中运行,并能够解决双花问题。该网络通过随机散列对全部交易加上时间戳,将它们并入到一条不断延伸,基于哈希计算的工作量证明的链条,除非从头再做一遍哈希计算,否则这条链不能被复制。最长的链既是一系列被见证事件的证明,也是最大CPU算力的证明。只要大多数的CPU算力被不打算联合在一起的节点控制,他们就会生成最长的链并且超过攻击者。这个系统需要的基础设施非常少:信息尽可能传播,节点也能离开和重新加入,并将最长的工作量证明的链作为他们离开时发生事件的证明。


1.介绍

互联网经济依赖金融机构作为第三方提供支付交易服务。尽管系统运转的足够好,可以支撑起大多数的交易,仍需要忍受信任模型固有的缺点:(1)交易可逆因为金融机构需要调解纠纷。仲裁调解增加了交易成本,限制了实际最小交易额度,导致无法发生小额交易。为了交易不可逆,需要付出更大的成本。由于随时可能撤销交易,所以更需要信任机制。(2)存在欺诈商户需要警惕客户,要求客户提供超额的用户信息。线下使用物理货币进行交易的用户是可以避免这两种情况的,但是在通信网络之中,如果没有一个第三方平台做支持,是无法做到交易不可逆以及不存在欺诈的。

所以我们需要一种电子支付系统基于密码学证明而不是基于信用,使得愿意交易的双方直接交易,不需要第三方平台。交易不可回滚,可以保护商户免遭支付欺诈,第三方托管的方式可以轻松实施保护买家。本篇论文中,提出了一种避免双花问题的解决方案,使用点对点分布式时间戳服务,生成依照时间顺序产生的电子交易证明。只要诚实节点占有的CPU算力比攻击节点的算力多,系统就是安全的。


2.交易

我们将一串数字签名定义为一枚电子货币。每位所有者将这枚硬币传递给下一个人,通过将上一次交易和下一个拥有者的公钥进行哈希计算,并添加到硬币末尾,将这枚货币转移到下一个拥有者。收款人可以通过验证签名来验证这枚货币的所有权。

e04497b4a7dc30c0e88767a9b8661295.webp

这里的问题是支付的人不能验证所有者没有进行双重支付。常用的解法是引入一个可信赖的中心化平台,或者铸币厂,校验每一笔交易防止双重支付。每一笔交易之后,币必须重新返回铸币厂来发行一枚新币,只有重新从铸币厂出来的币才能被新人不是双重支付的。这种方法的问题在于整个系统的命运取决于运行铸币厂的公司,每一笔交易都需要经过它们,就像是一个银行。

我们需要给收款人一种方式,让他知道之前的货币拥有者并没有签署更早的一笔交易。对我们而言,最早的那笔交易是有效的,所以我们不需要关注之后对双重支付的尝试。确定一笔交易的唯一方式是知晓之前所有的交易。在铸币厂模型中,铸币厂知晓所有的交易,并决定交易顺序。为了在没有第三方机构的前提下完成这个,交易必须公开发布,我们需要给参与者一个系统,让他们有唯一公认的交易历史。收款人需要一个证明,每一笔交易,大多数节点,都认可这是第一次收到。


3.时间戳服务

本解决方案首先提出一个时间戳服务,时间戳服务通过对区块数据进行加密哈希,之后传播哈希,就像是新闻或世界性新闻组网络的发帖一样。时间戳可以证明某一数据一定是基于某个时间存在的。每一个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强,这样就形成一个链条。

391cd562ca5349a8cf1fd98a04fcb306.webp


4.工作量证明

为了在点对点的基础上实现分布式时间戳服务,仅仅像报纸或者世界性新闻网络组是不够的,需要采用类似于Adam·Back 提出的哈希现金。当进行哈希计算的时候,工作量证明引入了对某一特定值的扫描工作,比如是SHA256,哈希计算以一串0开头的数字开始。随着哈希计算开头0的数量增加,计算所需要的工作量将会呈现指数增加,验证的过程只需要执行哈希计算。

我们实施工作量证明的办法是:通过在区块里增加一个随机数,使得区块的哈希值开头有足够的零满足要求,通过不断尝试随机数,直到满足要求,这就是我们的工作量证明的方法。只要该CPU耗费的工作量能够满足工作量证明机制,除非重新做一次工作量证明,否则区块内的信息不会改变。因为之后的区块都在这个区块之后,所以要更改这个区块内的信息需要重新做后面所有区块的内容。

8ce441f2ccb7142ec372664de41d15bc.webp

工作量证明也解决了集体决策中,谁是大多数的问题。如果大多数是基于【一个IP一票】的方式,很容易被拥有IP分配权的人颠覆这个机制,工作量证明实际是【一个CPU一票】。最长的链代表了大多数决策,因为这条链拥有最大的工作量证明投资,如果大多数的CPU力量是被诚实的节点控制,最诚实的链将会成为最长的链,并且超过所有竞争链。如果想要修改之前的链,攻击者需要重新做一遍所有区块的工作量证明,并且要超越所有的诚实区块。如果一个缓慢的攻击者要超越所有的节点,他的成功率将会程指数的降低,随着之后区块的增加。

另一个问题是硬件的运算速度逐渐提升,运行的节点也随着时间不断波动,工作量证明的难度将由移动的平均值决定,难度值由每小时产生的区块决定,如果区块产生的速度过快,难度值将会提升。


5.网络

运行网络的步骤如下

1)新交易广播到所有节点

2)所有节点搜集交易到自己的区块内

3)每个节点开始POW计算

4)节点计算出结果后,广播到其他节点

5)如果交易存在且已经被花费,其他节点接受该区块

6)其他节点接受这个区块的标志:在自己产生的区块后面,将之前区块的哈希值加入到自己产生的区块中。

节点总是认为最长的链是正确的,并且会延伸他。如果两个节点同时广播了两个不同版本的下一个节点,一些节点可能会先接收到某个,而另一个节点会接收到另一个。在这种场景下,节点会在先接收的节点上开展工作,同时也会保留另一个节点,防止另一个节点变长,直到下一个POW节点找到,这个僵局就会被打破,在另一分支的节点之后会转移到更长的这条链上。

新广播交易没有必要触达所有的节点,只要交易触达了足够多的节点,就可以打包进入到区块中。区块的广播对于丢失的信息是由容错的,如果一个节点没有接收到一个区块,如果一个节点没有接收到一个区块,当他接收到下一个区块的时候,他将会请求下载被自己丢失的区块。


6.激励

做一个约定:区块中的第一笔交易是一笔特殊的交易,可以产生一枚新的电子货币归属于区块的创建者。这将会激励节点支持整个网络,然后在没有中央机构发行的情况下,提供了原始代币发行到整个系统中,这种持续将一定数量的货币添加到整个系统中非常类似于挖矿的人耗费资源挖矿,此时,耗费的CPU和电费就是资源。

激励机制也可以变成交易费,如果一笔交易的输入比输出大,那么空余的钱就是手续费,手续费将会被增加到区块的激励中,一旦一定体量的货币进入到系统中,激励机制就可以完全依靠手续费,避免通货膨胀。

这种激励方式鼓励节点诚实,如果一个贪婪的攻击者可以比其他诚实节点聚集更多的CPU算力,他会面临一个抉择:一是使用二次支付攻击欺骗其他人,二是用这个产生新的电子货币,他会发现遵守规则更划算,因为这样他能比其他节点获得更多的货币,而不是破坏这个系统以及降低他财富的有效性。


7.硬盘回收

一旦最新的一笔交易已经被足够多的区块记录,那么这笔交易之前的交易就可以舍弃掉,以便回收硬盘空间。为了实现这种算法以及不打破哈希,交易会被哈希值存在Merkle 树中,只有Root哈希值会进入到区块。通过将老区块内部的交易剪枝掉,老区块的大小就能够压缩,内部的哈希值不需要再被保存。

26998888efdc4d7bc7b878816b88691c.webp

没有任何交易的区块头大概80比特,假定每10min产生一个区块,一年4.2M (= 80 Bytes * 6 * 24 * 365)。2008年,电脑内部是2GB,根据摩尔定律,即使将所有的区块数据都存在内存中,都不是问题。


8.简化支付验证

不运行全节点也可以验证交易,一个用户只需要保存最长链区块头的副本,他可以不断的向网络发起询问,直到他确信自己拥有最长的链条,并且获得Merkle分支指向被时间戳打标的区块中的交易。节点自己不能检查交易,但是通过追溯到链条的某个位置,节点可以观测整个网络是否接受了这笔交易,并且于其之后添加的区块也能够进一步验证整个网络是否接纳了他。

在这种场景下,只要诚实的节点控制了整个网络,验证就是可信的。如果攻击者的算力占优,那么整个机制将变得脆弱,节点可以自己验证交易,简化的机制可以被攻击者的伪造的交易。为了避免发生这种问题的一个有效的方法是,从网络中接受报警当他们检测到无效区块的时候,提示用户下载全节点以及被警告的交易来确认不一致的交易。对于日常要收付大量交易的商业机构,可能会希望运行他们自己的全节点,以获得独立完全安全性和快速交易验证。


9.价值的组合和分割

虽然可以对每个最小面值的电子货币进行交易,但是这种做法有些愚蠢。为了让价值能够分割和组合,交易将包括很多的输入和输出(input and output),通过情况下,会有一个大面值的输入或者几个小面值的输入,最多有两个输出,其中一个用于支付,另一个用于找零。

980c0d08fec46c8ec406f11ec77c2015.webp

需要指出的是,当一笔交易依赖于几笔交易,这几笔交易又依赖更多的交易,但这并不存在任何问题。因为这个机制不需要展开检验之前的所有交易历史。


10.隐私

传统银行模式通过限制获取机构信息达到隐私保护,在区块链中所有交易都是透明的,所以不能用传统金融的方法,但是可以通过另一个方式进行隐私保护:让公钥匿名。大家能够看到交易流向了哪里,但是没法映射到具体的人,这种方式有点像股票交易,可以知道时间和股票交易的数量,公众都知道交易,但是不知道交易方是哪个。

为了额外的防火墙安全性,每次交易都应该用一对新的公私钥,防止被别人知道具体是哪个人在用。在多重输入交易中,有些连接始终是无法避免的,这揭示了这些输入是同一个拥有者的。最大的风险就是,如果其中的一个公钥被验证是他本人,那么他其他的交易也能够被追溯出来。


11.计算

我们想象这样一种场景:攻击者试图制造一条比诚实链更快的替代链。尽管攻击者完成了攻击,攻击者也无法随意更改:比如凭空捏造货币或者掠夺不属于自己的货币,节点也不会接受无效的支付交易信息,诚实的节点不会接纳包含无效交易的区块。攻击者最多只能改变他自己的交易然后撤销自己刚刚花的那笔钱

诚实链和攻击链之间的竞争可以用二项式随机游走(Binomial Random Walk)来描述,成功事件定义为诚实链被一个区块拓展,使其领先性+1,失败事件定义为攻击者的链被拓展一个区块,使其领先性-1。

攻击者能追赶上既定差距的可能性等价于赌徒破产问题(Gambler's Ruin problem)。设想一个赌徒,有着无限的信用额度,刚开始欠钱,要进行着无数次赌博来达到盈亏平衡点,我们可以计算出他达到盈亏平衡点的概率。

p = 诚实节点找到下一个区块的概率

q = 攻击节点找到下一个区块的概率

qz = 攻击节点能够追赶上落后z个区块的概率

30d973aaad2941f0850f000d0aab15eb.webp

假定p>q,那么攻击成功的概率就会随着区块数量的增长呈指数下降,随着整体的局势对他不利,如果他不能早点做一个幸运的获得成功,那么他获胜的概率就会越来越下。

我们现在思考需要等待多久一笔交易才会让付款人才不能改变这个交易,我们假定付款人是攻击者:他先让收款人确信自己已经接受到钱了,然后再把这笔钱转给自己。收款人会受到报警,但是付款人希望报警能晚一点。

收款人产生了一对公私钥,然后只预留了很短的时间,把公钥给了付款人。这就避免了以下情况:付款人预先准备好一个区块链,然后持续运算,直到他足够幸运,超过诚实区块链然后才开始执行支付,一旦交易发出,攻击者开始秘密计算一条包含了可以替换上一笔交易的平行链。

等到交易被添加到区块中,并且有z个区块添加到这个区块之后,收款人确认收款。收款人不知道攻击者准确的攻击数字,但是假定诚实区块将耗费平均预期时间产生一个区块,攻击者的潜在进展会是近似一个泊松分布。

1dee43e2023477e9e0a9a7502c420435.webp

为了计算出攻击者能够追赶上的概率,我们将攻击者取得每一个区块的概率密度乘以在该数量下攻击者依然能够追赶上的概率。

eaec3014539d6c9c613969395a633b71.webp

对公式进行化简,避免极限求和

49e70a3bf51dd6309cd9f4590733e453.webp

写成C语言

f7099a870e14a741eb1517160c9d18b0.webp

对其进行运算,我们发现概率对其呈指数下降

0c17ba9086519d73f9bd72638d8d43f1.webp

求解令P小于0.1%的z值

490d7bf55204fa7d29f55ff936182958.webp


12.总结

我们创建了一个无需第三方新人的电子交易系统,我们用电子签名做出常规的电子货币,电子签名可以强证明某个电子货币的归属权,但是不能够完全避免双重支付。为了解决双花的问题,我们创建了一个点对点网络系统,系统使用工作量证明的算法来记录交易的历史信息,如果诚实节点控制了大多数的CPU算力,那么攻击者就没法在短时间内进行更改。这个简单的网络也很健壮,不需要协调,所有节点都在一起工作。节点不需要认证,因为信息不会定向路由到任何特定的场所,节点只需要尽力传播自己的交易就可以了。节点可以随时进出网络,重新加入到网络的时候,只需要补充离开节点时的工作量证明就行了。节点用CPU算力投票:如果接纳一个区块,那么就在这个区块之后拓展这个区块,如果拒绝一个区块,就不在这个区块之后添加交易。本文讲述的共识机制覆盖了P2P电子货币交易系统所需要的所有规则和激励机制。


参考资料

[1]W.Dai,"b-money,"http://www.weidai.com/bmoney.txt, 1998

[2]H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.

[3] Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, No.2, pages 99-111, 1991.

[4]D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.

[5]S. Haber, W.S. Stornetta, "Secure names for bit-strings,"In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. on Computer and Communications Security, pages 28-35, April 1997

[6]A. Back, "Hashcash - a denial of service counter-measure,"http://www.hashcash.org/papers/hashcash.pdf, 2002. ↵

[7]R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.

[8]W. Feller, "An introduction to probability theory and its applications,"1957.





关注好友,进入区块链交流社群。



浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报