• app_navCreated with Sketch.app_navCreated with Sketch.

    App

    扫码下载APP

  • tougao_navCreated with Sketch.tougao_navCreated with Sketch.

    投稿

  • Sign in_navCreated with Sketch.Sign in_navCreated with Sketch.

    登录

  • register_navCreated with Sketch.register_navCreated with Sketch.

    注册

腾讯云区块链首席架构师敖萌:腾讯云区块链实践的思考
赫伯 10-11 19:244641
10月9-10日,为期两天的“2018可信区块链峰会”在北京隆重召开,本次会议由中国信息通信研究院、中国通信标准化协会主办。

腾讯云区块链首席架构师敖萌在10日下午举行的“区块链服务(BaaS)论坛”上发表《腾讯云区块链实践中的思考》的主题演讲。

腾讯云区块链首席架构师 敖萌

以下是演讲全文:

大家下午好,非常感谢能有这样一个机会来跟大家分享一下我们在区块链上的工作,我今天想分享一下我们在实际工作中遇到的问题以及在这些问题中的思考。

腾讯云是给企业提供了一个我们叫做TBaaS的云服务,当然BaaS不仅仅是一种云服务,它也是让用户非常方便开启用户区块链服务。我们在实际工作中碰到了很多类似的问题,第一个问题企业往往会问我们为什么用区块链,其实这个问题是比较好回答的,因为很多时候企业界要进行一些业务,可能大家要找一个公共的空间来做一项事。举一个简单的例子,看特朗普和金正恩他俩要见面,就没有选择美国,又没有选择朝鲜,是选择了第三方新加坡,为什么?其实企业中间有一样的问题,当你两个企业要进行一些业务合作的时候,你会发现不管是服务或者是一些空间,放在第一家企业放在第二家企业都不是特别合适,于是我们传统办法是找了第三方的地方。我们做这件事,于是你看到了金正恩和特朗普会面在新加坡花了那么多的钱。传统企业碰到这样的问题,找第三方其实以第三方做了一个中介,或者第三方的信用中心这样的概念,这样以后成本会增加,更加简单的办法,是各自在自己的地方做自己的事情,于是我们能够建立起一个公共的虚拟空间,在这个空间里大家共同运行一些程序,共同做一些事情,共同保存一些数据,这个将大大有利于我们企业进行企业间业务,这就是我们企业常问我的第一个问题。

第二个问题就是说区块链这么复杂的概念,你让我们一些不是从事区块链行业的企业怎么用呢?其实这个问题就更简单了,用我们的BaaS服务,BaaS服务最最核心的东西就是简单,它能够让企业在非常简单的情况下对原有的系统进行一些少许的增加,或者少许的改造,就可以接入到BaaS,接入到区块链中。有些企业技术人员,他们听到了很多关于区块链技术方面的报告,或者这些演讲,看到这些文章,这些文章有的时候可能会给大家带来误区,说区块链好像什么都能解决,实际我们系统中在实际的运行中,实际部署中,实际给企业做业务推广的时候遇到很多问题,这些问题都是常常由于大家传统思维带来的问题,我今天就想就这些问题给大家做一个分享。

