区块链是加密货币背后的技术,是当下与VR虚拟现实等比肩的热门技术之一。但区块链或分布式记账技术存在设计缺陷,必须引起重视。
区块链或分布式账簿既不是分布式的,也不是记账簿,它是通过集中处理的方式,对所有交易历史记录进行处理后而产生的,并以此来计算当前状态值。在工程或计算机科学定义中,分布式系统通常由几个分区组成,其面临的挑战是通过分区内以及分区之间的数据交换而作出全局最佳决策。
目前许多商业银行参与的支付系统就是一种分布式系统,这是因为管理、法律、IT、客户偏好、地理分布、人口分布等问题,不可能建立一个由中央银行设立并提供全国所有人账号的系统。而这种一部拥有所有人账号的系统正是这些区块链倡导者所倡导的:整个系统所有状态的副本将对每个独立的分区(甚至所有分区的成员)都是可见的。然而,由于过高的成本以及并不如预期的简化,这种中心化处理全用户备份的系统,实现起来既不实际也不必要。事实上,互联网就是一个分级的分布式系统,具有足够的冗余度满足某些应用程序对分布式系统的需求。例如,DNS服务是一组具有严格分级控制的去中心化系统服务。与许多区块链和DLT倡导者所不同的是,互联网并非没有一个对其核心服务进行控制的中心,也不是没有对第三方的信任。
账户余额包含其所有账户的当前状态,因为影响这些状态的所有交易,已经被处理并且使用迭代方法对当前状态进行了更新。在使用区块链算法时,或者根据自己算法的正确性来选择信任所有数据的当前状态值,或者每次在有新的交易发生时从整个分类账记录中重新计算当前状态。在这方面,计算机科学的目标是开发出根据输入数据迅速给出最简单结果的优化算法,而不是固执地利用多个区块链系统所使用的“蛮”力算法。可以信任自己的算法进行迭代,并且只保留账单的当前状态,或者不信任自己的算法,每次都通过整个交易历史重新计算当前状态。由于开始计算时拥有所有交易历史并不能保证得到正确的当前状态,如果不信任计算当前状态的迭代算法而选择相信“蛮力”算法,那又如何证明“蛮力”算法会给出正确的答案呢?数学中最简单的真理是:应信任作出结论所依据的证据,而不是回到所谓的“常识”纠结于诸如“因为从开始就有某地方的所有数据,就能正确估计当前状态”。认识到这点非常重要,尤其是区块链现在被认为是从物联网到医疗系统,甚至政府治理的“救世主”,就好像区块链产生之前,整个计算机科学领域对算法复杂性的研究和算法简化都是不需要的。
那么,如何对被认为是正确的状态估计实施保护,并且传输给每个参与者?用于计算当前状态的客户端数据副本都必须是安全可靠的,否则基于这些数据作出的状态估计就不可信。正因为安装在电脑或智能手机上的所有客户端都可以访问这个副本(即使该副本可以被质疑),不能保证它能给你带来不被篡改的结果。因为对于数据的保护涵盖了对通信信道、数据传输以及客户端所使用的代码,因此保护并安全传输的过程必将是十分艰难的。
除了使用“分布式”和“账单”定义的错误之外,许多可以通过区块链系统去解决的问题在现有的金融系统中并不存在。例如,区块链应用的一个假设就是,在纯粹的点对点的支付系统中,由于没有一方,或者没有可以信任的一方来计算和维护用户在当前状态的余额,因此用户当前的余额必须根据历史交易数据进行计算,最终导致每一笔交易都需要为所有人提供可验证的签名。而在许多采用区块链技术进行清算和结算的银行应用中,首先不存在这些用户不信任金融机构结算的问题,跨银行的交易系统已经运行多年,并没有区块链推崇者假设的不信任或业务问题。当然,所有系统都有改进的空间,但是正确地提高跨银行结算系统效率的方法是:要么发现和定位已经存在的系统设计问题,并通过技术手段去解决它们;要么改进交易流程或者围绕交易设计新的流程去解决业务问题。多年以来,企业级应用的架构上都会通过改进非最优化的交易流程,并采用新的信息技术来设计和搭建企业级的信息技术系统。而通过使用一种原本是用来解决用户之间交易互信问题的设计来解决交易流程或IT架构问题,看起来是非常奇怪的。另外,区块链需要在一部分参与者之间建立加密通信信道,以防止通信内容被无权知悉的其他参与者获取,这会带来一系列新的问题,而且不可能通过最简单的系统解决。任何设计过加密系统的人都知道管理密钥的重要性不亚于保障算法及相关协议的安全性。在这样的系统中加上几个私密共享协议、多重签名、同态加密以及共识算法,是不可能在一群预先毫不信任的区块链参与者之间,实现安全的密钥配布和生命周期管理的。
一旦了解并更正了这些区块链文献中使用的术语和定义的错误,大家便可以像分析其他交易系统一样来分析区块链的应用,并认识到其在安全性和架构方面中的一些设计缺陷。
以下对区块链和DLT技术缺陷作一简要总结:
第一,单点故障。对于比特币这样一个昂贵系统(消耗的电力相当于一个小国家)而言,致命弱点却在于其安全性。用于交易签名的非对称算法和哈希算法都会在一定的正常使用期限以后存在缺陷。比特币、区块链的所有算法和不同的密钥长度都已经完全包含在它近8年的历史。而根据区块链的算法,必须信任整个区块链的交易历史的不可篡改性,才能信任当前状态的计算结果。不难看出:部分早期比特币与区块链由于当时使用的算法或者密钥长度已经过时,因而此部分交易历史就有可能被伪造,这将导致以此得到的当前状态也不可以被信任,这种系统设计导致一个危险的单点故障状态。
第二,混用认证密钥和签名密钥。非对称密钥可以用于认证和签名(如果需要时可用于加密)。根据加密安全设计原则的要求,不同的密钥应该用于不同的目的,以避免将密钥用于多用途而导致数据泄漏。在比特币与区块链实际操作中还存在更严重的问题:用户需要保护好自己的私钥,因为私钥不仅用于验证身份(发件人和收件人身份验证),还被绑定到其所拥有的比特币上。通常企业系统设计中,用户丢失了身份验证密钥还可以通过回答一些安全问题得以恢复。然而,丢失了比特币或区块链的私钥,就意味着永久地失去对比特币的使用权限。
第三,垂直耦合设计而非分层架构。像区块链技术这样复杂的技术都应具有分层架构设计,而不是使用垂直的紧密耦合的系统架构。互联网设计具有七层(OSI模型)或四层(TCP/IP)。这些层完全不存在耦合,因而可以支持每层具有最大的灵活性和交互性。
新闻热点
疑难解答