牛 坚,李宥谋

(西安邮电大学 计算机学院,陕西 西安 710121)

0 引言

区块链技术在各种领域具有潜在的应用,如智能合约、物联网、土地登记、供应链管理、存储医疗数据和身份管理[1]。区块链源自于比特币的底层技术,最早由化名“中本聪”的学者在《比特币:一种点对点式电子现金系统》一文中提出。区块链(BlockChain)是一种具有去中心化、可追溯、不可篡改、安全可靠等特性的分布式数据库,集成了P2P(Peer⁃to⁃Peer)协议、数字加密、共识机制、智能合约等技术,摒弃了传统中心节点维护的模式,采用多用户共同维护,实现多方向的信息监督,进而保障数据的可信度与完整性[2]。区块链的进化过程如下:

1)区块链1.0:数字货币;

2)区块链2.0:数字资产与智能合约;

3)区块链3.0:从DAO,DAC(区块链自洽组织、区块 链自洽公司)到区块链社会(科学、医疗、教育等)[3]。区块链技术特有的优势使其在文件档案管理中的应用日益受到关注。

档案是一种重要的数据记录,是人们在各种社会活动中直接形成的具有保存价值的原始信息。档案数据的真实性和原始性主要依赖于对系统中心或第三方实体的信任,如系统主节点、中心数据库以及系统负责人、数据库管理员等。一旦上述系统中心不再可信(例如系统数据库遭入侵),档案数据的真实性将荡然无存[4]。基于区块链的高校档案系统旨在通过时间戳、哈希函数、非对称加密、数字签名等技术将档案信息写入到区块链中,从而实现数据的不可篡改、不可伪造性,提供更加可信、便捷的档案发布和查询操作,加强了的隐私保护,保证了系统的安全性,减少了系统的维护成本。

基于区块链的校园档案系统的网络,可以在区块链上和本地数据库进行查询,其由两部分组成,一部分由各个学院的对等网络节点组成,另外一部分由用户访问的Web 客户端组成。每个对等网络节点都有向档案输入数据的权力,各个院的档案数据由各个院进行记录,由输入人用自己的私钥进行数字签名[5],将签名后的档案数据发到其他学院的网络节点的数据库里进行存储,当老师退休或学生毕业后将关于此人的所有信息从数据库里收集起来上链。每个信息都有生命周期,在生命周期满前,将数据写入本地数据库,一旦生命周期到达后,就将数据放到区块链上。这也是基于本次档案系统的网络结构与比特币、以太坊不同之处,比特币和以太坊的网络[6⁃7]都是基于货币交易进行设计的,并且信息只能在链上查询。这样设计的目的是在上链前和上链后,每个学院的网络节点都保存有其他学院网络节点的没有上链的档案信息。在上链前数据不可篡改,上链后更是无法更改。这样如果以后档案有什么问题可以追究到当事人。

1 档案系统框架

基于区块链的档案系统共有:数据层、网络层、共识层三层,如图1 所示。

图1 基于区块链档案系统框架图

数据层:主要存储教职工的档案信息,此处又分为数据库存储和区块链存储[8]。数据库存储没到生命周期的数据,即教职工还没到退休时间,学生还没毕业的信息。区块链存储的是已经从学校退休的教职工和已经毕业的学生的信息。数据层采用树形结构存储,每个院的数据各自都存放在一起,这样查询时就节省了时间。

网络层:对等节点由各个学院组成,保存有档案数据的完整副本,如果其中一个院的节点数据丢失了,还可以通过区块和数据库同步,来重新找回数据。

共识层:共识算法本质上是为了解决拜占庭错误[9⁃10]。在比特币、以太坊等公有链环境下,分别用的是工作量证明机制和权益证明机制,工作量证明机制需耗费大量的算力和电力,权益证明机制是根据货币量选择记录者,不适合校园档案系统。而基于本次档案系统是私有连,提出一种新的共识,这里所达成的共识是每个院来记录自己院的档案数据。

2 档案网络层实现

网络层[11⁃12]采用BS+P2P 结构相结合的混合模式,每个院都有一个主机作为P2P 节点和Web 服务器。P2P网络结构模型[13⁃14]主要功能是节点间数据传输、档案数据同步、达成共识、维护区块链等。BS 网络实现人机交互界面,通过网页将要查询的数据随机发送请求给任意一个Web 服务器,服务器根据院系信息进行查询,如果信息在本地数据库中没有查到,则在区块链中查询,如果查到,则返回查询信息,否则返回查询失败。网络层框架如图2 所示。