首先看一下这是区块链系统和传统信息系统的区别,传统信息系统每个企业有各自的地盘,这个地盘你需要访问我的数据的时候我就需要调你的接口,这样是他们的工作方式,这样的工作方式大家天然的就会有一个很明显的概念,我想让你访问哪些数据你就可以访问到,当我不想让你访问数据的时候你就访问不了,当你在多家企业合作共赢做一些业务的时候,我可以把这个接口做一个权限的分配,于是我这个数据想让第一家企业看到,他们之间可以做出隔离,但是在区块链的时候你会发现整个系统变成这样的架构,大家一起接入公共的数据空间,这是区块链,我们只是写入的时候大家通过共识写入的方式,这个有可能在做共识的时候是给所有人看的,更重要的是这个公共空间每个节点都可以存储下来,因此在这个里面,怎么在这种缓冲下去进行一些信息的隐私保护,或者信息权限,这是一些需要注意的问题。其次在这样一种环境中,我们还会面临这样一个设计,就是说当你过去这种方式的时候,我这个企业访问企业的数据,可能过几天再访问的时候这个数据会发生变化,在这种情况下,当你把所有数据写在公共空间的时候,你所有变化都会在公共空间中留下痕迹,这是区块链的好处也是区块链的坏处,有的时候你的企业举个例子,比如说企业向金融机构分享一些信用数据,获得更高的信用,但是前一段时间生意不是特别高,产生了一些坏账,后来帐目逐渐变化,在公共空间里会留下去,这里有没有什么办法,我在不影响企业正常业务的情况下,可以把这些数据让大家都能够访问,这些数据需要在区块链做访问。这个是企业公共的数据模型,这个比较多见。比如说大家很多企业合起来做一个事情,然后传统的方式大家做一个公共数据库,这个数据库会指定联盟企业运营,读的时候大家有各自的权限,这个情况下,你往里写的数据,你的控制权限一旦放了你就交给核心的人员,可能是第三方,也可能是联盟中的某一个,在这种情况下你的信息直接交出去了,当然这个时候我们也可以用一些密码学办法来做,但是在区块链你就发现我们缺少了这样一层,在最终部署来说也有这样的情况,在这两种部署下,我们做交付数据互访的时候同样有这个问题,就是权限的问题。

我们现在看一下这是第三种情况,这种情况是最多见的一种情况,现在各个企业都在上云,因此我们有了公有云,如果几家企业共同在这个公有云里,我们实际可以把这个数据流同样在云外,在云外做一个权限授权我们在云内就可以流通。这样的好处是什么?举个例子,比如说如果一个企业他的ERP系统全都放在了云上,而这个ERP系统上,同时这个云上也有银行的系统,银行的系统达到最真实的企业数据,传统情况下,如果不是在云上会发生这样的问题,你银行想要企业数据的时候,你需要通过个人的中转,也就是说企业对企业之间,官方之间是没有数据通道的,只有通过个人,也就是说我们企业把需要的文件,比如说打印好盖上公章,或者电子化的做上数字签名,总而言之这个传输通道运营在官方外,这时候有一个数据流,这些数据全部是官方的数据,中间没有个人的篡改或者经过个人接触的情况下做的数据,这时候我们会发现现在很多金融企业其实已经在使用这种方式了,他当时要求你企业供应链接入同一个企业云的时候,你就可以作为我金融企业的一个服务对象,我可以很容易的给你授权等等,但是当你不在同一个云的时候这个做不下去了,不在区块链的时候你会发现我们不需要这样的共同空间,这个情况就和这个情况变得非常类似,但是区别是,其实我们可以跨企业之间各种各样的数据空间,跨企业的IDC。这里面刚才讲的三种模型,这里所有的核心问题都是一个,我怎样去控制在这个数据空间中怎样去做一些权限,我们有一个最基本的认知,就是说数据是不等于信息的,因为数据可能是加密的,而信息需要数据解秘之后才能成为信息,因此我们有这样的认知之后,我们就可以通过数据的方式,把所有数据放在公共空间,于是我们在这个过程中加入一个信息解密层其实能够解决这个问题。最简单的想法,比如说企业产生一条信息,我就用一把密钥加密传到空间里,第二个信息换一个密钥再传到信息里去,这样我企业所有的信息,比如说产生了10万个信息我就对应十万个密钥,这样把不同的信息交给不同企业的时候,我只需要把密钥交给他就可以,其他企业在公共空间中拿到原始的数据发现出信息来。这个时候对一般的企业来说,这样大的密钥管理工作是非常复杂的。我们传统还有一些加密机也是公用的,现在也有一些软的加密服务,比如密钥管理服务。单独把这些服务和区块链进行结合的时候,把他打包成通用服务,其实这就能够为企业提供看上去是通用性的数据管理机制。

