万书网 > 文学作品 > 尖峰对话区块链 > 第六问 在去中心化的操作系统上,安全问题可以一劳永逸吗

第六问 在去中心化的操作系统上,安全问题可以一劳永逸吗




王峰:我在通用软件产业有10年的工作经历,知道操作系统不同于PC应用程序或者我们手机里的应用程序,在已有的生态上写应用就可以。从历史来看,做操作系统从来就离不开硬件的支持,比尔·盖茨(Bill  Gates)能做操作系统的根本原因,是他先搞定了与国际商业机器公司(IBM)的订单,并与英特尔创始人安迪·格鲁夫(Andy  Grove)建立文泰来(Wintel)联盟。苹果也是自己做硬件,谷歌有强大的搜索引擎和基于网络基础(Web  Base)的应用,还有生态化的安卓阵营。亦来云的操作系统在什么环境下运行?谁来做支持它的应用呢?另外,在中心化的互联网时代,安全是没有保证的,比如有分布式拒绝服务攻击(DDoS)、木马病毒、隐私泄露等。在去中心化的操作系统上,安全问题可以一劳永逸吗?新挑战是什么?

分布式拒绝服务攻击:一旦该攻击被实施,攻击网络包就会从很多DOS攻击源(俗称“肉鸡”)中犹如洪水般涌向受害主机,把合法用户的网络请求包淹没,从而导致合法用户无法正常访问服务器的网络资源。因此,分布式拒绝服务攻击又被称为“洪水式攻击”。

陈榕:这个问题很好,其实回国这些年,我最大的遗憾是没有做硬件的能力。我做过手机,也做过智能路由器,但是像供应链,包括开模,其实都是另一个领域的问题。人的精力有限,能力也有限,我做了几次硬件,都以失败告终。当时微软为了获得硬件的支持,能够与国际商业机器公司、英特尔结盟,真的是非常不容易。

我觉得今天的机会在于,下一代的操作系统应该是虚拟机操作系统,虚拟机其实是脱离硬件运行的。

我曾在美国展示了我们之前做的手机,大家以为我们要做区块链手机,估计是我们的做法误导了大家。我觉得根本就不应该做区块链手机,因为如果解决不了成本、供应链、品质等问题,而去挑战三星(SamSung)、华为、苹果,成功的希望其实是非常渺茫的。

也有做区块链手机的公司在市场上融到资金,我只能说恭喜它们,但我是不会去做手机的。如果做区块链手机,我们会是世界上最先起步的,毕竟我们2013年就开始做工业物联网手机了,但是我不认为这是一条活路,所以我不会去走。

关于虚拟机,原来的机器支持多进程处理,现在的机器支持多虚拟机运行,一个进程,就是一个地址空间的隔离。当年我们做DOS(磁盘操作系统),其实就是一个单进程、多任务并发的技术。只要给进程配上一个硬盘,它就是虚拟机,不要把虚拟机想成可以运行Linux、Windows这样的东西,其实Java  VM就是一个虚拟机。

但是Java  VM有两大问题。第一个是Java不能独立运行程序,因为需要高效利用中央处理器指令的程序,比如游戏引擎、编解码器、人工智能算法等程序,通过JNI(Java转原声指令集接口)走到底层的硬件操作系统。

这也是为什么我在1999年离开微软,微软当时采用公共语言运行时(Common  Language  Runtime,简称CLR)和Java竞争,摒弃了C++的路线。

说到这一点,Java程序绝对是图灵完备。但是图灵完备并不意味着能百分之百运行程序,因为大家要进行物理硬件的选择,而硬件都是有局限性的,存在速度、内存、电源管理等方面的限制。某一程度的图灵完备,运行一个程序要100年,这是人不可忍受的。

图灵完备:在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)按照一定的顺序,可以计算出结果,就被称为图灵完备。图灵完备这个词源于引入“图灵机”概念的数学家艾伦·图灵(Alan  Turing)。

很多区块链创业项目的负责人,会称他们的程序是图灵完备,我觉得这个说法除了误导,还是误导。以现在人们对计算机的理解,能编程不是什么大事。当然,如果中本聪选择不做图灵完备,是他有自己的想法。比如亦来云公链,就藏在亦来云的去中心化网络运营平台Elastos  Carrier之下,我们不会在亦来云公链上支持智能合约。

