区块链技术是可以降低社会系统运作的信任成本。它用软件的方式解决了信任问题,前提是要保证软件的可信度。
同时软件运行也需要高的性能,尽管目前的区块链性能已经足够支撑我们去做一些应用和探索,但还不能替代中心化系统。
如果要将区块链运用到社会的方方面面,还需要去打破目前区块链性能、安全的瓶颈。
12 月 6 日,《麻省理工科技评论》与蚂蚁集团共同举办了“区块链与数字经济发展论坛”,会议邀请到了美国西密西根大学计算机科学系正教授杨子江,中科院计算所研究员、博导孙毅,南开大学教授、博导、天津网络与数据安全技术重点实验室副主任汪定,他们分别从代码、性能、口令等领域,分享了区块链技术最前沿现状。
“90% 项目代码高度相似度,市值半年后跌至 10%” 杨子江 (美国西密西根大学计算机科学系正教授、深信科创创始人兼 CEO)
人类的信息发展非常快,从远古打绳结来记录,到现代信息时代的电邮、手机,信息流转的非常通顺,信息量非常大。但是有一个问题始终没有解决,就是信任问题。
为什么我们要在火车站排长队?因为它不信任你有票可以上火车。相比之下,欧洲的火车站、地铁站,是随机抽查的机制,因为它假设你有票,它信任你已经买了票。它不检票,因此没有时间成本。
可以看出,信任其实是有代价和成本的。我们每一天都在为信任付出高昂成本,不管是时间成本还是金钱成本。
区块链解决了人类历史上 2000 年来没有解决的信任问题,至少从理论上解决了。
人类历史依赖三个技术的进步,计算技术,从算盘到计算机,计算速度增加了很多;通信技术,从信鸽到互联网,信息在传储过程中的信息量以及信息的考核性都有很大的提升;但有一个技术始终没有太多的进展,就是存储技术,以前是用书,现在记载到一个光盘、硬盘或者一个外置的云存储项,但是它的信任问题没有很好的解决。
区块链技术是由多方共同记录和维护的分布式数据库,该数据库通过哈希形成一种链状结构,其中数据的记录和维护通过密码学技术来保证其完整性,使得任何一方难以篡改、抵赖、造假。
所以归根到底这是一个数据库技术,是存储技术。但区块链是用软件写的,这里有一个问题。
比尔盖茨曾说,人类历史上所创造的最复杂的人造物是软件,它复杂到没有人能保证它的正确性。写软件与盖摩天大楼不同,帝国大厦盖起来时很复杂,因为它是第一个超过一百米的高楼,但是你盖第二座时,有第一座的蓝本,就会简单很多。
但是软件不一样,每一次写软件都是第一次在写,所以它里有很多很多的错误。工业级的软件每千行有七个错误。
区块链解决了信任问题,但是如果写区块链的软件不安全,存在大量的漏洞,信任从何谈起?
这里的安全风险是很多的,比如说基础设施里的区块链时间,代码的安全、共识机制、加密机制的安全等,再比如智能合约的安全,有溢出漏洞、时间漏洞等,有些是通用软件的漏洞,有些是智能合约它独特的漏洞。
2019 年交易所的漏洞就占了黑客攻击的 61%。我们现在主要做的就是智能合约的漏洞检查,这个占了大概 12% 的损失,钱包流动 14%,供应链漏洞占了 8% 等。
我们是如何做区块链测试的呢?
目前我们采取一般性分析、静态分析、模糊测试、并发安全等各种各样的技术。因为每一种技术可能能发现错误,但不能发现所有的错误,要用不同的技术来尽量确保安全性。
一般性分析,比如说文档的规范、社区的治理、项目的概况分析等,然后再用计算分析来扫描代码,然后再加上模糊测试,模糊测试是一个动态技术,最后还专门做一个并发安全的测试。因为区块链里有大量并发的问题,并发导致软件写起来非常的复杂,并发软件有很多难以让人琢磨的漏洞,因为人的大脑不适合写并发程序。
首先,行之有效的是模糊测试,因为模糊测试它能真的在跑你的程序,不像静态分析有很多的错误它不是真的错误,并且静态分析它经过编译器的优化,可能和真实的错误不太一样。我们在做模糊测试时,是真的把区块链软件跑起来,跑的过程中能反复检测,并且试图产生一个输入,能让它更趋近可能会发生错误的点。当然这些都是概率问题,我们不能保证它一定能发生检测到错误。
然后模糊引擎的测试,就是我们要做一个全自动的测试工具,不能用手工,所以我们要自动的创建一个测试网络,自动的部署被测试的智能合约,自动的挑选 Papifashen,并且根据输入类型产生输入,然后它自动的进行执行。
它要反复的跑,看里面有什么错误。过程中还要做监控,比如说智能合约的哪一个部分被执行过,我们要避免再执行它。然后要记录智能合约哪个部分被错过了,需要什么样的条件才能被执行到的,错过的某个部分具体的变量是怎么复制的?是否有已经漏洞?所以观测过程中,检查有没有碰到漏洞是一部分,更重要的是记录我们哪些地方被执行了,哪些地方没有被执行了,怎么样改变输入才能让没有被执行的地方下次能被检测到。
为了能进一步的近乎证明一个错误不会产生,我们用了另外一种算法就是符号执行,符号执行它的计算量是比较大的,但是它有一个好处,就是能系统地测试软件中的每一条路径。
我们在代码分析时做了一些比较有意思的东西,对现有的开源项目代码相似度进行统计,我们拿了 2019 年 3 月份的 485 个发币项目,还有到了 2019 年的 9 月份又拿了 500 多个,66 个项目做他们的代码分析。平均每一个项目他们的代码量是 500、600 行左右。
最后的结论是,超过 90% 的项目代码相似度在 80% 以上,90% 的项目的代码和另外至少 1 个项目代码相似度 80%,自己写代码的项目非常少。
代码相似度在 80% 以上,市值在发布半年后降到了发布时的 10% 的以下。如果一个项目的原创能力强,你市值不会那么容易掉下去,说明投资人也会看技术,所以这其实还是技术实力的事情。
图 | 杨子江博士
“用协同思维搞区块链性能优化” 孙毅 (中科院计算所研究员、博导)
我们主要聚焦于区块链技术问题,底层技术尚未成熟,存在性能、安全性、互操作性、强化合约等一系列技术挑战。性能挑战是目前是非常受关注的议题。
为什么要用协同?因为区块链的性能受到多种因素的制约,而这些因素实际上是相互关联的,就像一个木桶里搁个板,当我们把这块短板弥补上以后,会发现另一块可能会成为新的短板,所以我们要真正搞优化时,是需要用协同的思想去考虑的。
怎么样去做协同优化?从三个层面分析:
第一,存储计算和传输,存算传的协同,这是在区块链软件的内部。第二,软硬件协同的思想,提升区块链的性能。蚂蚁其实也做了很多的软硬件一体化的设计,这是非常好的一些思路。第三,作为一个分布式系统来讲,区块链很难在性能方面跟某些中心化的系统去做这种竞争,所以它更多是一个互补合作的关系。
第一部分,我们在计算传输存储层面进行链内优化,在计算层上采用区块链并行化架构模型和算法,通过一条主链连接很多的分片、子链,然后让分片和子链做并行化,通过主链来进行交互,来提升我们的性能。之后与创新工场的联合实验室提出了一个异步共识的算法,为了防止它的安全性不降低,我们还提出了一个连母共识的机制。通过把同步通信变成异步通信。
在性能研究的过程中,我们又初步提出了一个叫并行多链的架构,它不需要中间的,它不是把传统的新型架构打散成一个纯网状的架构,可以更进一步提升我们整个的性能。
除了计算层,存储和传输同样需要进行改进。我们提出了一个双重的压缩方法,对于 K 域提出了一个数据压缩的方法,对于 Y 域我们也提出了一个两层哈希压缩的方法。这是基于数据压缩的存储方法 BZIP,有效的解决了验签吞吐量瓶颈。可以显著的降低我们对于磁盘 LO 的访问,然后使得我们的性能在存储这个方面得到一系列的这种提升。
在传输层上,我们提出了一个层次化的传输协议, 这是基于无连接数据传播的低延迟区块链的传输优化算法,这个协议我们在现网上做了一些实验,效果也很不错。
第二部分,我们研究了面向区块链的专用计算架构,提出了面向区块链的专用计算架构 (KPU,Kernel Processing Unit)。它是一个专用计算芯片的思想,把我们区块链上常用的操作,给它分装了独立的 IP 盒,然后我们再用软件定义的思想,它需要时我们按需去组合这些 IP 盒组成一些区块链需要的计算逻辑。
这一块我们分了功能区和非功能区,一部分实现计算的工作,一部分实现数据管理的这些工作。这一点上的话,软硬件一体化的这些工作都是未来我们可以去大胆尝试的。
第三部分,是区块链链上链下系统的协调,协同优化的工作。我们主要做二层通道、二层网络优化的工作。比如我们把链外的支付通道网络或者状态通道网络给它在路由上面去做了一些优化。但目前我们的支付通道网络里的路由算法跟互联网的路由算法比起来显得比较初步。所以我们借用了互联网上的分域、分层路由的思想,通过一个定制化的标签,然后来实现了一个层次化的路由,有点类似于我们互联网上的域间路由和域外路由,通过这种方法来去优化我们的路由通道算法,这是我们在链外通道里所做的一些工作。
区块链的性能优化到底重要还是不重要?
目前对于我们区块链正在探索的这些场景和应用上来说,区块链的性能已经足够支撑我们的区块链在各个行业里,去做有意的部署和应用探索。从这个层面上来讲,性能的优化可能没有那么重要,但为什么我们又要去做它呢?
如果我们能把区块链的性能做的更好的话,未来很多现在还很难在区块链上去做的场景,未来可能就可以迁移到区块链上。比如说每年双十一我们大家都非常盼望着去看阿里、蚂蚁发布的 TPS 能达到什么样的量级,现在这么高性能的系统确实还是通过我们中心化的一些系统来实现的,但是未来如果我们的区块链真的通过我们的努力也能打造每秒钟几十万的这种吞吐量的话,那未来我们也就有可能把这方面的一些应用,也尝试着在我们分布式的区块链系统上面做一些探索。所以,从这一点上来讲,区块链的性能优化其实很重要。
区块链的性能优化一定不能是单点突破,一些重大的性能突破,往往是伴随着底层技术的这种架构层面、新的框架层面来出现的一些工作,而如果我们单纯的就去做一个算法、做一个协议,我们能提升的空间不会很大。如果采用协同的方式,可以让我们在更多的不同的层面,不同的架构去做一些协同化优化的思想,未来可能会是我们取得性能优化突破的一个重要技术方向。
“诱饵口令技术是平衡安全性和效率的好办法” 汪定 (南开大学教授、博导 天津网络与数据安全技术重点实验室副主任)
口令自诞生以来,始终面临着可记忆和抗猜测的矛盾问题。
其中可记忆的口令要求口令有规律不复杂,但是抗猜测的口令刚好相反,口令尽量长,无规律,越复杂越好。并且现在这个形势越来越严峻,我们人类的记忆能力和认知能力非常有限,我们今天人类的记忆能力和 2000 年多年前的先辈比起来,并没有增长多少。
但是攻击者的能力现在是越来越强大,比如现在耳熟能详的云计算,大数据深度学习等,让攻击者能力越来越强大,口令安全这个问题越来越严峻,所以大家一直在寻找另一种身份认证的方法替代口令。
口令这一块实际上是老生常谈的东西,我们天天都在用,但是长期以来,我们一直低估了它的问题难度和研究难度。
最早是在 2004 年,微软那个时候还是比尔盖茨担任 CEO,他提出使口令替代计划,谷歌和其他很多大公司也跟进,但是后来这些计划都悄无声息的消失了。
从 2000 年开始,学术界也提出了大量的替代型的身份认证方案,但是没有一种身份认证方案能取代口令的地位,时至今日口令依然统治我们身份认证的世界。
这是有深层次原因的。身份认证方法主要可以分为三类。
第一类是基于用户所知,比如口令密码这些,比如我们输入的 6 位数字也是一种数字口令。
第二类是基于用户所有,比如我们之前用过的银行的 U 盾,USB Key,我们的智能卡片。
第三类是基于用户所是,主要生物特征。既包括我们的指纹,人脸这种传统的身份认证的方法。也包括、手势、敲击键盘的频率等,这种基于新型行为的身份认证的方法。
后面两种身份认证方法不论是基于硬件还是基于生物特征,它都存在严重的问题,其中硬件成本比较高,另外他最大的问题是不具有可用性,用户不可能随身携带几十个 U 盾。
而生物特征前几年特别火,这一两年大家慢慢的意识到它的问题,像很多城市前两天刚出来禁止使用刷脸,法律明确规定禁止刷脸,不仅是刷脸,包括我们的指纹,包括我们的步态等这些身份认证方法,都不适合用来做互联网认证,做网络认证。生物 特征有它的好处,有它适用的地方,在现场认证,比如做门禁是没有问题的。
如果不连网,比如解锁我们的手机是没有问题的,只要我们的生物特征不上传到服务器当中是没有问题的。
但是在现实使用时,我们上传自己的生物特征数据,这里就存在一个巨大的问题,不具有可再生性。口令和生物特征都在我们的计算机当中都是以 01 代码存储,口令会泄露,生物特征一样能泄露。我们的口令能分分钟改掉,但是我们的生物特征是改不掉的,我们人脸只有一张,我们的手指头只有 10 个,一旦泄露将终身泄露。
图|汪定博士
所以现在学术界逐渐形成了一个共识,在可预见的未来,口令仍将是最主要的身份认证方法。
而近年来出现了数以百计 “拖库” 事件,包括一些大型网站,Yahoo,Linkedin,Adobe,CSDN 等。泄露大量用户密码,一些密码货币交易所也遭遇此类危机,导致用户的严重经济损失。
比起被 “拖库”,更可怕的是网站都没发现自己被 “拖库”, 直到 N 年后数据才浮出水面。如果说口令文件泄露时,网站及时发现,并且通知用户更新口令,还能挽回一些损失。但是现实当中很多时候是网站不知道口令文件泄露了,包括数十家用户量庞大的网站,都是泄露 500 万以上的用户帐号,而且往往是泄露了 8 年、4 年等很长时间之后才知道文件被黑客窃走了。
如何降低用户口令泄露带来的危害?目前我们使用的主要有 3 种技术。
第一个,使用机器相关函数。比如口令猜测时一般涉及到哈希运算,可以使用一个只有特定服务器能计算的的哈希函数,黑客窃取口令文件之后没有这个服务器,无法计算机器相关哈希函数,这是一种和机器相关的函数。
第二个,使用门限密码学,这个是比较经典的,传统的想法,把口令分成多份,分别存储在不同的地方,不同的服务器。
第三个办法就是放置假口令,做到以假乱真,欺骗迷惑,及时的检测。
前面两种技术往往对客户端或者对服务器的影响比较大,需要对服务器端、客户端进行修改,而放置假口令这种技术它不改变用户,往往现在工业界有一句话:是什么样的代价最大,改变用户使用习惯的代价最大,所以尽量不去改变用户的习惯。
所以使用分布式密码学的这种技术往往现实当中使用的可能性不大,而机器相关函数存在可扩展性问题,所以综合来看放置假口令虽然不是最佳的方法,但是综合安全性和效率来看,它是可以被接受的。
-End-