2021-03-22

关于Libra的思考:金融服务是否应该开源?

这是19年底写的一篇文章,是写给某位领导看的,当时可能不合适公开,现在过去这么久了,Libra也改名字了,所以公开在自己的博客中记录一下当时的一点思考。

 

以下是正文

--------------------

 

传统的金融服务,从后端的账户、结算等系统,到前端的app,代码都是严格保护且尽可能不暴露,主要目的是为了保护系统的安全性。而Libra,作为一个由多个金融机构组成的联盟,使用区块链技术提供金融服务,却按照区块链的习惯完全公开了其源码。开源到底有何利弊?金融服务是否应该开源?是Libra带给我们的一个重要思考。

开源的Libra

2019年6月18日,Facebook旗下加密项目Libra正式发布白皮书。白皮书中提到,尽管现在互联网和移动宽带的高速发展使得全球数十亿人能够享受到成本更低、更便捷的服务,但仍有17亿成年人未接触到金融系统,无法享受传统银行提供的金融服务。Libra的目标正是建立一套简单的、无国界的货币和为数十亿人服务的金融基础设施。

区块链技术

Libra通过引入区块链技术,保证数据的安全性和可靠性。

Libra使用全新的Move编程语言进行合约的开发和设计,Move是从区块链安全事件中吸取经验而创造的一种编程语言,能从本质上令人更加轻松地编写符合作者意图的代码,从而降低出现意外漏洞或安全事件的风险。Move从设计上可以防止数字资产被复制,且减轻了关键交易代码的开发难度,也将加快Libra区块链协议以及在此基础上构建的任何金融创新的演变。数据的安全性和可靠性得到大大增强。

Libra使用新的类BFT共识算法LibraBFT建立区块链的信任体系。通过引入公正的验证节点,本质是不同地理区域的各种企业、非营利组织、多边组织和学术机构所组成的理事会成员,以保证公信身份的可信。LibraBFT保证即使有部分节点(不超过三分之一)作恶,整个网络也能安全地运行,由此保证了数据的安全性和可靠性。基于BFT的共识算法和工作量证明算法不同,不需要耗费大量的电力资源,且具有高交易处理量、低延迟的特点。

Libra对传统区块链的数据结构进行了修改,虽然也使用默克尔树以保证数据的不可篡改,但Libra区块链是一种单一的数据结构,可长期记录交易历史和状态。这种实现方式简化了访问区块链的应用程序的工作量,允许它们从任何时间点读取任何数据,并使用统一框架验证该数据的完整性。

资产储备

现在出现的诸如比特币等加密货币被诟病的一点就是币价起伏不定,故不具有可作为支付手段、交换媒介、价值尺度和价值存储等货币应有的特征。而Libra所希望达到的愿景是发行一种全球性的数字原生货币,能够集世界上最佳货币的特征于一体:稳定性、低通货膨胀率、全球普遍接受和可互换性。

为了降低Libra货币的波动性,Libra将全部使用真实资产储备(称为“Libra 储备”)作为担保,并由买卖Libra并存在竞争关系的交易平台网络提供支持。这就意味着任何国家的人都可以根据汇率将Libra兑换成本国货币,并获得高度的保证。尽管有一篮子资产作储备,但这并不能完全保证Libra币值的稳定,选择储备的方案是为了最大限度地减少币价波动性,尽可能达到货币的稳定和低通胀率。

Libra协会

由于Libra目标在于为数十亿人提供金融基础设施,所以需要一个由多元化的独立成员构成的运营实体,这个运营实体就是 Libra协会,一家独立的非营利性会员制组织,总部位于瑞士日内瓦。

LibraBFT共识的内在逻辑也满足了孕育Libra协会的条件,区块链网络的验证节点本质上就起了共同维护和决策区块链网络发展方向的功能。Libra协会由Libra协会理事会管理,理事会由各验证者节点各指派一名代表构成。理事会成员共同对网络和储备的治理制定决策。最初,理事会由一些全球企业、非营利组织、多边组织和学术机构组成。所有决策都将通过理事会做出,重大政策或技术性决策需要三分之二的成员投票表决同意,即LibraBFT共识协议中所要求的网络中绝大多数成员。

