(转)上交所朱立:联盟区块链最大的技术挑战将是隐私保护

上交所朱立:联盟区块链最大的技术挑战将是隐私保护
https://mp.weixin.qq.com/s/i1ZWx4Vd1xCmS-zTanElYA

2017-11-20 朱立 金融科技研究
近日,由中国金融科技50人论坛(CFT50)与证券信息技术研究发展中心(上海)举办的“区块链里的密码学技术”闭门研讨会议,在上海证券大厦举行。上交所技术有限责任公司架构师朱立代表主办方致辞并进行了主题演讲,以下为发言实录(经本人审核修改)。

从《高性能联盟区块链技术研究》课题谈起

证券信息技术研究发展中心(上海)今年做了8个课题,其中《高性能联盟区块链技术研究》和区块链有关,这个课题以“去中心化的主板核心交易系统”作为业务场景,但并不是说上交所以后的交易就会用区块链。用这个做题目是因为它本身是一个很好的压力测试场景,能够真正的测试出联盟区块链的一些性能。
当下,区块链技术发展很快。去年年初的时候,大家主流的意见都说区块链的吞吐量很慢,比如一秒钟只能完成7笔交易。但是随着一年以来的技术发展,又开始有很多的报道宣称自己做到百万笔每秒,甚至还有见到说做到一亿次每秒的。对此,我们的观点是:离开业务背景和测试环境配置,单纯提一个TPS数字就是耍流氓。因此我们以集中交易的订单簿的撮合作为业务背景,然后通过控制各种软硬件配置,尽可能去探索联盟区块链的性能上限。

证券信息技术研究发展中心(上海)是什么?它是2011年挂牌成立的的行业技术交流研究平台,受证券期货业信息化工作领导小组及其办公室领导,由上海证券交易所负责运营。其定位一是引领上交所技术公司的技术研发和创新,二是要力求带动整个行业的技术发展,为此我们会组织各种各样的技术交流和互动,做一些技术研究的课题,培养各类新型研究人才,我们的季刊杂志——《交易技术前沿》在行业内有一定影响力,今天也借这个机会向各位嘉宾约稿。

对于联盟链而言,吞吐量已经没有太大挑战

我们用各种办法来提升联盟链的性能。一是Batching (打包),一种是大家很常见的流水线技术Pipelining。今天特别会讲一下Delegating,因为和密码学有关,它的意思是把一些复杂计算交给GPU等硬件来处理,比如对国密验签进行硬件加速。最底下的Separation,就是架构师常说的“分离关注点”,其实它和Pipelining有关系。因为当我们设计的时候如果把不同的事情交给不同的进程或者是服务去做,在这种情况下我们就可以找到新的并行点。

结合今天的主题,来分享一下我们目前在密码学测试下的一些心得。首先来看国密的效率,我们用单台主机的CPU来进行验签,如果用来处理国密的SM2、SM3算法,差不多可以做到1.3-1.4万次验签/秒的数量级;作为对比,如果基于以太坊所用的那种ecdsa+keccak256来做验签,它就可以做到2.3-2.4万次验签/秒,显然国密算法在效率上肯定是慢一些。但我国的金融企业未来要使用的话肯定是绕不开国密的,那么如何提升国密运算的性能,就成为提升联盟区块链性能的一个很重要的课题。

我们尝试使用GPU对国密进行加速,为什么用GPU而不是FPGA?因为项目课题的时间比较紧,而FPGA对于我们目前合作的趣链科技团队而言,时间上暂时会有一些挑战,而对GPU进行CUDA开发相对比较容易。

我们现在的结果在这个片子上展示:左边黄色的条子就是用CPU单独进行SM2验签的结果,也就是这时摘要已经另外算好,不计入产生SM3摘要的开销。现在看这里用GPU来做的结果,我们在SM2这块可以做到12.8万次验签/每秒,用CPU来做就只有16000次/每秒。可见用GPU来做SM2加速效果还是很明显。

简单汇报一下我们的测试环境,因为经费有限,所以我们不可能在全国布很多的点,目前使用的是部署在同一个数据中心的腾讯云服务器,左边(如图)这些部署了趣链科技Hyperchain的节点,但并不是Hyperchain生产用的版本,而是一个分支版本,里面做了很多的性能优化。另一些机器是用来做性能测试的客户机,这里是一个控制台。为了防止有人说我们这个配置只是在一个数据中心,物理距离太近使得吞吐量会变得很高,所以我们在某些测试场景中,我们人为地用LINUX的工具软件增加了网卡延迟。道理上说,如果系统架构设计合理的话,实际上时延应该不影响吞吐量。这里的网络带宽就是同一个数据中心的内部网络。因为有些配置的云主机比较贵,所以我们针对不同的场景用了不同的节点数量,带GPU的那种我们只有4个节点,但是测其他非国密场景时(这时可以不用带GPU)的那种节点我们最高使用到10个。我们也想有更多的节点,但是因为课题经费有限,做更多节点的话我们可能就会超支。但可以肯定的是,从4个节点到10个节点,吞吐量变化不大,当然带宽这时还没碰到瓶颈。

