查看原文
其他

半年暴涨近4倍! 比特币终破11000美元大关! 但如果不了解这些事, 你就...

于斌 区块链大本营 2019-07-11

来源 | 《区块链核心技术与应用》

作者 | 于斌

责编 | 乔治

出品 | 区块链大本营(blockchain_camp)



半年前还徘徊在3200美元的比特币,如今突破11000美元大关了!伴随而来的是各 altcoins 也顺势大涨。



如果你不了解本文中提到的这些区块链常见问题,即使你拥有再多的数字资产也是徒劳,因为事实证明,目前的数字资产并不安全。



本文介绍了许多区块链领域内的常见问题,这些问题估计会困扰区块链的初学者。基本内容包括以下几个方面:

区块链的技术局限、数据冗余、安全性、挖矿、各种共识协议的弱点、交易速度、安全问题、51% 攻击问题、女巫攻击、交易所、以太坊智能合约安全漏洞、挖矿和算力集中困境,比特币和以太坊的交易效率困境、比特币的扩容、隔离 验证、闪电网络、侧链、DAG 技术、硬分叉历史、系统升级维护等问题,涵盖了区块链各有可能出现问题的领域。



区块链的安全问题


1、51%攻击问题


我们常常听到的51%攻击是什么?


其实问题的核心就是要有超过一半以上的算力就可以“双花”链上的资产。下面我们举例说明。如果我们想象十个人中的一个人试图欺骗和修改区块链的内容,他将不得不调整几个区块并计算新的符合难度目标的哈希值。我们知道要找到符合条件的哈希值非常困难,因此,网络上一个不诚实的人无法击败九个诚实的人。


如果一个不诚实的人试图在一个区块上做出欺骗行为,那会在网络中创造另一个链条,但是欺骗的链条永远无法赶上诚实的链条—因为一个人的努力和速度无法击败九个人累积的努力和速度。因此,这个机制可以保证网络中最长的链是最诚实的链。


但如果不是一个人不诚实,而是有六个人不诚实呢?在这种情况下,篡改区块链上的记录就可以实现。这被称为“51%攻击”。如果网络中的大多数人都变得不诚实,并欺骗网络的其余部分,协议目的就失效了。但是我们必须知道区块链系统的弱点:它建立在大多数人群总是诚实的假设之上。


2、女巫攻击


大规模的P2P系统面临着有问题的和敌对的节点的威胁。为了应付这种威胁,很多系统采用了冗余。然而,如果一个有恶意的实体模仿了多个身份,他就可以控制系统的很大一部分,破坏系统的冗余策略。我们把这种模仿多个身份的攻击定义为“女巫攻击”(Sybil Attack)。在女巫攻击中,攻击者通过创建大量的假名标识来破坏对等网络的信誉系统,使用它们获得不成比例的大的影响。


对等网络上的实体是能够访问本地资源的一个软件。实体通过呈现身份在对等网络上通告自身。多于一个标识可以对应于单个实体。换句话说,身份到实体的映射是多对一的。对等网络中的实体为了冗余、资源共享、可靠性和完整性而使用多个标识。


默认情况下,通常假定每个不同的标识对应于不同的本地实体。实际上,许多身份可以对应于相同的本地实体。这样攻击者就可以向对等网络呈现多个身份,充当多个不同的节点,并可能能够获得对网络的不成比例的控制水平,例如影响投票结果。


女巫攻击包括以下6种类型:


  • 直接通信:女巫节点直接与合法节点进行通信。

  • 间接通信:没有一个合法的节点能够直接与女巫节点进行通信。相反,一个或多个恶意的节点宣称它们能够到达女巫节点。就是这个恶意节点自己接收或者拦截相关消息。

  • 伪造身份:攻击者可以产生任意的女巫身份,以进行攻击。

  • 盗用身份:攻击者进行节点的身份盗用,在原有节点摧毁或者失效前很难检测。

  • 同时攻击:攻击者将其所有的女巫身份一次性地同时参与到一次网络通信中。攻击者可以循环使用它的多个女巫身份,让人看起来是多个节点。这就是同时性。

  • 非同时攻击:攻击者只在一个特定的时间周期里使用一部分女巫身份,而在另外一个时间段里使这些身份消失而以另外的女巫身份出现。这看起来就像网络中正常的节点撤销和加入。