这里面还有另外一个问题,大家看到上张图,这个时候企业之间是没有信息交互额外通道的,但是我们想让密钥进行交换的时候,必然要建一个新的通道,只有这样一种方案吗?其实也不是,我们完全可以利用它来进行数据密钥的交换,也就是说我不用额外的在私下里交换这些信息,我把所有的信息就像把密钥放到信封里去,然后当我想给其他企业的时候,每个企业都放他自己加密的密钥里头,一个企业要把自己的信息传递给另一家企业的时候,你只要找到对方的公钥加密放上去就可以了,对方就会收到有这样一个信息,只有他的私钥才能解出来,恢复他最终需要的信息,这是我们看到在这种情况下,区块链其实就变成企业间的信息。这个我们常常说区块链是一种分布式总帐技术,我们在公用链中会提到这样的概念,但是在我们企业联盟链的时候,尤其是现在这个阶段的时候我们还不能拿来记帐,不能拿来记钱相关的东西,这种情况下企业用它往往做的是信息的传递,这个时候我们换成信息总线会有助于大家更好的理解,这种情况下我们所做的区块链的架构其实围绕整个信息总线来进行的,除了信息总线以外,我们现在换一个角度来看这样的系统,当你把这部分全部放在一起以后,他有了一定的信息处理,同时有了数据存储,这就变成了相当于数据流通的服务器,也就是刚才我说的当我们两家企业或者多家企业想进行一些业务合作的时候我们需要找第三方的服务器,其实这就是我们常说的带有智能合约的区块链在企业间相互作用,利用这台服务器我们做了很多企业间的事情,这个公共服务器和传统服务器的概念,正如我刚才讲的,他们可以分别利用加密算法来进行访问权限控制的问题,每个人在这里所有的帐户都是平等的。当提供这样一个有帐户体系,但是没有超级管理员服务器的时候,怎么去设计怎么去开发一项服务来帮助企业,其实这个就是企业间现在使用区块链的难题,我们往往传统的企业,不管是IT企业来说还是传统企业来说,大家更多的都是停留在传统的思维里,电脑操作首先要有入口,恰恰区块链提供的没有这样管理的服务器,在这种情况下我们怎么样做企业业务,这是带给我们非常困难的问题。

我们拿到企业间的服务器一定是在服务器上部署了,对于区块链来讲,他是在企业间部署了公共服务,或者很多人说分布式的应用,这种情况下我们怎么去设计这种程序呢?我觉得这里给我们说了几个重要的问题,首先区块链是一个计算资源比较有限的一个东西,他是用了大量冗余的存储冗余的计算,来换取相互之间的信任,因此我们尽可能的要把消耗资源的部分放在链下或者放在链上,这个感觉像什么呢?传统的可能早十年的程序员记得我们写程序有CS模型和BS模型,CS模型就是什么呢?就是客户端有计算能力处理能力,后来逐渐过度到BS能力,客户端仅是浏览器的概念,回到区块链以后会发现这个类似于CS架构的程序,我们会发现在过去网络带宽不宽,能力不强的时代,要尽可能把计算能力压在客户端,自己能够控制的这端去,这点计算资源是便宜的,如果能尽可能的把资源压在链上的时候,这个链上的程度就非常高。

像今天核心区块链测试的时候,也讲到这个问题了,说看到很多区块链和智能合约的大小是没有限制的,有些时候有的智能合约到了上千行,当智能合约非常大的时候,这个合约的效率变得非常小。区块链为什么测试过程中会出现很大的性能差异,其实很多情况下是,如果你的区块链底层天生是帐户转帐交易,你想在底层支持的能力他肯定性能会非常高的,但如果你底层不支持的情况下,你就需要给智能合约层实现满足交易的智能合约然后用来通过这个测试,这时候我们发现你全部拉到智能合约层,这时候你的测试水平降低了,整个系统基本都在一千到三千,这就因为他把很多工作任务压给了智能合约,所以当你想象一下如果把更多企业间的计算任务往链上压的话,你的信用降到什么程度,所以说第一个原则就是尽可能的要把很多计算部分放到C端。

