V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Weway
V2EX  ›  Bitcoin

Blockchain can be Blocked(比特币网络通讯底层漏洞详解)

  •  
  •   Weway · 2018-04-16 13:46:26 +08:00 · 702 次点击
    这是一个创建于 2414 天前的主题,其中的信息可能已经有所发展或是发生改变。

    中本聪的白皮书

    几乎所有关于加密货币和区块链的讨论都源于中本聪的白皮书:《比特币:一种点对点的电子现金系统》 Bitcoin: A Peer-to-Peer Electronic Cash System ( Satoshi Nakamoto )。

    2008 年 11 月 1 日,一个密码学邮件组收到了 [email protected] 邮箱发出的这份白皮书,2009 年 1 月 3 日,中本聪的个人电脑里挖出了 50 个比特币,并在创世区块里留下一句永不可修改的话: “ The Times 03/Jan/2009 Chancellor on brink of second bailout for banks ( 2009 年 1 月 3 日,财政大臣正处于实施第二轮银行紧急援助的边缘)。”

    当时正是英国的财政大臣达林被迫考虑第二次出手纾解银行危机的时刻,这句话是泰晤士报当天的头版文章标题。区块链的时间戳服务和存在证明,让第一个区块链产生的时间和当时正发生的事件被永久性的保留了下来。

    2009 年 10 月 5 日出现了最早的交易所汇率:1 美元= 1309.03 比特币。十年后比特币的价格已经超过 8000 美元,按照 2017 年峰值的最高价 20000 美元一枚计算,2100 万枚比特币的市值达 4200 亿美元,外加各种山寨币、分叉币,加密货币总规模已经突破万亿美元。比特币带给我们最大的冲击是原来哈耶克的创想可行,技术可以超越现有政府的框架实现“非国家化的货币”并开始流通。

    在币值飞涨的疯狂年代,已经很少人再去翻看中本聪的白皮书。仅有九页的白皮书只是一套技术方案,所有的篇幅都是为了探讨一个“币”的实现,超越软件技术本身,我们去细加审视更本质的问题:比特币的“去中心化”是否彻底,是否真正成为了一个权力分散且完全自治的系统?白皮书中是否还有哪些缺陷,是中本聪默认忽略又事实存在的假性前提。

    去中心化=大多数人正义

    [白皮书摘要]:本文提出了一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何的金融机构。虽然数字签名( Digital signatures )部分解决了这个问题,但是如果仍然需要第三方的支持才能防止双重支付( double-spending )的话,那么这种系统也就失去了存在的价值。我们在此提出一种解决方案,使现金系统在点对点的环境下运行,并防止双重支付问题。该网络通过随机散列( hashing )对全部交易加上时间戳( timestamps ),将它们合并入一个不断延伸的基于随机散列的工作量证明( proof-of-work )的链条作为交易记录,除非重新完成全部的工作量证明,否者已经形成的交易记录将不可更改。最长的链条不仅将作为被观察到的事件序列( sequence )的证明,而且被看做是包含 CPU 最大计算工作量的链。只要绝大多数的 CPU 计算能力都没有打算合作起来对全网进行攻击,那么诚实的节点将会生成最长的、超过攻击者的链条。这个系统本身需要的基础设施非常少。信息尽最大努力在全网传播即可,节点(nodes)可以随时离开和重新加入网络,并将最长的工作量证明链条作为在该节点离线期间发生的交易的证明。

    细读比特币白皮书,你会发现中本聪的“去中心化”背后的潜台词是“大多数人正义”,共识机制是比特币的核心理念。

    建立一套“去中心化的 P2P 支付系统”,没有中心(中介)的支付系统,要避免“双花”(双重支付 double-spending )如何核对记账?答案是通过共识机制:用密码原理和工作量证明(Pow)代替中心化权威信用。

    产生一条新的交易记录时永远有先后顺序,即便是双花也总有先后顺序,同一用户不可能同时创造两笔交易。比特币首先引入了基于时间戳的随机散列,让其形成前后相关的序列,比特币的交易记录就是一个时间序列的链条。这就是为什么称之为区块链的原因。

    要避免双花,我们只需要证明其中一条链有效即可,并且将其记录到交易链条上,其他的交易就是无效的了。要证明其中一条是有效又不允许中心化从存在,只有一个办法:发动所有人参与这项活动,进行“多数人的正义”。

    POW 共识算法正是为了解决谁是大多数的问题,“大多数”的决定表达为最长的链。新区块进行节点广播,一旦有节点收到了这个区块的广播,会按照“当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性”的规则进行验证。

    验证通过后,这个节点就不会再接受别的节点的同样区块了。同时这个节点会终止自己正在进行的包含同样交易的区块计算,也就说不会在进行无用功了,节点在这个区块基础上启动新的交易区块计算,如此往复,形成链条。

    由于网络延迟,如果同时有几个节点互相收到交易区块,记录同样的链条(分叉),该僵局的打破要等到下一个工作量证明发现。通过一段时间运行,总有一条区块链时序最长,作为最终被认可的链条。比特币区块链就是在不停的分叉、抛弃、又分叉、又合并的过程。

    共识机制替代中介信任,那么我们探讨一下极端情况下可能会出现什么问题?

    假想的灾难

    让我们一起头脑风暴一场假想的灾难:

    2018 年某一天下午 15:30,中国的海底光纤突然出现故障,国际出口被阻断。整个比特币网络仍旧正常运转:国内的矿池、矿场币照样挖;国外的矿场、交易所继续正常挖币和交易。只是不知不觉间,中国的比特币网络和国际比特币网络被撕裂为两个子网。

    17:40,故障后 2 个小时,光纤故障排除,国际出口复通。

    在故障期间,中国境内的算力形成一个链,境外的算力形成另外一条支链。按照共识机制,就看哪条链的长度更长,而长度较短的另一链会被淘汰,即这条被淘汰的支链上产生的所有交易需要重新核算,同时记账奖励将被作废。

    由于中国国内的算力占比高达 70%,国外链毫无意外会被淘汰,这将为比特币带来灭顶之灾:在故障发生的两个多小时,境外矿场的算力成果被销毁了,海外所有的比特币交易面临重新核算,大家该收到的比特币没收到,该支出的没支出,整个比特币上的商业活动被瘫痪。

    大规模通讯中断会将比特币网络撕裂为算力悬殊的两个分支,那么最优的策略是故障发生那刻起,整个比特币网络立即停摆,直到故障修复。否则如果保持隔离状态继续运行,复通合并时就会出现更棘手的瘫痪。

    为防止支链带来的干扰造成损失,比特币一笔交易至少需要 6 个区块的确认,一个区块时间是 10 分钟,6 个区块就是一小时。假如故障导致的网络隔断超过一小时,就会给交易带来冲击,隔断时间越长冲击越大。

    人们对比特币容灾能力的讨论,更多地关注于分布式的多节点存储备份,忽略了共识机制本身造成的隔离和吞没效应。

    这样的假想并非天方夜谭,就在 2018 年 3 月 30 日,非洲国家毛里塔尼亚由于海底电缆被切断,造成全国范围内彻底断网时间长达 2 天,该起事件还同时影响数个周边国家,断网噩梦首次在现实中上演,说明全球范围内的网络基础设施并非人们想象的安全。

    实际上,全球大约 97% 以上的网络数据通过海底电缆传输,但各国出于军事目的而进行的海底电缆附近活动并不在少数。2013 年,有 3 名潜水员在埃及被捕,他们被指控为涉嫌切断海底电缆。

    而在军事战略家的理论中,全面切断海底电缆,影响该国军事通信能力,对敌方造成经济损失和瘫痪性灾难,也不失为一种重要的备选打击手段。

    并且,能让比特币陷入瘫痪的可能还不止天灾。

    算力垄断≠51%攻击

    目前对比特币的信仰建立在全网 51%算力难以企及上,然而最近人们越来越多开始担忧,掌握大规模 ASIC 矿机的矿场事实上已经垄断了 51%算力。

    根据《麻省理工科技评论》在 2018 年 1 月 18 日发布的最新研究表明,比特币和以太坊都属于开放区块链系统,即原则上任何人都可以成为矿工,但因为这样的架构特性,自然形成了相应的组织集中挖矿资源。

    基于每周一次的统计,排名前四名的比特币挖掘活动就占整个系统挖掘活动的 53%;而以太坊挖掘活动的中心化程度甚至更加稳固,前 3 大矿机占整体系统每周平均挖掘活动高达 61%。算力垄断是否已经动摇了比特币“去中心化”的特性?

    答案是否定的。51%攻击不会来自生态内。

    这是因为矿场巨头们虽然集中控制了算力,但他们按照游戏规则,付出了大量硬件投资和电费消耗。如果发动 51%攻击,整个系统的价值就会崩溃,那么攻击获得的比特币就没有任何意义了。

    51%攻击必然来自于体系外。

    从假想天灾我们可以得到一点启发,发动 51%攻击不一定要靠控制算力,影响网络层可能是成本更低,更可实现的方式。下面发散列举一些可能性:

    1. 大规模的黑客攻击行动,控制主干网络设备的路由策略,发动 BGP 攻击。 2. 网络设备商的后门权限。针对核心路由器 0day 漏洞的蠕虫病毒在传播过程中,有意或无意地封闭了国际出口。 3. 电信运营商的国际出口通讯故障。 4. 国家防火墙的限制和阻断。

    以上类似天灾的场景中,发动者都可以是体系外的成员,并且不需要耗费大量硬件和电力资源投入,只需要控制网络层就可以轻松实现。这就暴露出比特币和所有加密货币最致命的缺陷:网络层天然高度中心化。

    被忽略的默认前提:信道安全

    区块链的底层是 P2P 网络通信技术,区块链本质上是一个基于 P2P 的价值传输协议。

    比特币采用了基于国际互联网( Internet )的 P2P ( peer-to-peer )网络架构。P2P 是指位于同一网络中的每台计算机都彼此对等,各个节点共同提供网络服务,不存在任何“特殊”节点。每个网络节点以“扁平( flat )”的拓扑结构相互连通。在 P2P 网络中不存在任何服务端( server )、中央化的服务、以及层级结构。P2P 网络的节点之间交互运作、协同处理:每个节点在对外提供服务的同时也使用网络中其他节点所提供的服务。

    早期的国际互联网就是 P2P 网络架构的一个典型用例:IP 网络中的各个节点完全平等。当今的互联网架构具有分层架构,但是 IP 协议仍然保留了扁平拓扑的结构。在比特币之外,规模最大也最成功的 P2P 技术应用是在文件分享领域:Napster 是该领域的先锋,BitTorrent 是其架构的最新演变。

    “比特币网络”是按照比特币 P2P 协议运行的一系列节点的集合。除了比特币 P2P 协议之外,比特币网络中也包含其他协议。例如 Stratum 协议就被应用于挖矿、以及轻量级或移动端比特币钱包之中。网关( gateway )路由服务器提供这些协议,使用比特币 P2P 协议接入比特币网络,并把网络拓展到运行其他协议的各个节点。例如,Stratum 服务器通过 Stratum 协议将所有的 Stratum 挖矿节点连接至比特币主网络、并将 Stratum 协议桥接( bridge )至比特币 P2P 协议之上。我们使用“扩展比特币网络( extended bitcoin network )”指代所有包含比特币 P2P 协议、矿池挖矿协议、Stratum 协议以及其他连接比特币系统组件相关协议的整体网络结构。

    运行比特币 P2P 协议的比特币主网络由大约 7000-10000 个运行着不同版本比特币核心客户端( Bitcoin Core )的监听节点、以及几百个运行着各类比特币 P2P 协议的应用(例如 BitcoinJ、Libbitcoin、btcd 等)的节点组成。比特币 P2P 网络中的一小部分节点也是挖矿节点,它们竞争挖矿、验证交易、并创建新的区块。

    比特节点通常采用 TCP 协议、使用 8333 端口(该端口号通常是比特币所使用的,除 8333 端口外也可以指定使用其他端口)与已知的对等节点建立连接。

    P2P 网络只是为所有节点提供了信息交换的方式,做事的还是共识算法和加密算法。但接收方必须信任,数据区块的传送过程中没有被任何中间方改变破坏。这实际上需要一个“信道安全”的前提保证(这是中本聪没有明确提出,又默认必须的条件):

    我们信任区块链软件,相信它在运行中不受破坏,而传输的是非伪造的数据。 我们信任运行区块链软件的运行系统,它在运行中不受破坏,而传输的是非伪造的数据; 我们信任为系统提供网络的中央处理机,相信它不受破坏,而传输的是非伪造的数据。

    这种信任,基于“网络中立化”而产生。然而,互联网的传输和承载网建设,属于高度资本性投资。因此,所有的互联网基础建设,均来自通讯企业高额投资,而互联网服务,均由各大 ISP 及其分销商提供。

    这便带来了一个相对矛盾的问题:“去中心化”的分布式系统,承载于中心化的互联网服务之上,但却并未被广泛意识到,这种天然的高度中心化的底层传输网络,对“去中心化”的互联网产品有着轻而易举的打击实力和控制能力。

    从比特币的协议细节便可看出,其对传输层的攻击并未充分防范。比特币的传输协议报头都是明文,且规律恒定,其报文开头 4 个字节就是 0xF9BEB4D9。相信中本聪在设计协议时,将大部分精力都集中在交易过程的密码学设计上。因为对区块链而言,传输数据是否加密,并不影响交易本身的有效性:中间人即使窃取了报文,亦无法让篡改后的交易数据被其他节点接纳。

    但这种高度自信、过分依赖于信道安全性的协议,在网络底层发动的攻击中,便显得格外脆弱。愈合攻击便是一种足以瓦解比特币信仰的攻击手段。

    愈合攻击 Merge attack:

    有趣的是,“区块链” Blockchain 一词本不是白皮书中的原生词汇,尽管原文中提及“区块” Block 达 67 次,提及“链” Chain 的有 27 次,但中本聪从未将 Blockchain 合并在一起。Block 既有“块”的意思,但不要忘了它同时还是另外一个含义:“限制、阻碍”。人们也许有意忽略,Blockchain can be blocked。

    区块链的核心是共识机制,共识是分布式系统经过网络传输“投票”决策模式,干预和影响分布式系统的承载网络。我们发现,在特定场景下,恶意地利用共识机制,可以间接影响、左右“共识”的预期结果,造成共识破裂。鉴于攻击过程涉及到区块链网络的撕裂与修复,我们将此方法称之为“愈合攻击”。

    愈合攻击,简而言之,是先通过“撕裂”,将区块链网络隔离成能超过“共识阈值”(比如 POW 的 51%)的两个独立链条,然后间隔一定时间(超过交易确认时间)后,让两个链条“愈合”,利用合并对冲来强制抛弃其中一条已有大量交易的链条。

    愈合攻击实际上是分区攻击( Partition attack )+延迟攻击(Delay attack)的连续组合攻击手段,其破坏力远超 DDos 攻击和 IP 封堵。

    针对节点、矿工的 DDos、封堵 ip 地址等攻击方式,其影响力是短暂的。无论对任何 IP 地址发动 DDos 攻击,被攻击者都是有感知的,因为节点和矿工将立即意识到,自己无法和任何人通信。被攻击者很快可以切换 IP 的方式应对。攻击对整个区块链网络造成的破坏并不明显,因为节点在切换 IP 后,仍得以与其他节点进行通信,确保了交易确认,不会导致区块链网络带来毁灭性影响。 愈合攻击直接撕裂网络,形成两个大局域网。两个网内的节点均可以相互通信,并无断网感知,也就无从采取防范措施。它利用网络层,在愈合的一刻使“共识机制”崩溃:假如节点全部遵守“ Code is Law ”,则必然出现分链被吞没;不遵守代码约定,则需人为分叉,进而颠覆信仰。更致命的是,愈合攻击可以高效率地反复进行,分治对冲,比特币网络就就会瘫痪。

    愈合攻击并不仅针对比特币网络有效,对于以太坊等加密数字货币,同样有着致命威胁,尽管以太坊在通讯协议上进行了一定程度的加密,但这仅仅是为了保护智能合约的安全,并不是以消除通讯协议的识别特征为目标的加密。只要根据其网络通讯中长链接、冗余心跳机制等数据和行为特性,攻击者仍然可以精准打击,通过隔离网络,发动愈合攻击。

    因此,无论是哪种数字货币,只要没有在通讯底层从数据和行为上抹去特征,便难逃愈合攻击的火力覆盖。近年来广受炒作的山寨币,包括莱特币、门罗币、比特币现金、量子链等则更不能幸免。声称尚未被攻击过,远远不能够作为具有防破坏性的理论证明。

    进一步来看,所有的共识算法,包括 POW、POS、DPOS,都需要保证传输无干扰。因为分布式系统的共识算法本质上都是在信道安全的前提下,解决一致性和正确性问题。而信道安全前提一旦不成立,共识算法保障的“一致性”和“正确性”将瓦解。

    BGP 劫持

    愈合攻击是瓦解区块链的技术手段,实施愈合攻击,最常用的是 BGP 劫持。什么是 BGP 劫持呢?

    正常的矿机与矿池的通讯应该包括这几个步骤: 矿机 -> 网络运营商 A -> 网络运营商 B -> 网络运营商… -> 矿池

    由于比特币矿池的跨地域性,在矿机和矿池之间的网络运营商( ISP )可能有数个作为跳转。这是极不安全的,任何一个环节的都有可能被黑客通过边界网关协议( BGP )劫持。

    边界网关协议(BGP)是因特网的关键组成部分,用于确定路由路径。BGP 劫持,即利用 BGP 操纵因特网路由路径。无论是网络犯罪分子还是国家防火墙,都可以利用这种技术来达到自己的目的,如误导和拦截流量等。

    BGP 是一种网络协议,用于交换因特网上各网络之间的路由信息。一般情况下,它用来确定在独立运营的网络或自治系统之间路由数据的最佳路径。 因此,它也常常用来寻找从 ISP 到 ISP 路由数据的路径。需要注意的是,BGP 不是用来传输数据的,而是用来确定最高效的路由路径的。 实际的传输工作,是由其他协议来完成的,例如 TCP/IP 协议栈。

    图片: https://images-cdn.shimo.im/MX9RB6Zi73YmbAPA/t01b1b9f604c4e5dce1.png!thumbnail

    现在,假设我需要发送数据到世界的另一端。最终,这些数据肯定会离开我的 ISP 所控制的网络,因此,必然就会用到 BGP。 当然,路由路径是无法通过单独一个自治系统来决定的,这需要其他的 BGP 对等端或邻居的参与才行。 这些对等端是些已经通过手工配置为共享路由信息的自治系统。当自治系统学习新路由的时候,这些信息就会进一步传播到其他对等端。 通过梳理从 BGP 对等端收集来的路由信息,处理这些数据的路由器就能够找出最佳路径。这些最佳路径是参考多种因素综合得出的,包括距离以及路由器管理员实现的配置设置等。 由于传播路由的对等端是手工配置的,因此有必要入侵一台边界路由器来广播外部 BGP 通告,从而实现因特网级别的 BGP 劫持。尽管这做起来非常困难,但是 BGP 劫持攻击确实已经出现在现实世界之中了。

    图片: https://images-cdn.shimo.im/HW8dtfH0o3QpxVK3/t017adc47939d369188.png!thumbnail

    因为 BGP 决定了数据从源端到目的地端的传输方式,所以,必须要关注该协议的安全性。通过操纵 BGP,攻击者可以按照自己的意愿来修改数据的传输路线,从而达到拦截或者修改数据的目的。 为了劫持因特网级别的 BGP,需要配置一个边界路由器,让它发送含有未分配给它的前缀的通告。如果恶意通告比合法通告还要具体,或者声称提供更短的路径,那么流量就可能被定向到攻击者那里去。 攻击者经常利用弃用的前缀来进行劫持,以免引起合法属主的关注。通过广播含有虚假前缀的通告,受攻击的路由器可能会污染其他路由器的路由信息库。 在污染了其他路由器之后,恶意路由信息可能会进一步传播到别的路由器中,或自治系统,甚至主干因特网上。

    最近几年来,已经有多起 BGP 劫持攻击被记录在案:

    比较著名的就是 13 年巴基斯坦屏蔽 Youtube 的事件。由于巴基斯坦电信部门错误地把屏蔽 youtube 加到了 BGP 上,导致该协议上的所有 AS 都被屏蔽了。换句话说,全世界其他所有国家的人都无法上 Youtube 了,因为数据包都涌向巴基斯坦了,而巴基斯坦恰恰屏蔽了 Youtube。

    在 Renesys 记载的案例中,2013 年 BGP 劫持技术曾经用来重新路由数据,使其在到达目的地之前,先经过任意指定的国家。 其中,一个攻击案例中的数据流量,在到达起目的地之前,竟然先绕道墨西哥至美国,然后转至白俄罗斯。通过散布虚假 BGP 广播,白俄罗斯的 ISP 成功将非法路由传播到了因特网上。 在这个案例中,很可能是一种公司或国家间谍行为。不过,有迹象说明,即使非国家级别的对手,照样也能够发动 BGP 劫持攻击。

    2014 年 Dell SecureWorks 分析的一个案例中,BGP 劫持被用来拦截比特币矿机到采矿池服务器的链接。通过将流量重路由至攻击者控制的矿池,攻击者就能够窃取受害者的比特币。 这次攻击在两月内收集到了价值$83,000 的比特币。

    在 2015 年 7 月,监视软件供应商 Hacking Team 被黑,泄露的内部邮件表明,在 2013 年,意大利政府曾经与 Hacking Team 有关合作,同时,意大利的一家 ISP 也购买过该公司的 BGP 劫持服务。 由于托管 Hacking Team 指令控制服务器的 IP 被阻断之后,该服务器已经离线,因此该恶意软件与指令控制服务器的连接也一直保持不可达状态。通过公布托管该指令控制服务器的虚假 IP 前缀,Hacking Team 竟然又恢复了对受害者机器的访问能力。 这是第一个记载在册的西方国家政府使用 BGP 劫持的案例。

    致命伤: “拜占庭将军问题”&“两军问题”

    比特币是分布式系统一次空前的社会实验,也被称为解决”拜占庭将军“问题的成功实例。在此强烈建议大家百度或者维基一下理论原型。

    拜占庭将军问题是 2013 年图灵奖得主 Leslie Lamport 在 1980 年的论文 The Byzantine Generals Problem 中提出的分布式领域的容错问题,这是分布式领域最复杂、最严格的容错模型。Lamport 是分布式系统的祖师爷级的大师,这个故事也广为流传:

    拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息。 在战争的时候,拜占庭军队内所有将军和副官必需达成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又扰乱整体军队的秩序。在进行共识时,结果并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成。

    拜占庭将军问题不去考虑信差是否会被截获或无法传递信息等问题。Lamport 已经证明,在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。

    另一个比“拜占庭将军问题”更基础,更广为人知的是“两军问题” Two Generals ’ Problem:

    两支军队,分别由两个将军领导,正在准备攻击一个坚固的城市。两支军队都驻扎在城市旁边的两个不同的山谷里。两军之间隔着第三个山谷,两个将军想要通讯的唯一方法就是穿过第三个山谷传送信件。问题是,第三个山谷被城市的守卫敌军占据,并且经此传送的信件可能会被守卫敌军截获。虽然两个将军商量好要同时对城市发起攻击,但是他们没有约定特定的攻击时间。为了保证取胜,他们必须同时发起攻击,否则任何单独发起攻击的军队都有可能全军覆没。他们必须互相通信来决定一个同时攻击时间,并且同意在那个时间发起攻击。两个将军彼此之间要知道另一个将军知道自己同意了作战计划。

    两军问题是阐述在一个不可靠的通信链路上试图通过通信以达成一致是存在缺陷的和困难的,这个问题经常出现在计算机网络入门课程中,用于阐释 TCP 协议不能保证通信两端状态的一致性。不过两军问题同样适用于任何有可能通信失败情况下的两点通信。

    对比两个故事,我们会发现两军问题和拜占庭将军问题有一定的相似性,但必须注意的是,信差得经过敌人的山谷,在这过程中他可能被捕,也就是说,两军问题中信道是不可靠的,并且其中没有叛徒之说,这就是两军问题和拜占庭将军问题的根本性不同。

    两军问题是在计算机通信领域首个被证明无解的问题,由此也可推论出,信道不可靠条件下的“拜占庭将军问题”也同样无解。

    这意味着我们传输信息时仍然可能出现丢失、监听或篡改的情况。也许只有未来的“量子通讯”可能解决加密通信的问题。

    搁置各种加密货币共识算法的优劣争论,我们必须看到本质问题,是共识算法离不开信道安全前提。

    比特币在理论上的缺陷,就是出在网络通讯层的安全上。人们过高的着迷于区块链这种技术在时间戳签名、哈希链等密码学上的贡献,而忽略了其作为分布式系统的网络层安全。事实上这种技术还在早期阶段,尽管十年来比特币曾被上百次的预言死亡而仍健在,但作为科学和技术的本体,是更不应被盲目迷信的。

    网络通讯混淆协议 BSO

    比特币的信仰建立在彻底去中心化的大前提下:整个体系公平、自治,不依赖也不需要现有的中心化机构介入,甚至也无法介入。因此,评价一个加密货币成功的标准必须在于是否彻底去中心化,中本聪理想化的忽略了网络的中心化现实,任何不彻底的“中心化”残余之处,都可能成为击垮整个比特币的“阿琉克斯之踵”。

    比特币要实现彻底去中心化,承载价值网络之名,就必须运行于安全的网络上,成为加密到底层通讯协议的全加密货币。现实的网络世界,完全安全、透明、中立的网络通讯是不存在的。量子通讯从理论到落地仍需假以时日。现实的思路是立足当下技术之可为,从安全和成本制衡的角度,改良和重新设计区块链的 P2P 通讯协议,使工程学所能实现的安全量级大大超过现实可用于监听、拦截、破坏区块链通讯所要付出的成本代价。

    以太坊和一些加密货币开始使用加密通讯协议,这是一个好的开始。然而这些协议仍留有很多痕迹。在 2018 年初,移动互联网系统与应用安全国家实验室举办的一场通讯加密数据识别邀请赛中,几乎所有的加密货币通讯数据全被识别了出来。

    我们认为需要重新设计一种更优的区块链通讯混淆协议 BSO ( Blockchain Security Obscure Protocol ),协议设计思想是让 P2P 网路在通讯传输时无明显特征,混淆在一般的网络通讯中。增加网络层寻识特征的难度,提高网络层识别、篡改或拦截的成本,从而保护区块链网络通讯的安全性。

    混淆协议属于一种安全对抗工程,一般有两种对抗方向,一种是正面对抗,通过设计一种新的强加密协议,让中间人无法通过分析流量内容识别出应用业务,但是新协议本身的特点,容易成为被针对的特征;另一种是迂回对抗,将应用业务的流量伪装成和互联网中绝大部分正常流量一样的协议,并且同时是一种合法的加密协议,从协议特征、内容加密就可以做到难以从流量上被针对识别。

    BSO 混淆协议只是一个起步,未来混淆和机器学习将是一个在长期对抗中共同演进的技术,而区块链网络可以通过不断软分叉方式不断完善,健壮起来。

    分布式网络治理和监控

    区块链生长于网络之上,算力节点在网络上的分布生态是一个未被足够关注的问题。分布式系统的共识离不开信道安全,甚至需要网络保护。

    运行在区块链上的数据,资产,应当如同承载在互联网上的信息一样,被全世界所有国家的政府、网络管理机构、运营商来保护,并承诺安全。

    所有的加密货币和区块链应用,必须争取获得获得国家和政府的认可、监管并且保护。因为加密货币并不像看上去那样,可以无法无天无人可管,又令管制机构无可奈何。可能不需更多的国家跨国联手,一两个超级大国足以让整个加密货币世界停摆。以网管链,以链治币,区块链的监管将绝不是空话。

    从事区块链、加密货币研究的企业、机构,更应该呼吁和推动政府部门尽快出台相关法律法规和监管政策,规范、保护并约束一个良好的生态环境。

    另一个维度,区块链是需要运维的。这个观点与追求“维持开放、无需权限和分布式”的理念似乎有点格格不入。但当千百亿资本涌入那些加密货币,专业的攻击者也会盯上这片“无主之地”。在去中心化的理念下,传统的运维手段几乎都不再适用,需要探索原创性的技术资源。用分布式的监控模式,去监控分布式网络和节点的健康状态,是我们认为可欲可行的。这将是一个类似比特币挖矿一样,宏大而广阔的工程:在不同的国家、运营商,部署足够多的监控节点,来反复检测线路健壮程度,是否通畅,是否被劫持。以比特币为例,如果可以提高对劫持的预警灵敏度,以至于在不可逆的 6 个区块确认前,及时采取措施,也是一条可以避免愈合攻击的发生的方案。而这样的一套类似“晴雨表”的分布式节点的监控设施,将是区块链必须的基础设施之一。

    信仰代码

    哈耶克终身都在反对人为建构的秩序,认为人类理性不及,需要由市场自生自发的秩序来认知和管理世界,并提出了《货币的去国家化》的开创性构想,他在序言写下:

    “当下的政治必然性不应当是经济学家关注的问题。他的任务应当是像我不厌其烦地重复过的那样,是从今天的政治角度看来不可行的政策,具有政治上的可能性。决定此时此刻应当做什么,这是政治家而不是经济学家的任务···(《货币的非国家化》第二版,1978 年)”

    作为技术开发者,引起我们共鸣的是:应从技术的角度探求,使得今天可能在政治上不可能的事情具有政治上的可能性。剩下的交给政治家。

    最后,期待人们仍可以回到对代码的信仰上。在它完善之后。

    -全文完-

    附录:致谢和参与者

    由衷的感谢下面的人,他们慷慨的分享和贡献了他们的时间和见解:

    Satoshi Nakamoto Bitcoin: A Peer-to-Peer Electronic Cash System 2008 Zach Julian An Overview of BGP Hijacking AUGUST 17, 2015 Dave Hudson Look back to Satoshi's White Paper to Find the Essence of Blockchain 2016 Maria Apostolaki,Aviv Zohar,Laurent Vanbever Hijacking Bitcoin: Routing Attacks on Cryptocurrencies May 2017 Liang Wang,Kevin P. Dyer,Aditya Akella,Thomas Ristenpart,Thomas Shrimpton Seeing through Network-Protocol Obfuscation Adem Efe Gencer, Soumya Basu, Ittay Eyal, Robbert van Renesse, and Emin Gün Sirer Decentralization in Bitcoin and Ethereum Networks Byron Gibson Bitcoin and the byzantine generals problem Tan Qingfeng, Shi Jinqiao, Fang Binxing, Guo Li, Zhang Wentao, Wang Xuebin, Wei Bingjie Towards Measuring Unobservability in Anonymous Communication Systems Zhu Yixiang,Li Ziyang,Liang Yingfeng,Chen Yexuan,Wang Si,Eleven zhang,Jiang Zhuojian Security analysis and improvement of Blockchain network communication focus on Bitcoin 2018

    3 条回复    2018-05-21 14:50:21 +08:00
    acess
        1
    acess  
       2018-04-16 23:12:57 +08:00 via Android   ❤️ 1
    文章来源?
    codeplayer
        2
    codeplayer  
       2018-04-17 11:26:59 +08:00
    文章不错
    baskice
        3
    baskice  
       2018-05-21 14:50:21 +08:00
    文章很好,不写出处真不好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:51 · PVG 10:51 · LAX 18:51 · JFK 21:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.