
您绝对没有连到内容农场!水电工协会保证您还在正确的网页!这种充满喜感的标题只是笔者看了一时手痒不得不用罢了!本期和大家谈的就是区块链的安全性,所以用轻松嬉闹的标题,肯定可让读者有愉快的心情跳下这个火坑。
首先这是个标题杀人法,其实在DAO 事件发生时,以太链的不可逆神话并没有被打破,所有交易都符合区块链基本交易原则!发生问题的是DAO Token 所属的智能合约,且发生的问题本质在于智能合约程序有问题,让黑客找到机会无限制把DAO 代币放到自创的一个子项目,严格说来它和区块链被破有很大一段差距,不过许多媒体朋友都超译,导致这类标题满天飞,让笔者不得不跟进,不然文章就无法收录到内容农场……呃,是无法得到好的点阅率,日子真是太难过了……再慢着,那么以太币的处理方法难道不是否认那些攻击发生时的所有区块吗?当然,所有区块链都使用共识型协议,只要多数参与者表决成功,安装新程序,整个链就可否决掉部分交易肯定没错,但这种可逆性是受控且一样需要共识,和区块链安全性被逆转还是有很大差距。不过以太坊这种做法仍被多数矿工批评为无法无天、伪币政策……这也让我们看到一件事:区块链的安全性是否真的无敌?
共识型演算法的缺点
共识型协议最大的问题在于一旦没有共识就完了,比如这次比特币扩容硬分叉,这件事一直到纽约协议完成后才稳下来,在此之前比特币的价格一路下滑,基本上大家有共识两个方案各行其路,就会让比特币区块链一分为二,所有人在两个新区块链的资产及纪录完全不变,就像股票分割,如果分割后股价又涨回原点,等于大家的资产都增加了一倍!这也是水电工协会写本系列文章之初,一直在讲分裂有点像假议题。比方说笔者在分裂前买了10 个比特币,当时约值16,000 美元,现在总值已是10×4,500+10×600 =51,000 美元了,所以只要程序或参与者有共识,价值一定不会被破坏(以上比方纯属虚构,如有雷同请国税局不要来查)。
要达成共识需花时间及某些成本,有些黑客即是精研此道,想破坏区块链安全性。针对共识决议的攻击有几项比较知名的,比如Double Spend,或是Greed Miner 等都有可能破坏区块链的完整性。在这之前,我们先来看看最笨的攻击法有没有可能真的破坏最传统的比特币。
1/2 Good Miner,PoW 的优缺点
一般而言谈到Proof of Works,直觉上被教育成要有二分之一过半的坏人,比特币的安全性才会受破坏,但事实上我们要很小心定义这个最典型的问题,精确来说是:在一个区块产生的时间内,造假一个大家非得封进去的数据,需要有超过二分之一的计算力才有100% 成功率。
这句话本身就有一堆可思考的问题:如果我没有过半,但是不小心有四分之一的计算力会如何?(基本上有些大矿池真的在某些时段可接近二分之一计算力)
回顾一下之前提的链长度竞争问题,目前的共识型协议是如果某人的链比较长,且Hash 值接得起来没有问题,其他挖矿机就会把他公布的链收进来替代本来区块,所以如果旧区块没有再检查或有些检查上的漏洞,或是您封装的数据不是流水帐无法一一检查(好比说智能合约事件),那么是有机会在第N 个区块产生时造假第N-1 个区块的数据。要达成这件事的首要目标就是要有连续两个区块都由攻击者解出来。这个机率有多高?如果有一个大矿场被骇,刚好它有四分之一计算力,那么成功率就是十六分之一;若它有三分之一计算力,成功率高达九分之一。所以并不是没有一个坏人突破二分之一计算力时,区块链就绝对安全。基本上过去区块链安全主要还是因为大家都抱着发财梦,因此守护币值是大家共同的信念。美国矿工每次都在骂中国计算力过高一定会出事,比特币不可信……但这么久以来,反而中国矿工更有「职业道德」,毕竟在强国讲到赚钱获利,那才是硬道理!说到这,我们回头看看比特币原始社群的坚持,事实上很有道理!比特币主力社群开发者坚持:
小型电脑就可以挖矿、不希望有巨大矿池、人人都可以当管理者
事实上就是确保比特币安全性的最大保证!在这个坚持下,每台设备好一点的家用电脑就可以挖矿(参与区块链管理),不必特别的硬件、有多种不同系统,没有人的算力特别大,对攻击者来讲,这真是一个取得计算力的地狱!对想利用现金资源强占比特币社群的企业而言,更是铁板一块!
如果真有人成功塞进假的不合法交易资讯进比特币区块,会造成极大损失吗?当然是可能的,不过也没那么简单,目前最有可能的做法也只有Double Spend,也就是帐户里只有1 元但是连续花用多次(当然还是会稽核出来,但有可能已造成损失)。如果要假造某个大帐户发送转帐信息,笔者认为不可能,因为黑客无法变造数位签名,一旦他想要花偷来的钱,就会稽核出来。而PoW 的好处是:即便如此,过去的历史文本仍无法改变。PoW 的区块链只要一旦封存成功,没有被链竞争打掉,基本上无法改变,除非所有参与者都被黑客入侵,更改程序或删除数据。
我们接下来看看各种基于共识型协议天生的危险性而出现的攻击手法:
Race Attack(Double Spend)
竞速攻击法?抱歉这个名词一开始就翻得很难理解,事实上就是抢钱攻击法。当A 用户转帐给B 用户时,发了一条交易到区块链网络,当然大家都知道信息一发出去就不可能修改,但也不太可能马上封进区块链,所以短时间之后,如果A 用户再发一条信息转大量的帐(好比A 本来只有2 个比特币,结果转给B 0.1 个,1 秒后他又发一条信息要转2 个比特币给用户C,而用户C 多半是用户A 的另一个帐号),大家猜会发生什么事?结果是在比特币链上,前一条交易会视为非法,后一条交易被视为合法。如果您在买卖中,为了节省时间而不愿多等几个区块产生,那在您一手交货之后,看到的转帐资讯恐怕会是您的收入转帐被取消了。这有点像空头支票,不同的是比特币是自比为现金的流水帐,因此早期安全性论文一直告诉大家,所有交易至少要等几个confirm 才能成立,也就是真正安全的交易恐怕得等上1 小时。其他货币有的比较快,但也要等足好多分钟才算安全,因此这些等待的成本都变成数位货币无法取代现金法币的主因之一。
Vector 76(Double Spend)
这个手法同样是Double spend 只是复杂不少。首先黑客必需有两台挖矿机,其中一台A 只连到受害者(好比某个买卖比特币的网站),一台B 真正在挖矿。挖矿机本身有一定的平均中奖率,好比如果黑客当时买到最新ASIC 挖矿机,恐怕不用一天就可挖到一个区块,而黑客只要不断透过A 主机向买卖网站发转帐信息,再透过B 主机发另一个转帐信息让前笔交易为假(原理如上个攻击,如果你只有50BTC 却转了50.1 总量出去,第一笔就会被废)。当运气来时,A 主机发了转帐50BTC 后,B 主机也挖到矿了,B 主机就可在公告该区块后再发第二条转帐信息,此时,交易网站看到的情况是:黑客透过A 主机公告转帐进来50BTC,等10 分钟后,有一个confirm 了(因为B 主机发表了一个新挖到的区块),如果交易网站不想多等,就让这笔转帐视为合法,那么黑客就有10 分钟左右时间可把这50BTC 卖掉换成美元,下个区块出来时大家才会发现这笔交易不合法,会被取消,但网站已受损失了。所以自从这个攻击被发现后,连一个confirm 都不太够。
Alternative history attack
这个手法就是前段分析过的:要改变历史需要的计算力及机率。如果有一个黑客在第N 个区块放了假交易,他自己放个程序在主机上记录这个软分叉(因为此时若是发表就一定会被查出来而作废),等到他发现再经过C 个区块后,他自己的软分叉链竟然比主网络的链长了一笔交易,他就可以发布自己的分叉版本,大家多半只能同意。
我们可以再看一次:如果只想改变一个区块的历史,而您有全网X 分之一的计算力,您成功的机率就是X 分之一的平方;要改变二个区块,您成功的机率就是X 分之一的3 次方;如果要改到6 个区块,机率就降到X 分之一的7 次方。基本上,就算成都某大矿场这样,在某时期曾有高达近二分之一计算力的主机被骇,成功机率也会降到一百二十八分之一以下。至于在全网较平衡的情况下,一般挖矿主机大约都仅有全网算力的1%,大矿场应在5%~20% 间,所以等待6 个区块(confirms)还算是合理推断。
Ethereum DAO 事件
以太链使用的协议是GHOST,是个非常爱闹鬼的组织,具备快速反应能力,因此交易速度快过比特币甚多,大多情况下1 分至2 分一定有一个新区块产生,也因此不同步的安全问题会很严重。为了提高安全性,GHOST 使用Uncle 链技术让主链在短时间内可以有多层次分叉,但终究还是会整合回主链,这中间各种智能合约事件也因系统不同步性,或多或少有作弊空间,DAO 就是最出名的案例。DAO 虽说只是个代币,但大家都知道它是以太币创始社群自己搞出来的,且一开始还是比特币的,所以DAO 虽然只是智能合约问题,但却涉及以太币的价值及可能牵连到比特币。总之大家光看内容农场都可以知道发生什么事:DAO 代币被黑客利用split 函数的漏洞不断从DAO 管理者帐户转走,转到数十个不同的以太币帐户,而以太币上所有代币都要用以太币换,也就是代币就可换回以太币,所以一堆钱就这么被偷走了。
笔者一向懒得跟风去写什么事件始末,不过以太坊社群的处理方法及后续,倒有很多可讨论的地方。
- 一段错误的历史应不应该维持,以向世界证明区块链绝对不可逆?以太币这次动用到终极武器Hard Fork,让这段历史完全消失了,使许多以太坊用户非常失望。虽然不是因为技术问题让区块链历史改变,但终究显示区块链加智能合约,可能导致不可挽回、非得砍掉重来的大问题。
- 如果不让历史消失,那么这种大犯罪行为要如何解决?事实上根本无解。现实世界中如果法币被偷了还可以报案想办法拿回来,数位货币大概只能开个公审大会请黑客转回来了,问题是根本不可能。唯一的方法还真的只有让历史消失(当然捉到犯人以法律手法强制令其转回也可以,不过犯罪者大多会采取多层转帐方式分开金流)。
- 像以太坊这种全球性的公开区块链,应不应该有什么世界警察或系统机制来处理一些破坏体系的黑客行为?当然有的话很好,但如果不是基于共识型协议发展出来的,那么就会回到集中管理的问题,先不谈权力集中在少数人的政治问题,光是这样,黑客又有新题材可玩了:要玩死以太链,只要针对那几个控制节点就好了,多方便!
- 同样的这件事情,让我们看到智能合约的复杂性,绝对不是找个程序设计师写写就可以。大额智能合约未来一定要有专门的人才负责撰写及测试。
硬分叉后续
来点内容农场很少提到的事好了。以太链在处理DAO 问题硬分叉后,其实新版的挖矿程序有点问题,因为新增删除空户的功能,但删除空户一样动用到GAS,反正在以太链上做什么都要瓦斯,结果遇到系统太忙out-of-gas 时就完了,因为主流挖矿程序有两个,一个是Geth 一个是Parity,Geth 根本不管有没有GAS 可执行就把帐户给删了,但Parity 会照章行事,等系统有GAS 可用才准删除。就为了这个鸟问题,以太币刚硬分叉完又来一次,被大家笑称是超不可信的货币、伪币,足足到最近比特币因多家金融机构打算发行相关ETF 引进资金投资大涨后,以太币才又登上价格新高。
以太坊力图改进CASPER
这个很爱闹鬼的团体最近一直在讨论PoW 有多麻烦、矿工有多贪心不听话、人多嘴杂又吃掉一整个国家的电力……blahblah,于是乎进一步想走向Proof of Stake。本栏至今大部分时间都在讲Proof-of-works,基本上Proof-of-Works 就是利用天量的运算找到一个你永远无法轻易再制的hash 解(除非你也有天量的运算力),当然利用演算法决定区块正确性也可达到一定程度的安全性,包括Proof-of-Stake、拜占庭容错法等都是相关技术。我们这次也就顺便来看看PoW 和PoS 的安全性及能耗比较。(未完待续)
本文网址:

欢迎关注微信公众号:人工智能报;合作及投稿请联系:editor@cnaiplus.com