我们基于国密进行测试的场景都用GPU。用国密加上GPU来进行压力测试,目前看到的TPS将近3万次/秒。初看上去这个吞吐量好像还是不能满足主板证券交易的需求,因为主板证券交易系统动辄10万-30万笔/秒这样的数量。但是要提醒大家注意到一点,直接和主板证券交易系统去这样比较有一些不合理,一是因为主板证券交易系统里面目前的报单是不带有非对称加解密的,如果把这个加上去那很明显瓶颈也就会出现在加解密上面。另外现在的主板交易系统里面都做了分区,10万笔/秒、30万笔/秒这些数据都是多个分区并行撮合后累加的结果,而我们测试的只是单个区块链或者称为单个分区,没有用多个分区来累加。如果同样去累加,其实在吞吐量上差不太多。顺带说一句,3万TPS这个数字后续还有优化余地,因为我们已经定位到几处妨害TPS提升的不良设计,初步估算经过优化有希望在国密下做到5万TPS单个分区的吞吐量,而每个节点只是单台主机。
另外一点,结合行业的业务特性可以进行另一层面的打包。证券交易是一个B2B的市场,我们引入一个OPS的概念,什么叫OPS?就是orders per second,真正有意义的订单数,其实是跟transaction并不是一一对应的,在一个transaction里面我可以打包10笔、20笔订单,对这些订单只需要在一次签名后打包到单个交易中一起发送。现实生活中,我们平时券商报单就是十几笔、二十几笔订单一起打包送上来的,所以这种手法对我们这个场景是适用的。用这个办法我们测试了一下,把TPS换成OPS的话,可以看到,在以二十笔做一个单位进行打包的时候,吞吐量可以做到44万笔/每秒,这个数字已经相当于甚至超过了某主板交易所新一代交易系统的吞吐量。而且要注意一点,我们用的算法是PBFT算法,而目前主板证券交易所用的共识算法在某种程度上可以说是PAXOS算法、RAFT算法的一些变种,而且它的吞吐量是基于多个不同的分区加总达到的,而我这里给出的是一个区块链,一个没有经过SHARDING的区块链。当然主板交易系统为了降低时延不得不放弃一些吞吐量,而基于区块链交易系统是不会用低时延作为主要诉求的,所以可能由此在吞吐量上出现一定差别。但主板交易系统的时延是不是越低越好在国际上也有不同的声音,所以基于区块链的交易系统仍然可以有一席之地。
总的来说,个人看法是:结合业务场景,且系统设计合理的话,哪怕是用PBFT实现的系统其吞吐量也可以只受限于网络带宽。刚才提过在这方面我们也做了测试,证实了这一点,确实设计合理的系统吞吐量可以只受限于网络带宽。

接下来的一个问题是,如何突破目前GPU验签的性能限制?如果我们只是受限于单个节点只有单台机器,哪怕是给这个机器加上GPU,经过刚才的测试我们也看出来,单个的区块链,单个分区构成区块链,它的吞吐量上限再怎么优化可能也就止步于5万个TPS。而且这个TPS是对我们证券交易的撮合业务而言,如果是和阿里、淘宝等等那种比较复杂的业务,可能还会进一步受限于实际业务的执行效率。
这里只需要指出一点,验证签名是一个真正构成吞吐量上升的瓶颈,顺着这个思路,借鉴秘猿科技的CITA的设计思想引入某种微服务架构,令一个节点实际由有很多台机器构成的话,其实验证签名的工作是完全可以由前置的其他机器去完成的,就是说每一个节点可能有一堆专门用来签名的前置机,哪怕一台机器只能做4万笔每秒的签名验证,如果有10台这样的机器,就可以做到40万笔每秒的签名验证,那么验签瓶颈就打破了,而后面环节的共识不是瓶颈,可以做得很快。当然,这时候在披露TPS的时候就需要说明使用的机器数量和配置,否则和单主机节点构成的系统去比就又胜之不武了。除了刚才说过的 internal sharding 方法之外,还可以如 polkadot、cosmos等项目一样引入多个相互协作的区块链分区来增加总体处理能力。
联盟区块链最大的技术挑战将是隐私保护

今天的话题还是要回到密码学,回到密码学里的隐私保护。我个人的判断是:单纯就吞吐量而言,对于联盟链而言已经差不多解决了,或者说再没有更多的挑战性了。当然区块链也面临其他挑战,包括区块链的治理,比如最近著名的PARITY钱包合约被删除的事件后续应该如何处理等等。这些在很多社区里面也提出一些比较好的、属于社区自己的思路和方案,因此这些在原则上来讲是可以解决的。剩下最大的技术挑战,还是要回到今天的主题,就是密码学的隐私保护。
简单来回顾一下。保护隐私的方法有五大类:第一类是链外存储,只要我这个信息不放在区块链上给大家看到,那它自然就是最强的隐私保护方法。状态通道就是很典型的技术。执行验证,是在Plasma白皮书里面间接提到的技术,得到那里去看这个思路,就会知道它是怎么做的。还有一个最常见的数据存证,也就是在区块链上保存一个摘要,明文不在链上,这样泄露的信息量就很少,因此从信息学的角度来说可能会安全一些。当然大家会记得,有一些数据其取值是有限的,比如男、女什么的,那些还是要加上SALT后再进行哈希,否则一样很容易被破解。第二类是部分明文,比较典型的是在CORDA里面的TEAR-OFF技术。第三类是身份混淆,就是比特币那种全明文的交易,通过伪匿名地址把用户的身份隐匿起来。第四类是加密传递,这种方法现在用得也比较多,上次跟燕总(燕宝)交流的时候也提到过这种方法。但虽然我们目前很多的场合下不得不用这种方法,但是用户也会产生很多的质疑,比如会担心量子计算机出来之后过去给大家看到的密文数据会被量子计算机破解,燕总的讲演可能会对此问题进行回应,我在这里也是借此开个头。最后一类就是比较高阶的黑科技的算法,比如说zkSNARK/zkSTARK,MPC等等,这块应该是王老师(王励成)的强项。

今天我这边的开场白就到此为止,希望接下来的各位老师来给我们呈上精彩的演讲。谢谢!

你可能感兴趣的:(区块链)