随着某些领域的应用陆续浮出,区块链技术的发展又有了新的进展。但本行业的许多细节并未为社区外的人有较多的了解,包括开发进展和应用情况。这一期公开课,雷锋网邀请到众安保险旗下众安科技CTO李雪峰来讲解!
李雪峰,众安科技CTO,曾就职于摩根大通、亚马逊、东南融通、阿里巴巴,英属哥伦比亚大学计算机软件、金融学和工商管理硕士。
以下是公开课实录:
李雪峰: 区块链的技术特点我认为是:数据加密不泄露,分布式记录不丢失,网络广播防篡改。这些特点可以理解为这种技术的一种标准。现在这些标准已经有了很多开源的实现,比如大家熟知的比特币、以太坊和Hyperledger。虽然现在还没有很通用的标准,但这些产品其实原则是上万变不离其宗,基本遵照以上标准或者技术特点来实现。只是,这些产品又各自表现出差异性,因为他们主要解决的问题不同,比如比特币要解决的是数字货币的转移,以太坊更侧重于提出一种新的账户模型,通过智能合约推进更多应用开发。
众安现在也有自己的链,但为什么我们还要重复去造轮子,去做自己的实现呢?因为众安的很多业务场景都是金融场景,其对技术有非常严格的要求,比如交易的频率,数据存储和访问的要求,还要接入证监会的审查,以及联盟之间互联互信互通的需求,而这些都不是目前已有的一种链,或者是几种链组合就能完成得了的。
现在摆在我们面前的现实问题是:区块链的技术特点和我们需要满足的业务场景无法一一映射,我们没有办法把业务场景照搬照套到区块链上去实现,就像软件科学中的投影视图关系,大家也许都画过UML、模型图等,我们会发现,业务视图和部署视图等不同视图之间永远无法一一对应。
下面根据众安自己的经验,我们结合场景来讲一下区块链的技术:
说到区块链时,大家首先想到的是加密,其常见的算法包括椭圆曲线加密,公私钥对,哈希算法,以及最近提到的零知识证明。那么加密的使用场景,有数据就需要隐私,有隐私就需要加密,因此所有的数据存储和查询中我们都需要加密手段来保护数据的隐私和安全。
那么数据通过该加密来保护后,接下来要做的是授权。数据被调用时首先要考虑的是数据确权的强制性。区块链是一个分布式账本,所有数据都可以共享,共享的前提是提供数据的人愿意给别人看,比如给谁看、看多长时间,看多少次,这个过程是高级的算法问题。那么在众安的实践场景中,我们会在用户的敏感数据使用中通过智能合约和一些授权算法来进行数据的授权请求。
关于分布式账本和数据不丢失的问题,这是多中心带来的利好。传统互联网架构上我们一般做跨机房的灾备,或者异地多活机制。但区块链的网络天生就有这样的特点,因为节点之间是通过P2P连接的,而且每个节点都有完整的数据,这就导致其天生就符合了异地多活的特性,哪怕部分节点挂了也不影响整个网络可用性。除非所有的节点都失常了才可能影响整个网络,但这几乎是不可能的事情,因为所有节点是布置在世界各地的。
在现实生活中,保险、银行等各个金融机构的系统都是不一样的,哪怕同一行业的不同机构间都很难保证数据的标准化,日常金融活动交互中都需要第三方标准组织来完成,这个组织有可能是一个协会,有可能是一个企业。
比如对账问题,对于多个参与方来说,每一方都有自己的账本,对账时A方与B方交换账本,同时把对方的账本来与自己本地的账本来校对,如果发现问题需要人工去处理,这会涉及极高的成本。那么通过区块链对账时,首先就可以消除多个账本的情况,所有对账参与方拥有共同的账本,所有写入账本的数据都是符合双方或多方的预期,也就是在账本写入时就实时备帐,减少成本的浪费和人工的支出。
接着讲一下数据防篡改的特性。这个技术特点最适用的场景是数据公信力的场景。
基于共识机制的确认,区块链上的数据基本不具有被篡改的可能性。但这有个误区——它不是完全不可篡改,而是理论上的。之前有人统计过,如果你准备4亿美金的话,你也可以把比特币上的交易都改一遍。信用是金融的核心,信任是社交的基础,基于区块链防篡改的特征,我们可以解决很多金融、保险领域的防欺诈问题。
然后就是时间戳,区块链上每条交易都有一个时间戳,它表示的是交易在区块链中被执行的时间,这个时间戳就是可溯源的关系,它可以给我们提供所有操作的历史变更,天然提供可审计功能。在供应链溯源等场景,它都可以发挥很大的作用。
接下来讲一下共识算法,本质上说是加上了拜占庭容错的分布式一致性共识算法。在使用分布式一致性算法时,必须有个前提是——其环境都是可信的,都需要默认环境中没有恶意的节点,对网络进行攻击或数据篡改。但这在区块链网络中是很难保证的,因为它是P2P网络,主要只要符合标准,它都能接入进来。那么这个时候我们就要在传统的分布式一致性算法之上加入拜占庭容错机制。
也就是说,共识算法的区块链的核心之一。
然后是智能合约。讲到智能合约也许大家第一时间想到的是以太坊,它其实是将参与方的约定和共识转变成图灵完备的代码,它对合约逻辑的实现和和执行权进行拆分,合约是你写的,但执行的不一定是你,这就保证了合约一旦实行后任何人都不能干预,它只能按照共同达成的约定去执行一定的业务逻辑。对于任何既定业务规则,包括一些涉及信任危机的业务场景,比如众筹、交易撮合、彩票开奖过程等都的执行可以放到智能合约上去执行。但目前智能合约发展还不是很成熟,大家可以将其理解为是规则的升级版。
最后是联盟链,众安使用的是联盟链的模式,它是最贴近现实的一种模式。很多合作伙伴,有些会直接使用我们的区块链网络,有些会自己部署自己的区块链网络,并且带着自己的区块链网络加入进来。这个时候就需要解决联盟链之间的信任机制,通讯机制和数据同步机制。
李雪峰: 对应到保险场景,切入点是非常多的。比如健康险的数据储存,淘宝和理赔过程中数据的可靠性验证,以及理赔的自动执行等。
下面分三个大方面讲一下区块链在保险领域的落地场景:
关键在于提升客户的参与度,主要是改善用户心理和行为的感受。比如,可以为用户控制个人数据,解决P2P保险等监管、数据跟踪的问题,利用智能合约提供自动化理赔的执行。
一方面客户害怕自己的数据提交给保险公司后失去控制。
第二,如果得不到永久保存,那么用户在每一次购买保险产品时,都需要重复填写各种信息,这些都是非常让用户厌倦的事情。
有了区块链,我们就可以通过区块链开发一种基于区块链的网络身份证,其可以与某个实体关联起来,并且对于用户隐私比较敏感的数据,比如购买健康险产品时与健康相关的医疗数据等,我们都可以把它存储在区块链里面,通过数据加密和读取的授权加以对数据进行保护。但事实上很多时候,数据并不一定需要存储在区块链里面,比如我们即将推出一个基于区块链网络身份证的app,这样用户的数据就是保留在移动终端里的。只有在被需要的时候才会被登记的区块链里面,去进行哈希的比对。通过这样的方式,用户把数据放在本地,并且在需要验证和比对时也可以通过区块链控制数据的隐私性和权限。
这种方式可以带来非常大的好处,当数据量达到一定规模而且非常充分的时候,可以减少很多重复的问题。比如,很多行业包括保险会做KYC的工作。但是他们为什么做不起来呢?一方面,没有一个统一的标准来对数据进行对接,也没有一个中央式中心化的数据库来承担这样的角色,因为谁都不会放心把数据交给这样一个中央化的隐私数据库。那么根据区块链的加密共享账本的特性,我们可以快速完成KYC,因为用户在不同保险公司或者同一保险公司购买不同产品的时候可以减去大量的重复数据提交的工作。
区块链另一个提升用户参与度和体验的手段是——提供较高的透明度以及理赔处理的公平性。这里我们用航意险来举个例子。当用户购买了航意险,其指定的航班取消或者发生延误时,可以由航空公司触发一个事件来通知区块链上的智能合约,而当智能合约获取到这些外部数据以后,就可以为购买了这款产品的消费者直接完成理赔支付。这个过程是全自动执行的过程,其主要流程也都在智能合约里面。这样的流程虽然说没有区块链也可以实现,但基于智能区块链的智能合约能够提供一个独特的公正机制,这种机制不但能为客户提供较高的透明度和可信性,它还能带来广泛的网络效应。
区块链在保险应用的第二个大方面,就是提高反欺诈的能力和定价的灵活性。
之前有过统计,保险的索赔事件中,有5%到10%是欺诈骗保的行为。通过区块链,我们就可以构造一个跨行业的分布式的客户数据登记平台,其可以帮助我们更有效地识别客户的身份和虚假的人身伤害以及损失报告。比如说,当医院和保险公司在同一个区块链网络中,客户就不再需要将一些理赔凭证通过线下的方式提交给保险公司,再由保险公司花费大量的人力财力支出去医院完成报告的真伪鉴别,而是医院可以直接在区块链上向保险公司出具他们的医疗报告,那么当保险公司拿到医院提供的报告时可以直接判断这些报告的所属权,和其文档的真实性。那么这种情况伤保的直接支付就变成可能,而不是像现在这样由用户先垫付再理赔,而且在理赔之前还要提交很多不必要的材料。
此外,如果能完整地在区块链中记录产品或资产的购买时间,所有权和区域的历史变更,对于财产证明和财产盗窃的公证中也有很大帮助。如果我们能拿到这些完善的材料,就可以帮助保险行业大大提升其自身的风控和反欺诈能力。
至于灵活定价的特点,我们拿车险来举例。今年车险进行费改,对于续保的车子如果在之前没有出现过事故的,其优惠的费用还是很大的,但是其实他的步子还可以迈得更大一点。比如说,如果可以实时地获取驾驶行为、车辆、道路等数据,并通过智能合约制定一些规则,实时地计算相关费率,我们就可以对一些驾驶行为良好的司机的保费做出更大让利,让他们以更便宜的价格拿到车险。
但是这个过程需要强调的是,敏感数据的控制权还是应该在用户自身。把数据放在区块链中,但是区块链需要通过提供隐私授权这样的机制,让用户自己来操控自己数据的使用权。
区块链在保险行业最后一个大的作用方面是降低保险公司的运营成本。通过智能合约来运作保单的身份、合约的有效性审查,索赔登记核对保方数据,以及通过区块链技术进行赔付支付的功能,可以帮助我们大大降低运营成本,并且帮我们做到真正的无纸化。
另外一个比较典型的例子是再保险。当原保险公司发生某一块产品风险程度非常大的时候,其可以选择将一部分保单转移给一部分再保险公司来进行风险的分摊。在这个过程中,原保险公司和再保险公司会有相当多交互,包括保单和理赔数据共享和索赔之后的对账。如果可以通过区块链将这些数据共享在区块链上,就可以提升保险公司自动化执行的能力。此外,它还提供了一种可审查的方式,来提高再保险公司的透明度。
李雪峰:区块链技术在近年的发展还是蛮快的,像众所周知的R3联盟上周就开源了自己的区块链实现平台Corda。但其实际上并不是一个真正意义的区块链,它只是一个——按他们的说法,是一个去中心化账本。那么摩根大通的也开源了自己在以太坊上的实现。现在无论是国内还是国外,都有非常多的区块链创业公司。
那么 主要的差别在于,国内的更偏重“链”这一层,而国外的企业更偏重于垂直应用的方向,做一些业务的创新或者创业。同时,今年也出现了很多研究联盟和产业联盟,这其实对于普及和推动区块链的落地是有很大帮助的。众安也有自己的产业促进联盟,同样是围绕着生态去打造的。
大概来说,已实现的特性和优势包括多中心化、不可篡改、数据的安全拷贝、透明审计和数据全局化追踪;暂时还没有实现的主要集中在——对技术要求更复杂的性能优化和隐私保护方面的特性。
在性能优化这方面,目前业界普遍的原则方向和做法有些是使用优化共识算法,将比特币或以太坊的POW算法改造成为股权证明POS或者PBFT。那么我认为这些都是短期内比较不错的解决方法,但中长期的研究方向主要还应该在sharding(分片)上。
我为什么认为应该是在sharding呢?这就好比,好久以前我们在去IOE的时候——在IOE去完之后,就是数据库的分库分表。趋势总是不可逆的,无论是状态通道,还是去优化公式算法,其对性能或者吞吐量的提升目前来说并不是一个很大量级的提升。要达到一个企业级的水平,上万的TPS或者10万级的TPS,没有sharding几乎是不可能的。使用sharding策略的特点主要是让节点去处理只和自己有关的部分交易,而不是把每个交易都放在所有的节点上去执行。
但是,未来sharding的方向肯定是横向的,刷得横向的刷点可以在吞吐量上带来,质的飞跃。一台区块链实际上是由很多自恋来组成的,这就使得区块链可以像分库分表的数据库一样,当性能和容量不够的时候,只需要不停地加建子链就可以把容量和性能进行无缝的横向扩展。现在目前不管是开源社区还是众安内部,大家都是在积极讨论进行尝试验证的过程。但是呢,我相信sharding不会让大家等待太长的时间。
另外一点,从目前阶段来讲,如果要对接高频的互联网交易是有办法实施的,但是如果要把交易数据直接存放到区块链中,这是目前做不到,而且是没必要做的。因为在区块链网络中,所有的交易都要进行全网的广播,如果这个我们区块链从性能、吞吐量上能够接受得了,带宽也接受不了;即使带宽能够受得了,技术、存储也受不了。整个实现来说,会在每一个环节都出现一些瓶颈。所以现在的高频处理方案都是花开两朵,各表一枝。
最后需要强调的是,区块链的优势不能只建立在功能方面。很多人认为用区块链练就天然具备了容灾、数据防篡改的特性。但其实不是的,这虽然是区块链天生带来的功能,但其还与网络的体量规模、生态、场景相关,只有把体量、规模、生态、场景结合在一起,它才能真正发挥重大的作用。设想一下,不管区块链能实现到什么样的程度,如果只有一台服务器去部署一个节点,那么功能再强大又怎么样呢?它照样什么都不是。
李雪峰:区块链本身是一个纯技术的东西实际上是一种技术标准,所以对大多数人或者企业来讲,去开发一个区块链的实现,这是一个不太现实的问题。因为它的难度确实非常大,区块链虽然并不是一个新的学科,但是它是对密码学、计算数学、数据结构,甚至包括社会学、金融学的柔和。那么大家最终都会选择一个实现了的区块链的产品,然后在这些产品上搭建自己的区块链应用。那么这些产品就像刚才提到过的,相对更成熟一点的是Hyperledger、以太坊和Corda。这个就好比互联网架构中大家都会遇到的——数据库存储我们应用的数据,但是没有几家公司会真正自己去做数据库,肯定会根据自己的特点选择一些合适的数据库。
所以我要讲的事实是,基于区块链产品来开发,我们的应用会有一个难度。对于大部分使用者来讲,可能永远都不需要区块链的技术原理是什么,但是这个并不妨碍大家去使用这个技术。按道理来说,使用产品化的东西是不应该有太大难度的。但因为现在区块链还比较新,市面上完善的产品相对比较少,然后是成熟完善的学习资料比较少,并且这些产品的发展方向还各不一样,比如说Hyperledger是奔着分布式账本去的,而以太坊是奔着应用中的智能合约中的执行去的。那么对于众人而言,如果应用到金融领域,无论是选用哪一个都需要较大的改造。比如众安在早期时对以太坊进行研究和落地的尝试验证,发现它的共识机制并不是非常适合金融领域,而且很多功能是没有实现的,比如说完备的隐私保护或者金融的监管特性,性能也是没法满足。
基于这样的现状,我个人认为开发难度主要体现在五点:
第一个是区块链的准入门槛比较高。如前面所说,区块链是要密码学、数学算法等基础,现有的产品又非常不成熟,又与传统的分布式应用有着较大的区别。因此开发人员要快速进入该领域之前,可能都会有一个不短的学习周期。
第二个点是吞吐量,也就是说性能差,容量差。因为目前无论是哪一种区块链的实现吞吐量都是影响业务落地的痛点之一。比较明显的场景是,比如移动支付或者保险理赔。这种金融场景其实对吞吐量和易性能要求是非常高的。可以想象一下,如果要通过手机到便利店进行一次支付,扫二维码的时候你要原地干等三十秒,那么体验是非常差的。
第三点是隐私与监管。区块链是一种共享的账本,对于隐私保护需要有更进一步的要求,因为数据在账本上共享,每个节点都可以拿到完整的数据,如果不能对隐私进行完整的保护,可能会出现非常大的问题。我们多次提到过,区块链的一个核心是去中心化,但是在实际应用业务落地的时候,特别是金融场景,监管又是一个必不可免的要求。我们必须要确保我们的行为是遵守法律的,必须要杜绝一些洗钱行为。监管和隐私其实是存在一定的冲突,这两个之间需要进行平衡,这也是非常难的一个地方。
第四个是智能合约。虽然智能合约在前面冠名了“智能”两个字,但事实上现在的智能合约是一点都不智能。目前在智能合约能实现的业务逻辑都是功能相对比较单一的。一些较为复杂的业务,比如保险领域的核赔或者银行中的信贷放贷,这些资质判定可能没法通过智能合约来进行一步到位的实现。那么对于这样的问题,我们需要通过链上加链下的方式来共同执行。
第五点不是一个技术问题,而在于其落地和推广成本太高。很多技术在结合了区块链之后,能产生的化学反应都是剧烈的,都是带有颠覆性的。这也就意味着,我们需要大量的人力和成本进行验证,并去推广落地这些应用。
讲完这五个点,对我个人来讲的话,我最为关心的还是隐私的监管问题。这是一个非常关键的问题,因为这个并非全是技术问题,还关系到线上线下的法律融合问题——个人数据的确权使用范围,法律监管办法,这里面也会有一定程度上的权利义务的冲突。这会是涉及到计算哲学的问题,应该说是一个系统解析的问题。
李雪峰: 对于这个问题,我们要从多方面考虑。其实众安也跟自己联盟成员火堆公益在做一个类似的事情。首先,如果我们通过区块链建立一个完整的用户体系,甚至是用户资产体系,那么可能“诈捐”的行为根本就没法发生。因为一个人一旦提出众筹或者募捐,监管单位就可以在区块链上对其资产进行验证,并且对其需要募捐的费用和其资产进行匹配,如果发现其是诈骗,这样的捐款本来就不应该发生。
那么第二个问题就是有了区块链之后更容易解决的问题。之前我们讲到过,区块链上的所有数据都是不可篡改,而且带上时间戳的,那么我们只要对这300万善款在区块链上进行追踪,追踪每一次转移每一次消耗,费用到底从谁的手里到谁的手里,最后发生在哪里,让这些信息对于所有捐款人来说都是一目了然的。
雷锋网:为什么以太坊这么容易被攻击呢?
李雪峰: 有名才会吸引人去攻击,站在巨人的肩膀上好成名。
对于攻击的内容,不是以太坊容易出事故,而是以太坊搭建的系统没有做好安全防护,容易被攻陷。你想啊,区块链首先是面对真正的大型互联网的,甚至是物联网的,但是如果不去掌握互联网架构的精髓去搭建区块链应用,肯定走不远的。高频交易,数据一致性,安全防护,监控体系,这些都是现在基于云计算的体系精华,少不了。
我是过来人,希望大家引起注意,别走弯路,好好研究互联网再去搞区块链。
李雪峰:前两天刚在一个区块链的技术交流群里面的看到一位同学说:“学了区块链一年已经学会了十八种不同的语言!”
目前比较主流的几种是Go语言、C++,包括部分会用Java、Python。以太坊会有多种不同语言的实现,最主流的还是Go语言进行编程;对于Hyperledger最多也是使用了Go语言;像比特币用的最多就是C++。
用什么语言取决于你要学习链的底层实现还是说在其上层去做一些应用。不管是哪个区块链实现,他们对外都是提供的RPC接口还是比较完备的,所以如果你只是要做上层的应用,其实哪种编程语言都没有关系。
雷锋网原创文章,未经授权禁止转载。详情见 转载须知 。