图2 基于区块链的档案系统网络层框架

各学院网络节点主要用于数据同步和达成共识,如果A 学院目前有一批学生入校,那么A 学院档案负责人就要把新入学的学生信息统计一下,负责人用自己的私钥签名后保存到本地数据库并发送给B 和C 学院,这2 个学院收到数据后,保存到各自的本地数据库,当这批学生毕业后,A 学院按照录入数据的时间先后顺序将这些学生信息打包成区块,根据算出区块Hash 值,并通知其他区块,把已经毕业学生的信息打包一下,算出区块Hash 值,然后再相互对比Hash 值,如果一致,则达成共识,将数据上链,否则,若有一个节点的Hash 值与其他的不同,就都不上链。上链后再将数据从各自数据库中删除。

用户查询时,在网址输入用户名和密码,登录成功后,根据权限,如果为校级,则可查看所有教职工和同学的信息;如果为院级,则可查看某个学院的信息;如果是个人,则只可查看个人信息。查询时,由哪个学院节点负责查询是随机的。

3 节点间连接时网络模型及协议

各节点间主要用Napster 集中式P2P 网络模型[15],此时节点主要是在线节点之间建立TCP 链接,各节点间通过代理服务器发现,节点间建立的通信如图3 所示。

图3 学院间简历通信

各个院分别有1 台主机作为网络节点。每个网络节点开启时先连接代理服务器,TCP 连接成功后,随之向代理服务器发送一条验证消息。代理服务器根据发来的验证消息,如果确认为该校的网络节点发来的,则代理服务器把该节点的IP 地址、端口号、院系名称和学校名保存到一个列表。期间,建立连接的节点与代理服务器会每隔30 s 发送一次心跳包,查询节点是否下线,如果下线则从地址表中删除下线节点信息。当有新节点连接后,会向服务器发送“getaddr”命令来获得其他节点地址信息。当代理服务器收到“getaddr”命令,反馈列表的地址信息给请求的节点。当节点收到其他节点地址信息时,会向其他节点发出TCP 连接。这样就可以在2 个节点直接通信。

3.1 节点同步

节点连接成功之后,第一件事就是同步节点信息,新加入的节点向其他连接的节点发送最新区块索引,对方收到后也会应答给出自己的最新区块索引,如果索引相同,表明区块已经达到同步状态。否则和其他节点交换区块高度,如果区块高度相同,选择高度小的节点同步节点信息。

3.2 P2P 网络消息协议

节点间通信时,要遵守规定的消息协议,否则其他节点收到该消息后将确认验证不能通过并丢弃相应消息包。消息协议由start、cmd、messagesize、message 4 部分组成。

start:消息头部,标志这是对等节点发送的一个消息,用来检测是否是其他学院对等节点发来的消息,如果是,则接收这个消息,否则丢弃。

cmd:命令行,包含n个命令,每个命令代表不同的消息类型。

messagesize:表示消息的大小,代表的是后面将要发送的消息内容大小。

message:消息内容。

4 BS 网络

BS 实现的是浏览器和服务器架构模式。通过网页进入查询页面,查询信息通过HTTP 协议将请求发送给学院网络节点。先进行本地数据库查询,如果在本地查询不到,再在学院区块链节点进行查询。

进行查询时要进行节点验证,网页先与各院服务器所在服务器建立连接,然后再将要查询的消息发送给Web 服务器,服务器收到后先对消息头部进行验证,例如:start 可以是xxxty(xxx 通信学院)、xxxjy(xxx 计算机学院)、xxxdy(xxx 电子学院)、xxxlxy(xxx 理学院);如果电子学院连接服务器时,start 是xxxdy;type 搜索类型是teacher 或student 中的一个;messagesize 是消息的大小,message 是要查询的内容。

5 结语

区块链独特的技术优势使其有着广泛的发展前景,不仅仅应用到交易系统,未来会应用到校园档案、医疗信息、人工智能、物联网等各个行业。本文实现的电子档案为一条私有链,采用P2P 网络+BS 网络模型,安全性较高,且受攻击后自动恢复能力强。但是也存在一些缺点,每个节点都有区块链数据的完整复制,随着时间推移,数据库和磁盘中区块的数据会越来越多,占用内存也越来越大。今后还需再做改进。