传统防止女巫攻击的方法是采用一个信任的代理来认证实体。


验证技术可用于防止女巫攻击和消除伪装敌方实体。本地实体可以基于中心化权威机构来验证远程身份,其确保身份和实体之间的一一对应,甚至可以提供反向查找。身份可以直接或间接地验证。在直接验证中,本地实体查询中央授权机构以验证远程标识。在间接验证中,本地实体依赖于已经接受的身份,继而保证所讨论的远程身份的有效性。


这种办法不适用于去中心化程度高的公有链。在像以PoW为共识机制的区块链,例如比特币或以太坊,采用算力为获得记账权的依据,因此多节点的女巫攻击失去意义。而像以PoS为共识机制的区块链,例如点点币,采用拥有的币龄为获得记账权的依据,同样,多节点的女巫攻击也失去作用。


3、交易所


目前的数字交易所绝大多数是中心化的,其安全性隐患非常大,基本上可以包括人为的安全性和技术系统的安全性漏洞。这些交易所因为储存了大量的加密货币而成为黑客的觊觎目标。以下是几次著名的交易所安全事件,说明数字交易所存在严重安全隐患。


  • 2018年3月,全球第二大交易所币安遭遇黑客入侵,导致大量用户账户里的比特币被卖掉,买入一虚拟币;黑客同时在世界各大交易所挂比特币空单套利。虽然黑客没有直接从币安提币,但却造成币安被侵入账户的账面损失,并间接造成了大量比特币持有者的账面损失。

  • 2018年1月,日本最大的加密货币交易所Coincheck遭黑客袭击,价值5.3亿美元的数字货币不翼而飞。

  • 2017年12月,韩国比特币交易所Youbit因遭遇“黑客攻击”,丢失了17%的数字货币,宣布破产。


基本所有交易所系统都面临技术上的安全隐患。有以下6类安全性问题:


  • 系统安全;

  • 硬件设备安全;

  • 交易通道安全;

  • 数字钱包安全;

  • 终端安全;

  • 用户操作安全。


同时也有许多项目开始研发运行在区块链的去中心化交易所。比起中心化的技术,运行在区块链上的去中心化交易所是利用区块链的三个特性—分布式、透明、不可篡改的特性来加强交易所的安全性与透明度。


(1)中心化交易所


中心化交易所(Centralized Exchange)其实就是用户主要使用的交易所,Bitfinex、Poloniex、Coincheck、币安等都是中心化交易所。用户使用这些交易所的方式,通常就是到网站上注册,根据不同国家的法规经过一连串的认证程序后,把加密货币转入他们指定的钱包地址后,就可以开始在上面交易加密货币。


其中的交易不见得会发生在区块链上真正的货币交换,取而代之的可能仅是修改交易所数据库内的资产数字,用户看到的只是账面上数字的变化,交易所只要在用户提款时准备了充足的加密货币汇出即可。


当使用者把加密货币转到他们提供的钱包地址后,交易所就拥有了操作这些加密货币的权利,使用者必须要信任这个网站会保证货币安全,才能把加密货币转给交易所操作。

正因为中心化交易所拥有了存放大量加密货币的私钥,所以非常容易吸引黑客的攻击。而黑客的目标绝大部分就是这些存放大量加密货币的私钥,偷走了这些私钥就代表盗走这些加密货币。 


(2)去中心化交易所


去中心化交易所(Decentralized Exchange)跟一般中心化交易所最不一样的地方,就是交易行为发生在区块链上。与中心化交易所的交易实质是在交易所本身的数据库中增减用户资产字段不同的是,去中心化交易所是在区块链上直接交换,加密货币会直接发回使用者的钱包,或是保存在区块链上的智能合约。


这样直接在区块链上交换的好处在于,交易所并不持有用户大量的加密货币,所有的加密货币会储存在区块链上使用者的钱包或智能合约控管。本来需要信任中心化的交易所,现在仅需要信任区块链以及智能合约即可。而用于交易所的智能合约大多会公开源码让所有人可以确认这份合约的细节。


中心化交易所技术架构


