从零开始区块链:比特币可以被攻击者破坏么?——比特币经典论文研读 (5) — ScalersTalk成长会 – 持续行动,刻意学习 – ScalersTalk Wonderland

从零开始区块链:比特币可以被攻击者破坏么?——比特币经典论文研读 (5)

成长分享 scalerstalk 浏览 0条评论

ScalersTalk 成长会 2018 年火热招募中,目前报名人数已经突破 1100 人,参见《持续行动,为三年后的自己,扎心地做点事——ScalersTalk 成长会 2018 年会员资格开放申请》

今天是比特币白皮书的最后一篇。

本系列历史文章列表

从零开始区块链:对等网络与电子现金是什么?——比特币经典论文研读 (1)

从零开始区块链:如何防止一笔钱花两次?——比特币经典论文研读 (2)

从零开始区块链:如何证明计算机的工作量?——比特币经典论文研读 (3)

从零开始区块链:比特币如何挖矿?——比特币经典论文研读 (4)

10.磁盘空间回收

如果区块一直增长,会不会占有太多的磁盘空间?比特币设计了磁盘回收机制。具体原则如下:

(1) 如果最新交易已经在足够多的块里,更早的交易数据可以丢弃以节省存储空间,但是为了不影响哈希值的结果,交易以Merkle树的方式存储,在区块中仅存储了根哈希值。其下的子节点可以直接裁剪掉,不需要存储。

(2) 一个不带交易的块头数据约80字节,如果每10分钟生成一个区块,一年生成4.2M的数据量,扔到内存里没有问题。

什么是Merkle树?这个也叫哈希数,是密码学里常用的数据结构。这种树的每个叶子节点,都是某个数据块的哈希值;每个非叶子节点,都是子节点的哈希值。所以这就是一个层层向上哈希归并的数据结构,数据的完整性层层锁定,修改任意一个地方都会引起后续连串的反应。于是从完整性和节约空间的考虑,可以先存一个根哈希节点即可。

图8:Merkle树示例,图片来自Wikipedia

11.简单支付验证

比特币的各个节点可以没有全网节点的所有信息的情况下,验证支付的有效性,这样可以节省资源与空间。节点只需要存一份最长链的节点的块头数据即可。而如果想要获得最长的头节点,只需要向网络节点请求,直到得到最长的链即可。这样一来,节点就获得Merkle树的结构,知道一个交易被时间戳打包到哪个块中。节点自己无法验证这笔交易,但是知道这笔交易在链上的具体位置,可以确认网络节点已经接受了这笔交易,而且后续的块更是进一步确认了这笔交易。

如此一来,只要诚实节点控制了网络,验证就是靠谱的。但是如果攻击者拥有更多的算力,这种验证就比较弱。如果攻击者拥有更多的算力,那就可以伪造出交易记录。应对这个风险的策略就是,如果节点发现无效区块,就会发出警告,让比特币客户端软件下载所有的节点数据,对不一致的区块进行验证。对于频繁交易的商业应用,通常会下载全部数据,这样验证更安全,也更快。

这一节可以理解为一种工程实用上的折衷优化。由于P2P的分布式属性,理论上每个节点保存所有的网络信息是最好的。但是由于各种客观条件与资源限制,无法支持理想的情况,于是这里提出了一种简单支付验证的方式。因为比特币区块的设计属性,正好也支持这种简单验证的方式,所以从流程上具备可行性。但是既然做了简化,必然会有代价,这是工程上的权衡(trade-off)。所以验证在安全性上会有一些折扣,但是遇到突发情况也有应对方案。

12.币值分割与拼合

在第1篇文章中,我们谈到了电子现金需要具备的几个属性,其中一个就是可拆分性:

(5) 现金可分割。价值为C元的现金,可以拆分为许多更小面值的现金,这些现金加起来,总额与C相等。”

这一节就是讲比特币如何支持把一笔钱拆开,或者把不同币值的钱,组合起来。

(1) 尽管可以对每一个比特币单独处理,但是这样做会显得过于笨重。为了支持币值的拆分与合并,一笔交易支付多个输入与输出。通常,输入可以来自前一笔交易较大的额度,也可以是小额的多笔交易。但是输出最多两个,一个是用于支付,一个是归还给付方的找零。

(2) 对于“扇出”的情况,作者认为没有必要把交易的所有历史记录抽取出来。扇出就是指一笔交易依赖与多笔交易,然后这些交易又有更多的依赖关系,如此级联。

在数字电路中,如果一个电路门,需要依靠其他门的输出作为输入,就会称为“扇入(fan-in)”,如果一个电路门的信号,输出到其他门作为输入,就叫“扇出(fan-out)”。

图9(a) 扇入为3的门         图9(b) 扇出为N的门

另外,最近我带着ScalersTalk成长会的小伙伴在读《资本论[17]》,里面提到“金与银非天然为货币,但货币天然为金与银。”这句话在讨论比特币价值的时候,经常会被圈内人士所引用。另外对应到本节的标题,也有一句话“货币商品也必须只有量的差别,必须可以随意分割和拼合。金与银就天然赋有这种性质的”。

图10 《资本论》第1卷第43页

13.隐私

传统银行模式下的隐私主要通过限制相关方对信息的访问实现,即“不给你看”是保障隐私的主要方式。但是比特币要把所有的交易信息公开到全网,这样一来,“不给你看”的方式就失效了。但是仍然可以从信息流的其他环节下手:公钥匿名。在公开的网络上,可以看到某个人给另外一个人转账,但是这笔交易信息,无法对应到具体是谁给谁在转钱。这有点类似股票交易市场的信息披露情况,你能看到每一笔交易的时间与规模,这些记录是公开的,但是却不知道对应的交易者是谁。