Libra的一大愿景是逐步提高网络的去中心化程度,也即将Libra区块链从“许可型区块链“转换到”非许可型区块链“,这根据实体是否能作为验证者节点接入区块链平台来决定。在"许可型区块链"中,实体通过权限授予方式运行验证者节点。在"非许可型区块链"中,符合技术要求的任何实体都可以运行验证者节点。普适的去中心化架构有利于降低网络的构建难度和普通用户接入网络的门槛,这是毫无疑问的,但这并不是一件容易的事,现在的验证节点一般也是权威的代表,如果加大了验证节点的个数,且不说在决策制定方面的问题,区块链网络的性能将大大降低,届时能否高效完成服务数十亿人金融业务的目标将会是个疑问。

完全开源

在传统金融领域,系统的架构和实现一直都是处于保密状态的,无论是后台系统还是前端的app。因为黑客一旦获得源代码,就可能通过代码找出漏洞并加以利用,这将极大程度地影响金融服务的安全性。

但Libra不同,其设计的思想遵循了区块链的本质,架构和代码实现完全开源。公布的白皮书简明扼要地介绍了Libra的背景、简介、未来期望等。并以白皮书作为索引,给出了诸多Libra开源资料的链接。

Libra的整套代码实现已经更新到知名开源社区及代码托管库Github上了,虽然代码发布的时间并不长,但已经吸引了大量加密社区评论者和程序员的关注,至今已经被接近12340个用户加星关注。Libra core使用开源的rust语言进行书写,这是一种新的系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言,适用于大型场景,提供更好的内存安全。

2021-03-22

Libra core主要有Admission Control、Bytecode Verifier、Consensus、Crypto、Execution、Mempool、Move IR Compiler、Move Language、Network、Storage、Virtual Machine等几个模块。和大部分现有公链一样,Libra core代码包含了所需要的全部功能模块,例如验证节点和普通节点的角色都集成在一份代码中。这使得部署工程变得简单易操作,不会因为身份的不同而有不同。

2021-03-22

Libra也在实现中引入了众多优秀的开源项目,如下表所示。

名称 开发者 功能 优点
RocksDB Facebook 数据库 与快速存储器存储数据性能相当,适应于高负载服务场景
gRPC Google RPC框架 高性能,将移动和HTTP/2放在首位
Protobuf Google 数据交换格式转换工具库 相比于JSON有更高的转化效率,时间和空间效率是JSON的3-5倍

可见,Libra在构建区块链关键模块(数据存储、消息通信等)的过程中,引入了大量业内优秀的开源项目,不仅高效构建了更加健壮的系统,也是对开源的最好诠释。

