从NXT事件浅谈电子币的回滚(rollback)
ripple吧
全部回复
仅看楼主
level 8
鹏凌三千 楼主
首先大家需要明确的是,rollback(回滚)本身是个数据库操作概念,只是延伸到电子币领域来使用,通常来说,传统数据库领域的rollback只能在commit(提交)前才会起作用,它的执行将意味着在rollback之前的某个或全部的操作无效,在正式commit数据之后则应无法rollback。但是,针对电子币领域的回滚,则无时无刻都可以发挥效果。
可能有些朋友会奇怪了,甚至会震惊了,为什么在去中心化的电子币领域中,会发生这种看上去好像非常“中心化”的数据回滚现象呢?其实,这长期以来都是“外行人”的一种误区,因为根本上讲,绝对的“去中心”,无论在技术上或现实中,都是不存在的——根本就没那么一码子事。
没错,不管是P2P也好,C2C也罢,其实无论如何,“去中心”都是一个相对概念,而无法成为绝对概念。就像声音需要空气传播,电需要导体传播一样,无论任何东西想要传播出去,都需要一个相对固定的“渠道”,而这个渠道,无论怎么样,也都会成为一个相对的“中心”般存在。
比如我们大家常说电子币是基于P2P(Peer to Peer)的,好像有了这种技术,我们的电子币网络就可以不受约束,随心所欲的任意传输,并且彻底去中心化了。然而,事实上真的是这样吗?显然不是的。
事实上,P2P化的电子币数据要想传送出去,也必须要利用必要的“渠道”才能做到,而这“渠道”,通常分为两种:
一种是向邻近地址发送广播请求,查看有无可用的电子币数据进行同步。具体来说,这种方式近似于有个人拿喇叭喊话,听到喊声的人再传给下一个,但是大家也都知道,声音的传播距离非常有限,而过用户不够密集的话,这种广播式数据同步是传不了多远的。最典型例子,比如你的电子币仅限于局域网环境中,假设你的IP地址是192.168.0.1,那么尝试请求的地址就是192.168.0.2,192.168.0.3之类一直到192.168.0.255,如果都找不到数据进行同步,这个币就同任何人都没有连接,连接的条数就始终是0,也就是将使用处于不可用状态。典型案例的是在国内联通环境下使用美卡币,因为该币中心服务器地址被墙(至少联通连不通),而用户量也非常少,所以在不“翻阅”的前提下,根本无法同步其网络数据。
二是通过中心服务器获得数据(或可用的固定数据同步地址),再进行计算机之间的随机同步。具体来说,这就像是开了个固定位置的劳务市场,然后各种各样的人都到这里来早工作,由劳务市场来分配给不同的人(不同IP)不同的任务(数据包)进行同步。事实上,目前所有的电子币都有这一步骤,差异仅仅在验证过程的严谨性,以及是否存在纠错判定上面(比如小弟以前就解释过,Ripple在这方面的验证非常严格,你想发送错误的数据让其他用户接受基本是不可能的)。
而电子币的rollback(回滚)是怎么一回事呢?很简单,就是这个中心服务器地址突然告诉你的电子币,只有这样一种数据才是对的,其它的都是错误的。一旦你的电子币客户端接受了这样一类信息,那么,无论服务器发送给你的数据包结果正确与否,就都会按照这种数据来执行了。
具体到NXT的情况,目前NXT开发团队给出的解决方案是:
This release disables all outgoing transactions from the BTER account:107
15382765594
435905 after block height 209885.
也就是说,他们修改了NXT的数据库文件(nxt.h2.db),进行了“靶向攻击”,只把由107
15382765594
435905(Bter的NXT账号)发出的,经由209985这个block中转的所有交易无效化,而其它交易则不受影响。根本上讲,是开发团队启动“非常手段”,强制把NXT归还给Bter了。
而NXT为什么能够做到这点呢?非常简单,我们翻看DbVersion.java代码,就能发现其数据库中已经硬性规定了允许用户访问的“中心服务器”列表,只要这些列表中超过51%的地址接受了NXT官方团队的修改后数据,并且同步到自己的服务器端,那么,其它的用户无论是否接受他们的修改,一旦联网,你们的数据也就自然变成了他们修改后的结果了。(另外,对POW币来说,各大矿池全部反水的后果也是这样,或者Bitcoin-qt客户端故意给你们同步错误数据,并且超过51%用户下载了这个客户端的结果也差不多)
但是,就正常运作的情况而言,黑客盗币并不是回滚的理由,blockchain任何情况下都应该是不能回滚的。最关键的问题在于,按照常识来说,回滚区块意味着开发团队在向整个世界宣布,区块链系统完全受到个了开发者的彻底控制,他们能回滚区块,也能修改区块。这样的系统根本无法保护你的财产,更谈不上去中心化。
比如Bitcoin或Ripple之类,已经运行了很长时间,并且承载着上千万上亿美金交易任务的币种,除非是遇到严重技术BUG,否则无论任何情况下也不会出现rollback(回滚)的情况(尤其是Ripple,它作为金融协议复杂性远超Bitcoin之类的一般电子币,根本不可能也不敢进行任何人为干预,前一阵Jed闹的那么厉害,也没见RL敢上手段动他的币,当然,更主要的是Rippled不止一个,而且大多掌握在其它商业机构手中,官方也无法保障别人跟他们一起同步),因为但凡程序出身的人就会明白,对一套成熟的金融系统而言,你rollback付出的代价,远远超出被盗币本身所将付出的代价。
2014年08月17日 03点08分 1
level 9
深入浅出,简单明了,不顶不行
2014年08月17日 07点08分 2
level 12
突然想起来去年看过的一个叫metalair的东西 今天去看了看 然后 估计只有我还能莫名其妙的想起这个东西来 现在甚至只能在网上找到一篇当年的软文http://chuansongme.com/n/51143 没出生就死了。。。。
2014年08月17日 14点08分 3
这年头夭折的项目,比大家见过的项目都多[汗]……
2014年08月18日 02点08分
1