而中心化交易所通常不会公开交易细节的源码,实际上如何运作也只有其内部人员知道。通过公开的智能合约维持交易过程的透明与安全性,有利润的拆分也会公开在区块链上。相信用户会因为信任问题逐渐转向去中心化的交易所。


目前世界上已经有了几种去中心化的交易所在运行,比如EtherDelta和Kyber Network都是比较早期开始发展的交易所。由于开发运营的时间较短,它们尚不够成熟,有待逐渐完善。与中心化交易所相比,去中心化交易所的一个弱势是没有撮合引擎,成交效率低。


4、以太坊智能合约安全漏洞


传统的计算机程序一般运行在某个节点或集群上,为某个机构或个人拥有和控制。这样的计算机程序可以随时施加人工干预,可以随时控制。然而,区块链上的智能合约则是一种全新的计算范式。智能合约一经部署就难以修改,其执行也是自动执行,不受人为干预。因此,如果智能合约有安全漏洞,就很难防范黑客的攻击。当下,专业技术人员都在努力寻找合适的方式,提高智能合约的安全性和可靠性,帮助保障大家的资金安全。根据一份针对以太坊智能合约的最新调查研究显示,在安全问题研究人员看来,智能合约属于新兴事物,所以缺陷和漏洞还是非常多的。


所谓“智能合约”,其基本内涵就是指可以将一些带有合约性质的条款嵌于我们日常使用的硬件和软件当中,目的是让那些违约者在违反合同时付出一定代价。Szabo将实体售货机称为“智能合约的原型”,因为实体售货机就是根据屏幕上所显示的价格,收取用户投进来的硬币,掉出用户所选中的商品并且正确找零。


以以太坊为例。以太坊是一个开源的有智能合约功能的公共区块链平台。区块链上的所有用户都可以看到基于区块链的智能合约。但是,这会导致包括安全漏洞在内的所有漏洞都可见。如果智能合约开发者疏忽或者测试不充分,而造成智能合约的代码有漏洞的话,就非常容易被黑客利用并攻击。并且越是功能强大的智能合约,逻辑就越复杂,也越容易出现逻辑上的漏洞。同时,智能合约语言Solidity自身与合约设计都可能存在漏洞。


以太坊开源软件主要是由社区的极客共同编写的,目前已知存在Solidity漏洞、短地址漏洞、交易顺序依赖、时间戳依赖、可重入攻击等漏洞。在调用合约时漏洞可能被利用,而智能合约部署后难以更新的特性也让漏洞的影响更加广泛持久。


另外,以太坊虚拟机(EVM)对于智能合约能够做的事情存在很多硬性限制。这些都牵扯到平台级的安全,甚至可能会威胁到用户特定合约的安全。


伦敦大学学院(University College London)的计算机科学家Ilya Sergey表示,目前专业技术人士还没有完全搞清楚智能合约中存在的安全漏洞和潜在风险。他曾经参与过一项针对智能合约的调查研究。Sergey及其同事借助一款创新工具,对将近100万份的以太坊智能合约样本进行了分析。结果发现,其中约有3.4万份都是存在安全隐患的,包括导致Parity事件的那一份。Sergey介绍说,自己和团队其他成员的分析工作,就好比是与自动售货机互动。研究人员随机按下某个按钮,接着记录机器在运行过程中出现意外事故时的相关状况。用他的话说:“我认为,目前我们没有发现的安全漏洞还有很多,需要继续分析并且进行分类。”


在实践中如何提高智能合约的安全性?给出以下建议,在实际编程中尽量遵守,你的合约将更具安全因素。


  • 更完善的编写测试。

  • 建议提供容错和自动错误赏金。

  • 为最糟糕的情况做准备。智能合同中的漏洞,应该尽可能让它安全地恢复。

  • 添加额外的安全机制。合同的管理者可应急性地冻结合约。

  • 限制合约资金存放金额,提高攻击者成功的门槛。

  • 不要从零开始编写你所有的代码,尽可能参考成功者的合约。

  • 注意开发平台的限制。


5、区块链安全性的测试指标


