李晋江,张天霖,范 辉
(1.山东工商学院 计算机科学与技术学院,山东 烟台 264005;2.山东工商学院 区块链与应用技术学院,山东 烟台 264005;3.山东工商学院 信息与电子工程学院,山东 烟台 264005)
区块链技术(Blockchain)起源于Nakamoto在2008 年发表的《比特币:一种点对点电子现金系统》一文,是一种构建在点对点网络上的全新分布式基础架构与计算范式[1]。区块链中的交易数据是通过链式结构存储并验证,各节点利用共识算法共同参与并管理和监督数据的更新,节点间通信传输数据内容通过密码学加密提高安全性,使用脚本化代码编写的智能合约自动执行和操作数据。
区块链针对传统交易的信任和安全问题提出了技术创新。分布式账本技术,多个不同的节点共同完成交易和记账的过程,起到了监督记账的合法性。与以往的分布式存储不同,区块链涉及的分布式存储在每个节点中都存储了基于时间戳的链式结构的完整数据,然而在传统分布式存储中是将有分布规则规定的多份数据存储在不同的节点中。区块链中的各个节点在网络中的地位相同,配置资源相同,并通过共识机制确保存储数据的安全性[2]。各节点间传输的数据信息经过加密技术保护,不仅实现了对内容的保密性而且加强了对节点的认证。
随着区块链技术和以区块链为基础的数字货币发展迅速,诸多行业逐渐发现,区块链技术慢慢地在改变甚至颠覆各个行业和领域存在的潜力和价值。但是,目前由于区块链技术方面人才培养和发展方面缺乏系统、全面、有效并受到认可的教育服务[3]。为此,我国高等教育应把握机遇,认真研究并大力开展区块链技术计算机科学和跨学科教育课程。
国外对前沿技术的应用研究和教育教学起步比较早。目前,尼科西亚大学、普林斯顿大学和斯坦福大学等全球知名大学分别开设了“数字货币入门”“CS251 比特币和加密电子货币”等课程[4]。哥伦比亚大学与IBM 公司合作,创立了区块链和数据透明中心。麻省理工大学有一个数字货币计划,帮助创建了加密货币工程和设计、共享公共分类账等。
国内很多顶尖高校也开设并创办了与区块链技术相关的课程和项目,将区块链加入本科或研究生的培养计划中。清华大学创办了x-lab,为具有区块链技术的创业者提供更好的服务和平台,把握最新的创业动态,清华 x-lab 联合链块学院,为入驻团队提供了区块链行业与应用班课程。此外,清华大学还成立了全国高校区块链创新联盟——青藤链盟,全称青藤区块链联盟,由清华 x-lab 联合清华各院系教授筹备发起,由全国各大院校、科研机构、行业组织,共同发起组建的区块链教育和产业联盟。北京大学光华管理学院新金融与创业投资研究中心区块链实验室成立,旨在展开金融科技和监管科技的研究。浙江大学成立了浙大计算机科学与技术学院区块链研究中心,并正式开设区块链与数字货币的课程,着重培养区块链技术人才[5]。复旦大学与IBM共同探索,联合创新,致力于IBM 区块链研发,成立了计算机科学技术学院“区块链技术联合创新中心”。武汉大学成立密码学与区块链技术实验室,研究方向主要将区块链与密码学技术结合,打造出新的安全协议涉及方法[6]。
随着区块链的推广和普及,加上它对于传统行业模式的颠覆性的思想转变以及带来的各方面效益的提升,在未来的几年内,各高校不仅会不断开设区块链技术的课程,而且会加大对于区块链研究的投入。
区块链是一种由时间顺序将信息按顺序相连的方式组合成数据结构,并利用共识机制达成一致来提高鲁棒性,利用密码学保证数据安全性的分布式账本系统[7],是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
分布式数据存储是将集中的数据分散存储在多台独立的设备上[8],提高了数据存储的可靠性和安全性。各节点之间通过共识机制确保链上数据的正确性和存储数据的一致性,共识机制是区块链事务达成分布式共识的算法,建立各个节点一致明确的规则来保证分布式网络的数据状态,是区块链技术的重要组件[9]。非对称加密算法进一步提高了系统安全性,有效认证区块数据更新的合法性。
区块链提出适合时代环境的创新思想得到广泛的实践应用离不开它完善的理论体系和综合的核心特征[10]。区块链具有去中心化、开放性、自治性、信息不可篡改和匿名性等特征[11]。
1)去中心化。
在区块链点对点网络中的各个节点既是服务的请求者也是服务的响应者,每个节点都互相信任并直接交换数据,且分配了一定的资源和工作,在网络中的地位是平等的。
2)开放性。
系统是高度开放的,底层和开发相关应用的代码是透明的,因此整个系统是自治的,可以做到信息公开的最大化。
3)自治性。
区块链中的规范和协议是采用协商一致的,让整个系统中的每个节点能够在去信任的自由安全环境下交换数据[12]。
4)信息不可篡改。
一个交易被发布到网上,并且通过了各节点的验证写入到了区块链上,那么这个信息就会被永久地存储起来,无权进行修改。
区块链基于计算机科学理论和技术实现,其底层技术涉及的知识内容包含在现代计算机科学类课程中。编程语言实现了区块链节点间消息传播以及智能合约等技术。区块链其本质是区块(数据)间由密码学相连而成的链式结构体,区块中的交易数据存储结构则是由哈希值组成的树形结构以及在密码学中同样涉及的哈希函数。区块链也是搭建在网络上,节点间通讯遵循网络协议。区块链技术保密性依靠现代密码学中非对称加密技术。具体课程和知识点见图1。
图1 区块链技术涉及计算机课程
编程语言实现了区块链从理论层面到技术应用层面的转变。如今区块链的主流开发语言为Golang(以下简称为Go 语言),是由Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。HyperLedger Fabric大多数链代码(使用HyperLedger Fabric 构建的智能合约)是用Go 编写的,比特币底层的源代码也是由Go 编写的。
Go 的语法接近于C 语言,在开设Go 语言之前须全面讲解C 语言作为先行课。因为编程语言大致相同,接下来对比两者的不同之处。从编程语法 上,Go 语 言 的基本数据类型要比C 语言更丰富;Go语言除了实现C 语言中条件判断和循环等的基本功能以外,还对它们进行了增强。两者在定义函数格式上不同,而且Go 语言中有方法这个概念。从编程思想上,C 语言是一门面向过程的编程语言,而Go 语言是一门面向对象的编程语言。
除了与C 语言的部分不同外,Go 语作为一种新型语言又在其基础上加入了其他新增特性,例如接口、并发、反射和异常处理等,其中Go在语言级别上支持并发与协程,通过协程可以方便地实现API 的并行处理,达到处理效率的最大化,提升系统吞吐能力。不仅如此,Go 语言开发简单、代码描述效率高,通过少量的代码就能实现框架的标准化,并以统一的规范快速构建API 业务逻辑。能快速构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产。
区块链是一种基于链式的数据结构。数据结构课程是让学生掌握数据在计算机中存储形式、数据与数据之间存在的关系及对数据进行基本处理方法等。区块链利用块链式数据结构来验证和存储数据[13],每个区块打包记录了一段时间内发生的事务是对当前链的一次共识,并且通过记录上一个区块的哈希值进行关联,从而形成块链式的数据结构。其中哈希指针实现了区块间的关联。
哈希指针不仅要存储地址,还需要保存这个结构体的哈希值,可检测结构体有没有被篡改。每一个区块包含前一个区块的哈希指针,最后一个是最近新产生的区块也有个哈希值存在系统中。每一个区块的哈希值是把前一个区块中的所有内容通过哈希函数算出,包括前一个区块的哈希值[14],这样后面的每一个区块都与前面所有区块有联系,区块结构见图2。
图2 区块链链式结构
从宏观角度上看,区块链是由一个个区块组成的链式存储结构,每个区块中的数据存储结构则是树形结构。树形结构中的数据元素之间存在一对多的层次关系,利用这种特殊的关系实现区块中的信息不可篡改性。
以区块链技术作为底层架构的去中心化系统中的数据组织形式不同,比特币中保存了一颗Merkle 树,而以太坊针对3 种对象设计了3颗Merkle Patrcia 树。MPT 是一种加密认证的数据结构,它融合了Merkle 树和Trie 树(前缀树)两种数据类型的优点。Merkle 树在区块体中的结构见图3。
在用户查询交易记录和账户余额时,需要访问的数据是存储在树形结构的叶子节点上,通过遍历整个树的结构才可以提取到数据。选择合适的遍历方法才能快速并且准确地找到所需要的信息。
一般而言,区块链基础模型是由自下而上的数据层、网络层、共识层、激励层、合约层和应用层组成。每层分别完成一项核心功能,各层之间互相配合,实现一个去中心化的信任机制。
图3 区块中的Merkle 树
OSI 七层网络模型,它将计算机网络体系结构的通信协议划分为七层,自下而上依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层[15]。每一层中都有属于自己的传输协议,完成自己相应工作及与上下层级之间进行沟通。从功能划分层次上讲,计算机网络体系结构和区块链基础模型两者有着共同之处,教师可通过全面讲解网络中各层的作用以及数据在各层间的传输方法和意义,对比区块链的层级关系来熟悉区块链基本架构。两者在架构模型上的比较见图4。
区块链的底层网络技术采用的是对等网络(P2P),是一种分布式网络通信技术,在互联网的组成章节中着重讲解对等方式,熟悉区块链实现去中心化的结构。网络中各节点间相互通信并传播数据,区块在网络上的传递过程涉及节点之间的连接管理、地址管理、Peer 节点的管理和Peer 之间同步区块的协议等。计算机网络中TCP面向连接的通信协议,通过三次握手建立连接,提供一种可靠数据流服务,并学习TCP 报文格式深化比特币中的网络协议中Peer 之间的协议消息、消息格式及包的封装和解析以及Peer 节点之间的TCP 连接。网际协议IP 是TCP/IP 体系中两个重要的协议之一,简单了解网络地址分类和协议中的3 个定义以及其他相关概念。
对等网络使用DHT 技术中的Gossip 协议进行消息发布与传播。在一个有界网络中,Gossip协议中的每个节点都随机地与其他节点通信,收到消息的节点也会重复该过程,最终所有节点的状态都会达成一致。主要在分布式数据库系统中各个节点同步数据时用,其最大特点是组成网络的节点是对等节点,是非结构化网络。
区块链信息不可篡改和匿名性是依靠密码学技术实现的。交易信息被打包成区块发布到网络上后,其他节点利用数字签名和时间戳验证每条交易信息的真伪。
图4 两者架构模型
了解密码学的理论基础有利于学生更清晰地明白区块链应用密码学技术的作用和对信息加密过程。需着重讲解密码学中的两个知识点哈希(Hash)和签名。哈希函数是现代密码学的基本构件之一,其中包含两个重要的性质,一个是抗碰撞性(collision resistance),另一个是隐匿性(hiding)。
抗碰撞性中假设有两个输入x和y,哈希函数用H()来表示,如果满足x≠y,H(x)=H(y),那就称为哈希碰撞。在对一个信息取哈希值求摘要来检测对内容的篡改,一旦改变了信息中的内容,那么它的哈希值也会随着改变,根据性质无法找到与原信息内容不同但哈希值相同的信息,体现区块链信息的不可篡改。
第二个性质是隐匿性(hiding),是指哈希函数的计算过程是单向的不可逆的。这个性质的前提是输入空间足够大并且分布足够均匀,各种取值的可能性差不多,无法通过蛮力法找到输入值。但大多数情况下,输入空间并没有足够大,因此区块链通过引入一个随机数nonce,加到输入值后同时取哈希值,这样拼接能保证整个输入是随机,分布也足够均匀。
经过前面理论基础和哈希函数学习后,在讲解现代密码学体系时,需熟悉掌握非对称密钥加密系统。“加密货币”中普遍用到了椭圆曲线数字签名技术,椭圆曲线是公钥加密体系的一种。在区块链系统中每个节点都存在公钥和私钥对,公钥用来加密,私钥用来签名,公钥由私钥产生。非对称加密系统在区块链中主要应用有两个,分别是公钥加密和公钥认证。
区块链技术不仅可以作为加密货币的底层架构,还可以为其他行业和领域注入新的活力,寻找突破瓶颈的方法。人工智能同样被国务院印发《“十三五”国家信息化规划》列入国家重点前沿技术重点发展项目。人工智能在近几年发展迅速,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,技术和理论都已成熟。将区块链技术和人工智能相结合会产生无限可能并推动着社会的发展,同样人工智能训练模型结果可以存放在区块链中降低应用遭受攻击的风险。
区块链技术作为我国战略性前沿技术,其发展应用直接决定了未来高等教育的发展质量和竞争力。随着区块链技术的不断发展和普及,越来越多的行业和领域已经受到了影响并逐渐发生了颠覆性的改变,它也在慢慢地渗透到我们的生活当中。作为一名计算机学科教育工作者,因为相关领域内前沿技术不断更新换代,教师需要及时了解学习并将成熟的技术传授给学生,不仅如此,国家的进步依赖于科技的应用成果,因此更需要在建设国家时贡献自己的力量。