DARMA Cash匿名公链技术(一):全网SSL/TLS加密和GO语言
大家好,人工智能和区块链技术是下一个十年的朝阳行业,我们来自达摩社区区块链技术小组(以下简称DAMO-BCG),专注于区块链技术的投资。DAMO-BCG是匿名公链DARMA Cash( DMCH )的早期支持社区之一,我们将按照深入浅出、由浅入深的方式逐步推出DARMA Cash匿名公链技术的系列文章,为大家介绍DMCH的精彩世界。
公链 也称“公有链”,比特币是世界上第一个共有链,所谓公和私区别就在于链上的节点是否是自己可控,公有链对应的就是私有链;比特币、以太坊是时下最流行的公有链。公有链是指全世界任何人都可以随时进入到系统中读取数据、发送可确认交易、竞争记账的区块链。公有链通常被认为是“完全去中心化”的,因为没有任何个人或者机构可以控制或篡改其中数据的读写。
公有链一般会通过代币机制(Token)来鼓励参与者竞争记账,来确保数据的安全性。从应用上说,区块链公有链包括比特币、以太坊、超级账本、大多数山寨币以及智能合约,其中区块链公有链的始祖是比特币区块链。
DARMA Cash(DMCH)公链技术作为近期崛起的匿名公链相对于比特币、以太坊有什么优势呢?今天让我们从DMCH的编程语言GO语言和DMCH全网采用TLS加密的角度拉开本系列的序幕吧。
DMCH全网采用SSL/TLS加密SSL/TLS加密简介
传输层安全性协议(英语:Transport Layer Security,缩写作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与RFC 6176(2011年3月)。在浏览器、邮箱、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如Google、Facebook等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准。
TLS协议采用主从式架构模型,用于在两个应用程序间透过网络创建起安全的连线,防止在交换数据时受到窃听及篡改。TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。
DMCH SSL/TLS加密抓包分析 DMCH整个P2P网络是原生使用了SSL/TLS加密的,所以DMCH节点之间的所有数据都是经过加密在互联网上进行传输的。正如下图所示,SSL/TLS处于网络模型的第四层即传输层,DMCH的区块网络作为应用层嵌套在SSL/TLS加密技术的保护之下。由于DMCH网络所有数据均是加密传输,所以互联网上的不法分子无法通过恶意方法识别、截取DMCH网络流量和内容。DMCH运用的SSL/TLS加密技术从根本上确保了DMCH网络的安全性和可用性。
下面就让我们简单看一下默认情况下DARMA Cash(DMCH)和门罗(XMR)区块网络的网络包分析:
图1是门罗币的网络数据包,我们可以看到门罗门节点167.114.1.184:18080向本地节点同步了一个网络包,这个包的数据是透明、公开的。任何具有一定网络技术的人员都可以都可以对区块网络进行监测、阻截、甚至破坏。
图1
图2是DARMA Cash(DMCH)的网络数据包,我们可以看到DMCH节点156.230.55.193:53803向本地节点同步了一个网络包,这个包的数据是经过Transport Layer Security, TLS加密的。网络分析工具智能识别出这是一个加密的数据,至于其中的具体内容一无所知。
图2
通过以上的对比,我们就能感受到DMCH全网区块数据通过SSL/TLS技术加密的设计对于提升整个区块网络的设计效果显著,这也是DMCH从根本上区别于大部分公链项目的一个小细节。
GO编程语言
GO语言简介:
GO语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发GO,是因为过去10多年间软件开发的难度令人沮丧。
GO语言的优势:
-
部署简单
GO 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。
-
并发性好
GOroutine 和 channel 使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个 GO 应用也能有效的利用多个 CPU 核,并行执行的性能好。
-
良好的语言设计
从学术的角度讲 GO 语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,GO 的设计是非常优秀的:规范足够简单灵活,有其他语言基础的程序员都能迅速上手。更重要的是 GO 自带完善的工具链,大大提高了团队协作的一致性。比如 GOfmt 自动排版 GO 代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行 GOfmt,这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码。此外还有 GOfix, GOvet 等非常有用的工具。
-
执行性能好
在使用中,性能高就可以做更多扩展,特别是业务复杂的情况下, 性能是第一保障;使用 GO 建立东西需要更多的时间,但在后续的代码优化上可以节省大量时间。GO 一般比 Python 要快 30 倍。以下是 GO 与 Java 之间的基准比较:
GO适合用来做什么:
-
服务器编程。以前你如果使用C或者C++做的那些事情,用GO来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
-
分布式系统,数据库代理器等。
-
网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用。
-
内存数据库,前一段时间GOogle开发的groupcache,couchbase的部分组建。
-
云平台,目前国外很多云平台在采用GO开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。
DMCH选用GO编程语言的雄心
编程语言的选择可以看出DMCH项目在启动时候开发人员对项目发展的定位。GO语言部署简单、并发性好、执行性能好,大量用于分布式系统、内存数据库、云平台,从这些特点无疑反应出开发团队对于DMCH公链上嫁接大型生态应用的规划,也让我们社区对DMCH的未来充满了期待。
区块链经过10年的发展,各项目之间的竞争已经趋于白热化,同化现象严重,这使得投资一个富有潜力的项目已经变得越来越困难。然而我们却应该懂得一个道理,每一个人都有自己的天赋,如果DMCH是一个孩子,那么SSL/TLS全网加密和GO编程语言就好像是DMCH从娘胎里出来的自带天赋,这个天赋使得他在今后的发展中具备位居一线阵营的潜质。