作为一个开源项目,Libra不仅是从开发者的角度对用户进行开源,对于面向的数十亿系统的使用者来说也是完全开源的。其官网(https://libra.org)有大量的文档帮助普通的用户深入接触Libra,例如如何获得Libra、Libra和其他加密货币的区别等。Libra的社区门户(https://community.libra.org)和github的issue板块(https://github.com/libra/libra/issues)联合广大的开发者和用户一起探讨Libra的发展和落地。

开源带来的影响

Libra作为首个面向数十亿用户,提供普惠金融服务的平台,采用了开源的策略。其运行的逻辑和实现的代码完全被公众所知,这种全新的开源思想是之前金融服务领域所从未有过的。这种设计思想是否正确,我们至今还不得而知,但Libra的完全开源引来了社会众多的关注,包括国家和各种机构,社会上褒贬不一,有持学习褒奖观点的人群,也有批判的声音。

目前很多国家在筹划自己的开源金融系统,如日本在2019年7月19日开始布局一个基于区块链的跨境支付系统,准备来取代SWIFT。日本通常都是跟美国合作的,但这次日本也要建立一套跨境支付全新系统。再如英国也在研究央行数字货币CBDC的运作逻辑等等。

当然也有部分国家或机构对Libra的诞生持反对态度,7月12日,美国总统特朗普在推特上表示:“我不是比特币和其它加密货币的粉丝,这些都不是真正的钱,而且它的价值是高度不稳定的,不受管制的加密资产会促进包括毒品交易等非法活动。同样,Facebook的Libra项目也没有多大地位以及可靠性,它必须拿到新的银行牌照并受到银行业务规则的约束”。9月14日有报道称法国发誓要阻止Facebook的Libra在欧盟开展业务等。

代码的开源是一把双刃剑,一方面,代码能够被世界范围内的优秀程序员审计和完善,这利于系统健壮且安全地发展;但是另一方面,代码的开源省去了黑客逆向的过程,大大减少了黑客入侵系统的工作量,如果有恶意的黑客发现了系统的漏洞但是不上报,而是对漏洞加以利用,则会危害整个系统的安全。至今为止,Libra项目已经被提出271个issue,其中带bug标签的有127个,93个已经被关闭,通过pull request成功修复的bug有11个。值得一提的是,著名智能合约审计项目OpenZeppelin的开发人员在Libra脚本语言Move中发现了严重漏洞,该漏洞可以让恶意行为者操纵智能合约,现已被修复。

2021-03-22

Libra是一个全球性质的金融服务平台,与民众的财产息息相关,所以在正式发布之前接受代码审计的过程是十分必要的。Libra开发团队希望更多具有不同技能和背景的人能够测试Libra区块链的安全性,以降低未来代码上线时可能造成的风险。为此,Libra协会向公众开放了bug奖励计划,期望在2020年Libra正式推出前解决其安全问题。协会的开发者生态系统负责人迈克尔·恩格尔(Michael Engle)表示,参与者可以获得高达10000美元的资金,用于发现重大安全问题。恩格尔解释了此举的动机:“Libra区块链目前仍在测试中,并且没有真正的资金流通,希望(在正式发布前)帮助研究人员发现问题”。开发者可以在 https://hackerone.com/libra 页面查询奖励计划的相关内容。

互联网开源史

源码保护

互联网程序大多数都是闭源的,企业会小心保护自己的源码不泄露。例如企业会做严格的内外网控制,外部的访问和链接都会被严格过滤和审查,防止来自外部的不安全访问泄露代码。内部也会根据程序员的级别做代码的权限控制。

代码保护的意义在于,一方面可以防止盗窃技术,另一方面系统的问题也不容易暴露。2019年4月,B站源码在github泄露事件闹得沸沸扬扬,这是第一次因为源码泄露而上热搜的事件。从源码泄露开始到gitHub最终删除代码的两小时,大概是今年B站最煎熬的时刻,在B站向Github求助删除的DMCA邮件中,在"Please help us"后写下了三个醒目的感叹号。可见源码泄露对于闭源项目来说是非常严重的危机。

而像通信、金融等对安全性要求更高的场景,更是会为保护源码下足功夫。例如2018年中国人民银行办公厅发布《关于开展支付安全风险专项排查工作的通知》,通知称为进一步加强支付领域网络与信息安全管理,有效防范支付风险,切实保障消费者合法权益,人民银行决定开展支付安全风险专项排查工作,其中146号文件第13项提出了商业银行、非银行支付机构和清算机构需对软件采用防逆向工程保护措施,防止源代码被破译。

开源浪潮

1997年的春天,包含Eric Raymond、Tim O'Reilly在内的*软件社团第一次提出了”Open Source“(开源软件)这个术语。从那时起支持”开源软件“与支持”专有商用软件“已成为了软件行业的两大阵营。开源在互联网取得了巨大的成功。目前构建一个互联网项目几乎离不开开源项目,因为有太多的模块已经有前人封装地很好了,如果再重复造*则是一件十分低效的事情。互联网内目前最前沿的技术也几乎都是开源的,从操作系统到应用软件,从前端平台到后端系统,以及数据库软件,还包括近几年大火的大数据基础架构Hadoop,云计算管理平台Openstack,机器学习的开源库Tensorflow等。

项目名称 代码仓库链接 项目所在领域 star数量
Linux https://github.com/torvalds/linux 操作系统 80222
Redis https://github.com/antirez/redis 数据库 38682
Hadoop https://github.com/apache/hadoop 大数据 9564
Openstack https://github.com/openstack/openstack 云计算 3220
Tensorflow https://github.com/tensorflow/tensorflow 机器学习 134048

国内公司也越来越多的参与开源,加入开源基金会或贡献开源项目。据InfoQ在2019年4月的数据统计,国内主要是由以阿里、百度、腾讯领衔的互联网公司在开源领域最为活跃,以下表格是InfoQ整理得出的国内互联网公司参与的开源项目情况。

2021-03-22

开源带来了互联网的百花齐放,百家争鸣,促使了互联网的蓬勃发展。有了这些开源软件,开发者就能避免重复造*,在很短的时间内搭建高质量的互联网服务。

开源的原因与模式

开源运动的发展和兴起,究其原因,最开始是因为早期软件都是付费的,如果想在自己的pc机上运行高质量的软件,就必须花钱向提供商购买。但是往往这些软件的价格不是普通家庭可以接受的,软件开源免费的思想开始萌芽。其次,由于编程技术的不断普及,编程不再只是大企业程序员的工作,许多自学成才的工程师也能写出高质量的代码,因此企业难以再独自构建技术壁垒,渐渐依靠企业自身独特技术卖软件的模式走不通了。再者,随着移动互联网的兴起,流量为王的盈利模式逐渐显现,代码开源之后软件是免费使用的,更容易吸引开发者在此基础上构建应用,进而引进更多的用户,为企业自身带入大量流量。

渐渐地,以开源为主导的软件工程方法被广泛采用,例如android这种大型系统的开发,经过开源之后,世界范围的程序员可以一起审计和修改代码,或做二次开发。很多单靠google自身无法攻克的技术难题,在开源之后,便会涌现很多解决办法。由此大大提高了系统的健壮性和发展速度。

并且,开源的企业或者机构可以邀请同行一起来制定协议的标准,各自按照标准开发自己的系统,做到相互之间的兼容。例如bittorrent,尽管市面上有很多种子下载器,但是底层的协议都是一样的。从结果上来看,bt下载领域的蓬勃发展与开源思想密不可分。整个行业的蛋糕也因开源而做大,同行之间互利共赢。

开源运动催生出了诸多开源的协议,也正是在标准协议的制定和规范下,现在软件行业才能如此繁荣。常见的开源协议如下:

协议 描述 要求 允许 禁止
Apache 一个较宽松且简明地指出了专利授权的协议 协议和版权信息 声明变更 商用 分发 修改 专利授权 私用 附加协议 责任承担(禁止让作者承担责任,可以理解为免责) 商标使用
GPL 此协议是应用最为广泛的开源协议,拥有较强的版权*( copyleft )要求。衍生代码的分发需开源并且也要遵守此协议。 此协议有许多变种,不同变种的要求略有不同。 公开源码 协议和版权信息 声明变更 商用 分发 修改 专利授权 私用 责任承担 附加协议
MIT 宽松简单且精要的一个协议。在适当标明来源及免责的情况下,它允许你对代码进行任何形式的使用。 协议和版权信息 商用 分发 修改 私用 附加协议 责任承担
BSD 较为宽松的协议,包含两个变种BSD 2-Clause 和BSD 3-Clause 协议和版权信息 商用 分发 修改 私用 附加协议 责任承担
LGPL 主要用于一些代码库。衍生代码可以以此协议发布,但与此协议相关的代码必须遵循次协议 公开源码 库引用 协议和版权信息 商用 分发 修改 专利授权 私用 附加协议 责任承担

引发的问题

开源运动的兴起使得软件行业蓬勃发展,但是代码开源也会引起诸多方面的问题。代码的公开使得系统的漏洞更容易暴露,尽管有世界范围的程序对代码进行审计和漏洞提交,但总会有恶意的黑客在找到漏洞后不进行提交和修复,而是进行漏洞的利用,发起攻击。代码的开源省去了黑客对代码进行逆向的工作,使得入侵系统更加方便。2015年,安卓的"安卓滴血"漏洞就是一个很好的例子,漏洞发现于原生的Android的Stagefight媒体库上,堪称移动世界的“心脏滴血”。几乎所有Android设备都含有此安全问题,攻击者会向那些没有安装补丁的用户发动针对性攻击,受害者的隐私、数据将会暴露在风险之中。

并且由于优秀的开源项目会被众多的其他项目引用,那么如果被引入的开源项目出现问题,则会影响其他的项目,影响程度与被引入的代码量成正比。例如2018年圣诞节闹出的Ant Design事件,事件起因是蚂蚁金服的Ant Design框架,开发者别出心裁地在框架代码中埋下了一个会在圣诞节当天触发的“彩蛋”,该“彩蛋”会在前端的按钮中加入一个积雪的效果,但是由于这个库被众多企业项目所引入,使得网页的很多前端按钮出现了这个十分累赘的积雪效果。结果是蚂蚁金服给众多的框架使用者造成了不必要的麻烦——大量前端开发者纷纷前往Ant Design的GitHub仓库留言、反应问题。

2021-03-22

2021-03-22

区块链与开源

区块链由于是公开的分布式账本,天生蕴含开源的思想。而比特币是区块链的开山鼻祖,截至目前github上已经有649个代码贡献者,21327个commit,40037个加星关注。作为受关注程度最高的区块链项目,比特币的火爆程度可想而知。github上关于区块链的项目和热度也在逐年增多,值得一提的是,github2018年年度报告中,前十个增长最快的开源项目统计中,以太坊排在第五位。

区块链的开源,使得开发者很容易基于已有的区块链系统进行二次开发,解决一些问题,并不断进行优化。如此,不仅有利于区块链系统的蓬勃发展,也有利于行业的快速发展,如今的很多区块链项目的设计思路都是借鉴了比特币和以太坊的原型,一些项目也直接引用了比特币或者以太坊的部分代码模块,达到了很好的复用效果。并且,由于区块链和token息息相关,token的发行量与增发速度必须公开,这样才可能获得社区和用户的信任。从协议的角度来看,只有遵循了同一套交互协议的节点才能加入区块链网络,共同维护区块链的数据,保证数据的不可伪造和篡改。由此看出,开源是区块链的必经之路,也是唯一的路。

当然,和前文分析的类似,区块链代码的开源也会使得系统的漏洞更容易发现,更容易攻击,例如以太坊著名的the DAO事件等。

金融服务的开源

拥抱开源

开源软件在许多行业有效地推动了技术普及、开放与公平竞争。然而,金融服务业一直是个罕见的例外:金融机构依然倾向于使用私有技术进行开发和运营。目前市场上的金融服务系统,大部分还是处于代码保密状态的,不过一些成熟的系统还是或多或少会使用一些开源技术,例如蚂蚁金服。2019年天猫618大促,蚂蚁金服首次在调度系统和技术栈全量应用 Kubernetes,平稳度过大促并突破Kubernetes单集群万节点规模,机房和集群数量达到数十个,总节点达到数十万个,这是世界最大规模的Kubernetes集群之一。蚂蚁金服使用开源项目Kubernetes正是金融服务拥抱开源最好的例子。

除了Libra之外,许多金融机构正在渐渐拥抱开源。金融科技开源基金会(FINOS)的成立是朝着这个方向迈出的重要一步。该基金会的成员包括美国资产管理规模最大 30家银行中的10家,例如高盛和摩根大通。摩根大通就在今年发布了企业级分布式账本和智能合约平台Quorum,这是金融行业在开源区块链领域举足轻重的一步。

不过到目前为止,还没有开源的系统投入到真实的金融服务生产环境中,Libra可能首开先河。

各方观点

针对金融服务是否需要拥抱开源的看法,诸多机构和企业发表了自己的看法。2019年7月信通院发布金融行业开源治理白皮书,在白皮书中提到,金融行业采用开源技术已经成为趋势,选择开源技术对金融机构意义重大,但是引入开源的风险也日益凸显,不容忽视,白皮书的最后给出了金融服务开源的治理建议和业内的治理实践案例。信通院指出,开源技术是构建信息系统的重要选择,需要乐观对待,控制风险。

蚂蚁金服是拥抱开源的热衷者,为了更好地推进开源技术,蚂蚁金服加入了云原生计算基金会(CNCF)。蚂蚁金服副CTO胡喜也表示,金融服务将成为开源的下个前沿领域。在接下来的10年中,开源技术最新、最关键的应用可能是改造金融服务,让金融服务在全球各地更普惠。并且,蚂蚁金服将会开源SOFA(Scalable Open Financial Architecture)最核心的两个组件——分布式事务框架和服务注册中心。在这两块开源后,SOFA将成为一套真正完备的分布式解决方案。

作为国内开源领域的先驱,腾讯对金融服务拥抱开源也有自己的看法。腾讯基础架构部云存储开发中心副总监程彬指出:多年来,金融行业信息化都在做数据大集中,这种模式的优势是安全可靠、自主可控;但是,过于保守的业务模式和IT架构,已不适用于今天的互联网金融架构。所以,选择更先进的业务管控平台进行创新,是金融行业类的企业开始拥抱开源技术的最根本原因。在大规模、高并发、渠道类应用日益增多的互联网金融背景下,海量数据处理、分析需求开始增多;而开源技术可以帮助金融企业构建更敏捷高效、精细化管理、可管可控以及可扩展的IT系统。

优劣分析

综上所述,可以看到金融服务开源存在以下优点:

  • 增加公众对金融服务的信任。之前的金融服务都是靠进行开发的企业机构的背书来获得公众的信任,开源之后,会有公众以及一些专业的第三方机构进行代码审计,用户的信任就会依赖这些审查者。

  • 开源赋能了新的模式:多个实体共同提供金融服务。以前的金融服务大多数都是由单个实体进行提供的。在一些多个实体的场景下,例如跨行跨境转账,技术一直不能提高。主要是因为多个实体间技术互相保密,难以一起开发一套系统,达成协议的统一。而现在开源的模式,可以让多个实体共同开发测试代码,共同提供金融服务。

  • 吸引更多的开发者来优化完善。金融系统的开发以前都是较为封闭的,经常是由一些专业的企业例如IBM、Oracle进行完成。这种闭门造车的模式导致金融系统的技术水平难以跟上最先进的水平。开源之后,社区内的优秀开发者可以一起来帮忙开发,系统的性能、稳定性、安全性都会得到提高。

  • 开源的软件都走在技术的前列。金融系统为了提供优质的服务,肯定需要使用开源的软件。既然用了,自己也应该回馈开源社区,开源自己的一些代码。

但同时又伴随着以下缺点:

  • 系统存在的漏洞很容易暴露,会引来一些恶意攻击。开源是一把双刃剑,社区帮你解决一些漏洞的同时,你的漏洞也暴露给了社区。肯定会有一些恶意的人员,利用这些漏洞来进行攻击。所以在安全性方面,开源的利弊权衡非常重要。如果开源吸引来的更多的是恶意的人,而不是善意的,那开源就没有意义了。

  • 如果金融服务更多地使用开源软件作为基础架构,就要考虑开源软件中存在的漏洞。开源软件都是靠社区的开发者进行维护和测试的,所以不会经过严格的测试。而且开源软件的漏洞会更容易被公众知晓。一个漏洞的发现往往会引来大范围的攻击,从而波及到金融服务。所以金融服务在使用开源软件的时候更应该注重漏洞的及时发现和升级。

最终利大于弊还是弊大于利,还需要诸如Libra等先驱者的金融服务上线,并接受用户和开源社区的检验之后,才能有所定论。

总结

完全开源一个金融服务并没有先例,Libra很可能会成为第一个。作为一个开发者,很希望看到金融服务未来能够拥抱开源,拥抱最前沿的技术。但是从金融服务的用户来看,开源带来的安全性风险也不容忽视。

参考文献

上一篇:【Rust日报】 2019-06-19:Facebook的数字货币项目Libra由Rust实现


下一篇:从Libra看区块链的机遇