然后要注意的一件事,就是说他在链上交互的时候要注意数据异步确认,我们在比特币的时候就是六个区块之后可以确认,在联盟链上好很多,我们发现现在很多使用PCP的算法,很多人讲说当我们有了联盟链的时候,区块链变成不是大概率的确认,但是很遗憾的是,为进一步提升速度,我们又发现了这个算法又在逐渐的往完全可信下的分布式信任算法这样一种妥协,出现了一种混合层的共识,只有混合层的共识他的特点是说,我在完全认为你没有节点过的时候,我完全用高效率的纯中心化的共识,然后当一旦发现有了问题以后可以回馈。但是大家要注意一个问题,这里有一句话,什么时候触发,这种混合共识的时候什么时候会触发的,中间是有校验的,混合型你必须隔一段时间去做一次校验,最简单的办法如果隔十个区块和隔一百个区块,拿250个字节大家做一次,如果在这次被触发了,我当前打包的比如说用一百个区块做共识的时候,这一百个区块是要被废掉的,因此这里面在链上做交互的时候,需要数据做确认的时候,这个概念大家必须要明确清晰,一种是说我已经区块打包成功了,还有一个是说我这个区块被校验成功了,在混合型共识的时候这种权限有两次,这是链下的。链上应该放点什么呢?他可能会产生争议的部分放在链上,就是关键的数据。这些比较关键的数据可能产生出的数据,我们看看大概有哪些?首先是说单方产生的数据,比如说一家产生的数据,比如说企业产生的经营数据去给他们用,他现在企业经营状况不好数据是这样的,过几天经营状况好了他把数据改了,这时候银行是不一致的,如果要把这种数据放在链上,就不容易产生异步,这是一种情况。

还有一种情况是多方产生的数据,从原数据,包括新产生的数据,以及产生数据的方法,我们都建议通过智能合约完全放在链上,这部分已经确保不会在业务上产生争议。

还有最重要的数据,数据整个周期,有些关键性的数据,刚一开始的时候是跟企业自己有关,后来逐渐过度到一定阶段的时候,这种情况数据在一开始产生的时候就应该放到链上去,这是比较重要的。

最后还有重要的数据确认方式,这个诊断,我可以举个例子,比如说一种质押性的应用,有一种比如说是质押的含义,当企业的仓储单据质押给另一家,比如说保险公司或者什么样的经营企业,这个经营企业确保他收到了质押单然后进行了共识,确保他收到了,这个时候确认方式必须由链上的合约来规范,有可能比如说我把这个发出去之后,这家经营企业并没有这家签名,但是其他企业有签名,假设有这样的情况,当前这家企业正好掉线了他没有签名,其他企业都签名了,原则上我们认为它是没有被确认的,类似这种情况,如何确认这个数据,虽然数据写在链上,我们必须符合链上的合约,通过合约的预算返回来的结果,这个数据被确认的。这样一些原则我们作为S端的区分。

最后,还有双方需要多方共同操作的不可拆分的部分放在链上,这就是完整的,上面都是针对单部分数据,这是要把一整块数据放在链上,比如说类似于投票,有这样的原则以后,我们区块链可以满足什么样的特性呢?大量的计算资源压在C端,就是企业端自主完成,容易产生争议的,就是其他的放在链上由链上进行,这样我们就可以发挥区块链最大的特性,发挥区块链的可信性,回避区块链的问题。