作为额外的安全考虑,每一笔交易应该生成一对新的公私钥对,这样就不会在不同的交易中,定位到相同的身份。但是对于多笔输入交易的情况,关联到一个身份不可避免。这样会带来一个风险,如果一个公钥被对应到某一身份,那该公钥对应到的其他的交易,也能对应到同一个人。

这一节讲的就是比特币隐私方面的情况,而谈论这个的前提是,比特币的系统在前面各个章节已经搭建起来了。

14.计算

这一节对攻击者的胜率进行了计算。如果攻击者生成区块链的速度大于诚实节点,系统也不是可以随意更改的,例如凭空捏造一枚币,或者侵占他人钱币,这些是做不到的。网络节点不会接受这样的交易,诚实节点永远不会接受包含这样的交易的块。攻击者只能修改自己的交易,把花出去的钱,改回来。

攻击者生成的攻击链与诚实节点生成的诚实链的竞赛可以用二项随机过程来描述。成功事件就是诚实链增加一个块,领先优势+1,失败事件就是攻击链增加一个块,差距-1。这个攻击者追赶差距的问题类似“赌徒破产”问题。如果有一个无限的赌徒从亏钱开始赌,次数不限,最终要达到回本。可以计算赌徒回本的概率,这也是攻击者追赶上诚实节点的概率。

作者引入了以下几个变量:

p 代表诚实节点先找到下一块

q 代表攻击者先找到下一块

q_z 代表攻击者在z个块后追上诚实节点

假设p>q,那么随着需要追赶的区块数目增加,概率指数级下降。在这种逆境下,如果攻击者没有突然的爆发力,那落后的越多,越不可能追上。

这里再讨论一下交易的收方需要等待多长时间,才能足够确信交易不可篡改。假设付方是攻击者,在付钱的一段时间之后,把钱再重新支付给自己。收方最终会发现,但是付方希望时间较晚。

收方生成一对新的密钥,公钥发至付方,然后签名。这样可以防止付方提前算好区块,直到运气足够好,跑到前面,然后再执行交易。意思就是,收方尽量压缩付方提前准备的时间,不给攻击者(付方)太多时间。一旦付方发送交易,攻击者就开始计算包含此项交易的另外一条链。

收方等到交易加入区块后,以及后续生成了z个块才对交易进行确认。收方不知道付方到底进展到哪一步,但是假如诚实块的计算时间与平均相当,攻击者的进展情况服从期望为λ=zq/p的泊松分布。之后,作者把泊松分布的概率密度函数与在第k次赶上的概率,然后整理出概率公式,用C语言代码实现,可以看出概率对z值呈现指数下降趋势。

15.结论

这篇论文提出了一种无须信任的电子交易系统。文章首先讨论了电子签名的货币常用框架,这种框架可确保币的所有权,但是在防止双花方面,无法有效执行。于是作者提出了采用P2P网络,利用工作量证明,来记录公共历史交易。这样一来,只要诚实节点占有大部分算力,攻击者便无法修改交易记录。

P2P网络采用无结构化的形式,简洁且健壮。节点共同工作,不需要过多协同。节点不需要明确身份,因为消息无须路由至特定对照,只需要最大全力交付。节点可以任意离开或者加入网络,接受工作量证明,作为离开网络期间生成的链。节点通过CPU算力投票,通过延长链的方式表达对有效块的支持,通过不延长某个块的方式表达拒绝。任意的规则与激励可以在本共识机制下。

结语就是对这篇文章的一个小结,概括了比特币设计的一些要点。这篇论文也被称为比特币的白皮书。至此我们已经完成了第一篇比特币相关论文的研读。

如果你看到这里会发现,这些也是比较基础的内容,因为涉及到具体的当前比特币的许多细节,我们还是需要在后续有更多的学习。

总体而言,本篇论文通过共识机制、去中心化、工作量证明这三个关键要点,构造了比特币的最基本原型。在当前比特币价格不断波动的情况下,关于比特币未来会怎么样的讨论尘嚣甚上。我们每一个人为了不当韭菜,还是要多沉下心来,钻研一些具体的技术细节,把握一些基本原则,这样在面对波动的时候,内心会更沉稳一些。

用苹果手机,一竿子打赏给S私人红包

参考文献

[17] 卡尔·马克思 德. 资本论(全三册)[M]. 上海三联书店, 2009.

  1. 111111刻意学习.jpg

    新书《刻意学习》热卖中

ScalersTalk成长持续论

    ★★★★★   

ScalersTalk成长会是由Scalers发起的社群生态体系,专注1000天以上的“N阶持续行动理论体系与能力构建”,以“从英语初阶到同声传译全栈解决方案”为特色,以“持续输入输出训练实践拓宽认知边界”为导向。

微信公众号  l  ScalersTalk成长持续论

新 浪 微 博   l  @Scalers

网           站  l   ScalersTalk.com

开 放 社 群   l  100小时训练QQ群C 456036104

畅 销 书 籍  l 《刻意学习》火热销售中

 ★★★★★ 

2018年成长会申请说明

《持续行动,为三年后的自己,扎心地做点事——ScalersTalk成长会2018年会员资格开放申请(2017.12)》(请点击)

本文原文:http://www.scalerstalk.com/1309-attack

与本文相关的文章