我们如果不支持智能合约,“写死”四五个功能,为什么要图灵完备呢?为什么要让人有可能攻击它呢?亦来云之所以这么选择,原因很简单,我们认为智能合约其实是一个用户态的事情,用户第三方程序员写智能合约,使其在原生指令集范畴实现图灵完备,这绝对是伟大的。图灵完备的智能合约是以太坊的一个发明,我们也很佩服。我们在用户态的侧链上,也会支持以太坊智能合约,也很有可能将来会支持以太坊虚拟机,但是现在我们会先选用小蚁的智能合约。

第二个是Java没有做到端到端。其实Java语言的发明是在1995年,当时是为机顶盒发明的。当时机顶盒上的中央处理器架构有X86、Alpha和PowerPC。因为机顶盒的中央处理器不同,所以要把Java传送到机顶盒端,然后按需编译。但是当时没有设想Java能运行在Server上,如果Java不运行在Server上,就是Server和端都要运行Java,中间的网络就有可能被接管。

这是微软设计刀奈特的初衷,如果服务器采用微软的云,那么端上会运行微软的CLR,这样端到端两边运行时,通过一个叫映像(Reflection)的技术,就可以动态产生远程过程调用[55](RPC),把软件封装成服务,就是一个软件的“黑盒子”。按照这样的方式定义接口、事件之后,你就不用管软件服务是用Java写的,还是x86或ARM写的,调用就行了,或者把硬件做成服务。这样的话,生成远程过程调用就能规避分布式拒绝服务攻击,也能规避隐私泄露和病毒。因为TCP/IP太灵活了,是今天互联网不稳定及用户数据泄露的始作俑者。

互联网的发明很伟大,源于当时人们做的一个非常英明的抉择。最早美国军方在投资做互联网时,可以选择做一个类似美国国家航空航天局(NASA)的网络中心,也可以选择把它全部开放,做成去中心化的、只要有服务器就可以接入的互联网模式。最后,互联网的创建者们决定选择后者,成就了今天互联网的繁荣。

当然,恰恰因为这个英明的决定,引发了今天互联网的所有问题。比如,任何人都可以接入,任何人都可以发软件包,任何人都可以做中间人攻击,任何人都可以做分布式拒绝服务攻击,任何人都可以伪造身份。这些问题导致了病毒的大量传播和隐私的泄露。

此外,木马病毒的产生还有一个原因是操作系统有守护进程[56](Daemon),不过今天的操作系统已经完全可以做到没有守护进程,没有后台守护进程。比如,微信小程序其实就是一种操作系统,是在微信中预置了内嵌浏览器,用户通过链接可以找到网站、公众号。端到端的连接都被腾讯接管了,所以一个微信公众号被人伪造成域名系统(DNS)攻击、分布式拒绝服务攻击的可能性都是微乎其微的。在微信里,一个人被人冒充的机会也非常小。

小程序就是操作系统,有用户和存储,但它的问题是,比如如果你发一个淘宝的网站链接,腾讯就会把它屏蔽。这显然不是一个公平、公正、中立的做法。

同样的问题也出现在谷歌、苹果等公司中。比如,苹果手机的操作系统比别的手机操作系统更安全,所以苹果可以为其操作系统定价。今天有了区块链技术的帮助,我们能够产生去中心化的ID,如果再利用区块链提供的对方公钥进行端到端的加密通信,就能够做到端到端的安全,这样就不用额外支付成本了。

此外,如果有了去中心化的ID和区块链的自动运行机制,客观上就把区块链的这张网给建起来了,去中心化实际上做到了去运营中心。打个比方,我们用手机打电话,两部手机之间就是端到端,如果没有了中国移动,就是去运营中心。再比如,两个人用微信语音打电话,如果去掉腾讯,也就是去运营中心。还有微博,它有作者和读者,新浪是一个运营中心。同理,脸书也是一种运营中心。我们通过区块链的自动运行机制,能把这种运营中心去掉,有人称其为分布式应用。

大家经常忽略另一种去中心化,即去媒体播放器中心。什么是媒体播放器中心?广义地讲,今天大部分软件都是一种中心,比如MP3文件、电影要被媒体播放器播放,Doc(文档)文件要被Word播放,HTML(超文本标记语言)要被浏览器播放,软件其实是一个很大的中介。