企业间的联盟链他也面临他的问题,这也是传统企业经常意识不当的问题。首先我们把整个区块链看做是大系统,其实他的警惕是要来自于内部的,我们传统的企业他们在做事情的时候往往想到,我把这个圈好了,这里的羊就安全了。但是在区块链恰恰出现的问题是羊圈里出现了一只狼,所以说我们传统企业在进行区块链业务的时候一定要注意这个问题,你怎样用一些算法来解决这个问题。回到刚才的问题上,比如说还是质押的这些,他这里有一个问题,比如说一个企业有一张仓单,一张仓单进行两次质押,他就可以获得两笔贷款,他是有利可图的,假设这个时候在链上进行了多个虚拟节点,将链分杈,不同的金融机构收到不同的质押结果,这种情况下其实我们用经济模型就可以解决了,就是说我们要求所有的质押,并不是多数签名就可以了,而是要求所有的接收单名签名才可以,如果把这样的规则写入到合约里,就可以有效的避免这样的问题发生,也就是说用好经济模型,当企业他发现他在内部发行攻击的时候他不会获利,这个和比特币是一样的,区块链在设计的时候他天生就是和安全性挂在一起的。基于联盟链我们有同样的思想,当把本业务设计到足够好,把经济模型用好,然后我们就可以避免潜在的问题,就是说即便这个羊圈里可能有狼,但是那些羊都是钢铁羊,狼不会露出自己的狼性。

再讲一个区块链用户混淆的概念,区块链产生的节点,节点是参与区块链共识的运维的这样一些企业,然后从应用来讲,我们现在是用户,从两个不同的角度来看,这个用户有可能是区块链参与节点的企业,也有可能是这个企业把自己区块链上的一些功能开放出给外面的人使用,这个用户的范围大一点,这个往往局限于区块链运维角度来看,这时候带来一个问题,就是说给出这个概念用户如何访问,当你把自己写的数据开放给用户的时候,用户怎么知道你的数据是真的呢,其实是一种,一种是企业通过外部浏览器,还有一种是说我有第三方的外部浏览器,直接能够看到,或者是区块链,并不是借助于第三方外部,而是和自己的客户端,他直接去连接然后去读取这个数据,这种稍微好一点,这个非常高,用户如果写了数据,那也没有办法,但是写完之后可以通过这个查看数据,看看这个数据是否真的被写进去。这就带来一个问题,当你提供这两个通道的时候,你也带来潜在的安全隐患,因此我们说安全与可信其实是一个平衡,包括了什么?有些数据不是链上直接保存的,是通过合约计算出来的,哪些合约怎么允许外部区块链球浏览器调用,这是一些问题,可以访问了,这种情况下怎么配置共识。区块链内部互反应性,如果开放了他就可能会成为跳板,怎么解决这些问题,这需要一些专业性的问题。当企业想要使用区块链的时候我们会给企业提供一些业务架构、系统架构的咨询服务,同时会帮助用户会分析整个业务流程,然后针对这些业务的特点提供解决方案,并且完整提供了链上的联盟服务。

我们TBaaS的核心是连接、中立、可信、高效。中立是我们作为第三方的运营平台是中立的,这个就是不管企业大还是小,不管谁在为第三方TBaaS平台付费,我们不会对大家有所不同的对待。另外我们区块链的一些底层技术的开发,我们区块链效率也是很高的,这个从测试结果也可以看出来,腾讯云TBaaS是唯一一家通过性能云测试的BaaS平台。这个相当于在我们机房里对应的物理机,部署给用户的私有云或者混合云,腾讯云也能够提供全方位的安全服务。

相关推荐
“翻脸恒大”贾跃亭、“业余选手”张小龙
互联网企业不要争当“首富” ,而是要争当“首负”,积极纳税和创造就业,为社会谋福利。企业家要对得起社会责任和信任。
拍卖行佳士得将通过区块链记录艺术品销售
据Coindesk 10月12日报道,总部位于伦敦的佳士得正求助于区块链技术,以确保其艺术品销售和相关来源的数据安全。
8年损失12亿美元 对于智能合约漏洞 你了解多少?
10月13-14日,由DoraHacks主办的区块链安全Hackathon在北京举办,赛前,来自长亭科技、猎豹科技、链安科技等多个区块链安全公司的嘉宾围绕智能合约的安全问题带来了主题分享。