区块链的安全性主要考察身份验证、访问控制、加密体系和隐私、密码算法、匿名性、抗攻击能力6个方面。以下是具体的测试指标分析。


  • 身份验证:身份验证主要测试5个指标:身份验证的方式、身份验证的场景、防止身份冒用、私钥管理、节点的进出需要身份验证。

  • 访问控制:访问控制主要测试7个指标:不同级别账户权限不同、不同分类账户权限不同、超级账户的权限、账户间的授权、账户授权时限控制、账户权限变更、权限变更形式。

  • 加密体系和隐私:加密体系和隐私主要测试4个指标:交易信息加密、签名的应用场景、签名使用的私钥保存、私钥丢失能否保护用户财产。

  • 密码算法:密码算法主要测试4个指标:密码算法种类、国密算法、加密机、可插拔自定义密码算法。

  • 匿名性:匿名性主要测试5个指标:交易匿名、全部匿名还是部分匿名、子账户对其父账户保持交易透明、子账户对其他父账户保持交易匿名、对审计或超级权限账户保持交易透明。

  • 抗攻击能力:抗攻击能力主要测试4个指标:抵御DDoS、黑客等网络攻击、抗攻击能力程度、最大容忍节点失效个数、最大容忍节点欺骗个数。



区块链的技术局限


1、区块链不可能三角


区块链系统不可能同时达到完全去中心、安全性、扩展性3个目标。那具体怎么理解呢?


所谓“完全去中心”,指的是网络中每一个节点都可以访问O(c)量级的资源。c 是系统中每个节点能拥有的计算资源,包括算力、带宽和存储,O 是表示复杂度的符号,O(c)的意思是指复杂度相当于 c 乘上某个常量。也就是说,节点在网络中是完全对等的,不存在一个中心化的节点垄断资源。安全性指的是能够保护O(n)多个资源。n 是一个抽象的生态系统里的大小。而扩展性指的是能够处理O(n)个交易,这里要求O(n)>O(c)。简单来理解,就是如果要能够处理O(n)个交易,同时保护O(n)个资源,那么只能集中在少数节点上,否则会带来资源的竞争和受攻击面的扩大。


目前的区块链平台,还没有一个能同时达到在完全去中心、安全性和扩展性目标。比特币的设计是为了提供一个安全的去中心化电子现金系统,因此它牺牲了交易性能。以太坊和比特币类似,也采用完全去中心化的设计,它比比特币要快,但安全性相对要差一些。而 EOS、BTS 等交易速度更快,但去中心化程度却大大降低,成为部分去中心的系统。


2、数据冗余


区块链的内在冗余机制,使其具有健壮性和高容错的优点。每个全节点都保存一份完整的区块数据,即使某些节点出错,也不会导致整个网络垮掉。同时宕机的节点,重启之后也总是能正确同步新的交易。但另一方面,数据确实又比传统中心化系统冗余了 n 倍,其中n是网络中全节点的数量。


所以说区块链其实是一项应用起来有一定成本的技术。如果应用不能通过区块链创造比中心化体系更多的价值的话,其实是不适合用区块链技术的。


3、区块链安全性


另一个常见问题是,在区块链中,数据安全吗?首先我们声明一下,在这个世界上就没有绝对的安全,只有相对的安全,矛和盾的关系永远存在。


可以说,区块链是现在互联网安全的升级版本,有着比传统的互联网更高的安全性。区块链是比特币中的底层技术,在传统的无法建立信任关系的互联网上,区块链技术依靠密码学、分布式共识算法和巧妙设计的激励机制,无须借助任何第三方中心机构的介入,用数学的方法使参与者达成共识,保证交易记录的存在性、合约的有效性以及交易的不可抵赖性,大大提高了系统的安全程度。


但是基于区块链的数字货币的火热行情让黑客们垂涎不已,被盗金额不断刷新纪录。盗窃事件的发生也引发了人们对数字货币安全的担忧?


随着人们对区块链技术的研究与应用,区块链系统除了其所属信息系统会面临病毒、木马等恶意程序威胁及大规模DDoS攻击外,还将由于其特性而面临独有的安全挑战。


主要体现在以下几个方面。


(1)算法实现安全