然而,软件作恶也屡见不鲜。比如大家要做浏览器,是因为想屏蔽别人的广告,把自己的广告嵌进去。或者,媒体播放器被二次盗版,一部电影放了1万次还是放了100万次,只有播放器知道,作者是不知道的。片前片后的广告放的是哪家公司的,挣了多少钱,也只有播放器知道。

如果我们刚才讲的虚拟机技术能够让第三方应用无法直接上网、没有第三方后台守护进程、不能安装第三方驱动,达到这3条,那么运行软件后其实是很难传播病毒的,因为上不了网,一个虚拟机只运行一个程序,传播病毒是没有意义的,当然也不能说绝对做不到。

虚拟机能运行媒体播放器,媒体播放器能把一个数据加载起来,间接地看,虚拟机就是播放器的播放器。如果我们把播放器给去掉了,就是去掉了二次盗版,去掉了软件中介,把所有的数据变成程序,这样会给作者带来更多的收益。

今天我们在社交网络、原来的浏览器上传播的都是数据,比如传歌曲,传视频,传文档。如果我们能在社交网络上传程序,那么用户体验和整个收益模型会有一个革命性的改变。

在过去的互联网上,所有的网站都是由一家机构控制的,比如我们现在想做供应链金融,想让这个网站更有诚信,就使这个网站由一个服务器来运行。如果说,我们把网站变成由几个机构通过智能合约做成的有共识的网站,显然可以有更多的诚信,起码供应链金融的各方会有更多的信心。这类网站在过去的互联网上是不存在的。

但是我要强调的是,这种网站对于一个网络操作系统来讲,其实是用户态的东西。比如10家机构要形成一个供应链金融应用,它们各自选用各自的云服务器,有人选阿里云,有人选百度云,有人选亚马逊云,进而用权益证明形成智能合约来共同运行。这其实跟公链节点、联合挖矿基本上是没有关系的,但是诚信可以递归。如果去中心化的ID依托于公链,那么一些哈希值也可以记录到公链上。将来,这几家供应链金融机构就不可抵赖,不可毁约。

我认为,把智能合约运行在公链上是不明智的,这可能会冒犯很多节点。我觉得公链没必要做智能合约,也没必要做图灵完备。当然,智能合约是要做到图灵完备的,这是两件事儿,把它们混为一谈自然会碰到效率的问题,也自然会捉襟见肘,因为区块链的本质是一台输出信任服务的专用计算机。而一台计算机是不可能服务所有互联网用户的,这是起码的常识。

比如记账,尽管可能是6000个节点,6000个计算机协同记账,那么一个账本就是一台计算机,只不过这台计算机不由任何机构控制,既关不了也不能悔改。区块链创造限量通证,人为制造稀缺,其实是区块链计算机的伟大之处,但我们不可否认它是一台很慢的计算机。比如“银河”巨型计算机其实是由数百个中央处理器组成的,内部有光纤,也有总线,每个机器上有自己的内核,这样形成了一个网络计算机。但对于老百姓来讲,“银河”巨型计算机就是一台计算机。

所以我们把区块链当作一台计算机,这对大部分消费者是有益的。不同的计算机各有千秋,比如“银河”巨型计算机比我的个人电脑运算得快,但是我家里装不下“银河”巨型计算机,也付不起电费。我的手机省电又好用,但是做不到实时智能驾驶。各种计算机的用途不同,架构不同,一台计算机不可能满足所有人的需求。

所以,在以太坊公链上做智能合约、做分布式应用,把有大量用户的应用程序一起运行在以太坊上,哪怕你的终端、手机上运行所谓的分布式应用前端,但后台依赖于区块链,也是不明智的。

亦来云其实并不依赖亦来云公链作为后台,它其实依赖其他的服务器节点作为侧链,实现所谓的机器人中介,避免人为中介,让应用双方感觉它们之间的通信及服务是端到端的。亦来云公链只提供去中心化的ID、溯源、稀缺这3个功能,并不提供服务的运行。毕竟一秒钟做几十次的运算,能提供什么服务呢?我们想想,也知道那不可能。