由于区块链大量应用了各种密码学技术,属于算法高度密集工程,在实现上比较容易出现问题。历史上有过此类先例,比如美国的NSA对RSA算法实现埋入缺陷,使其能够轻松破解他人的加密信息。一旦爆发这种级别的漏洞,可以说构成区块链整个大厦的地基将不再安全,后果极其可怕。之前就发生过由于比特币随机数产生器出现问题所导致的比特币被盗事件。理论上,如果随机数产生不够随机,就能通过碰撞推导出私钥。


(2)共识机制安全


当前的区块链技术中已经出现了多种共识算法机制,最常见的有PoW、PoS、DPoS。但这些共识机制是否能实现并保障真正的安全,需要更严格的证明和时间的考验。


(3)区块链使用安全


区块链技术一大特点就是链上数据不可篡改、不可伪造,但前提是私钥是安全的。私钥是用户生成并保管的,理论上没有第三方参与。私钥一旦丢失,便失去与之相对应的数字资产。一旦被黑客拿到,就能转移相应的数字资产。目前绝大多数的安全问题都出现在私钥被盗上面。


(4)系统设计安全


某些平台由于在业务设计上存在单点故障,其系统容易遭受DoS攻击。目前区块链是去中心化的,而大多数交易所是中心化的。中心化的交易所,除了要防止外部黑客盗窃外,还得管理好内部员工,防止作恶的内部员工盗窃。另外系统的业务设计缺陷也可能被黑客利用。


那么如何保证区块链的安全?


为了保证区块链系统安全,建议参照NIST的网络安全框架,从战略层面、一个企业或者组织的网络安全风险管理的整个生命周期的角度出发,构建识别、保护、检测、响应和恢复5个核心组成部分,来感知、阻断区块链风险和威胁。重点关注算法、共识机制、使用及设计上的安全。


  • 针对算法实现安全性:一方面选择采用经过长期验证过的密码技术;另一方面对核心算法代码进行严格、完整测试的同时进行源码混淆,增加黑客逆向攻击的难度和成本。

  • 针对共识算法安全性:使用更有效的共识算法和策略。

  • 针对使用安全性:对私钥的生成、存储进行保护,对用户进行信息安全教育,对敏感数据加密存储。

  • 针对设计安全性:一方面要保证设计的功能尽量完善,如采用私钥白盒签名技术,防止病毒、木马在系统运行过程中提取私钥,设计私钥泄露追踪功能,尽可能减少私钥泄露后的损失。另一方面,应对某些关键业务设计成去中心化系统,防止单点故障攻击。


4、挖矿和其他共识协议的弱点


每个共识协议都有弱点,下面我们分几个主要的共识机制来谈这个问题。


1)PoW工作量证明,就是大家熟悉的挖矿,通过哈希运算,找到一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其他节点验证后一起存储。


  • 优点:完全去中心化,节点自由进出;

  • 缺点:目前比特币已经吸引全球大部分的算力,其他再用PoW共识机制的区块链应用很难获得相同的算力来保障自身的安全;挖矿造成大量的资源浪费;共识达成的周期较长,不适合商业应用。


我们以比特币为例。在比特币的挖矿系统中,能源消耗是个大问题。比特币网络和一般的P2P网络是不同的:一般P2P网络节点间相互补充和合作,比特币网络的P2P节点之间相互竞争和重复。无论转账量多大,每个比特币网络节点都必须独立完成所有转账运算量,并通过进行无意义的哈希计算来竞争获取账本写入权和挖矿奖励。也就是说,这是一种代价和浪费巨大的P2P网络。相比传统金融而言,其运作成本将高出几个数量级。目前比特币的转账量不过十分钟数百次,但其一年耗费的电量已经可以和一个像爱尔兰这样的小国家一年消耗的电力相提并论了。


由于比特币的挖矿奖励币数每4年减半,未来当挖矿的比特币接近枯竭,矿工要求的手续费必将高涨。否则矿工就会失去动力来保证比特币网络的安全;而高昂的手续费又可能会让想使用比特币的用户望而却步,因此比特币网络未来的可持续运行可能是个问题。


2)PoS是不同于PoW的一种共识机制。根据每个节点所占代币的比例和时间,等比例的降低挖矿难度,从而加快找随机数的速度。


  • 优点:在一定程度上缩短了共识达成的时间。

  • 缺点:存在作恶节点低成本分叉的可能性,因此安全性比PoW低。另外由于获得记账权的几率和持币量相关,而币又是一次性发出、一次性分配,因此公平性比PoW差。


3)DPoS股份授权证明机制。类似于董事会投票,持币者投出一定数量的节点,代理进行验证和记账。


  • 优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。

  • 缺点:整个共识机制的中心化程度比单纯的PoS要高。

 

4)Paxos或BFT类强一致共识算法。基于传统的分布式一致性技术,加上数据验证机制,是目前行业链大范围在使用的共识机制。


  • 优点:不需要代币也可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础上,实现秒级共识验证;

  • 缺点:去中心化程度不如比特币;更适合多方参与的多中心商业模式。另外扩展性也有限,当共识节点数增加时,共识性能下降很快。


5、交易速度


区块链技术由于使用了分布式冗余记账技术,再加上各节点进行状态共识,因此会牺牲系统的速度。使得交易速度成为诟病区块链的一个重要因素。区块链交易处理速度是投入商业应用的重要考量之一。


衡量区块链每秒交易量的一个重要指标就是每秒可完成的交易量(TPS)。其计算公式为:


TPS =区块平均交易数/出块间隔


以最常用的PoW(PoS)为例。交易量是有上限的,这个上限取决于互联网目前的网速和计算机的计算和响应速度。这是因为无论是PoW还是PoS,都需要根据这些给信息传输和处理以时间。单纯提高区块大小或者减少区块生成之间的时间不能有效解决问题,因为区块需要时间传输验证。如果区块太大,就会造成网络节点的不一致性加重(分叉变多),从而严重影响安全性和可靠性。所以,PoW或者PoS的区块链,交易很难超过100tx/s这个量级。


解决的方法,除了提高算法效率和网络传输速度,基本上都是以牺牲去中心化程度以及安全性和可靠性为代价来增加输出。这并不是一件坏事,因为实际上当前的很多共识算法的安全性和可靠性假设超过了实际需求。


要想提高每秒交易量,从理论上来说有以下3种方法。


  • 提高区块容量。BCH就是实例(注意,BCH的区块大小为8MB),目前BCH如果写满每一个区块,一年就会产生约400GB的区块链数据。与比特币相比数据量会很大。

  • 降低出块间隔。缺点就是一定程度上会牺牲安全性。

  • 降低交易字节大小。在比特币设计中,一笔交易大小约为250〜400字节,如果能够降低每一笔交易的字节大小,就可以使一个区块内记录更多笔交易。一笔交易的记录包含了交易记录和签名信息,签名信息要比交易信息大很多,而且签名信息只有矿工在将交易打包入块,验证合法性时才有用,对于非矿工来说其实是没有用的。所以比特币的隔离见证实际上是把签名信息移到交易外部,不计入区块大小判断来间接提升交易数量。但以上这些方法都只能线性提高每秒交易量。


共识机制的改变能从根本上把TPS提高到过万这个级别,BTS可以说是一个很好的例子。


还是以比特币为例。现在提高比特币每秒交易量的方案有:


  • 硬分叉,即增大区块大小;

  • 软分叉,即优化网络但不改变区块大小(还是1MB),如隔离见证、闪电网络、侧链等。


以上内容,涉及到区块链的安全问题区块链的技术局限相关探讨,在下一篇文章中,营长将对挖矿和共识协议的弱点交易效率问题系统升级维护问题3方面继续探讨,老铁们敬请期待。




V神来北京啦!6月29-30日,2019第二届以太坊技术及应用大会将在北京重磅开启,届时V神将携以太坊核心团队与国内外区块链大咖带来包括安全等众多以太坊开发干货。由于干货过于密集,小伙伴们要做好烧脑的心理准备哦!


大会开幕倒计时 天!

扫码或点击阅读原文,既享优惠购票!

以太坊大会福利社现已全面开放扫码入群即可抢先获得大会一手信息和优惠福利!相关疑问也可入群交流咨询,务必备注“公司+职位+姓名”否则不予通过!!!

推荐阅读:


猛戳"阅读原文"有惊喜哟


老铁在看了吗?👇

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存