APP下载

基于区块链的高校数据共享系统研究

2022-09-09宋东翔马伽洛伦王怡然潘俊

电子技术与软件工程 2022年11期
关键词:数据格式合约区块

宋东翔 马伽洛伦* 王怡然 潘俊

(1.德宏师范高等专科学校 云南省德宏市 678400 2.德宏职业学院 云南省德宏市 678400)(3.京东方科技集团 北京市 102600)

近年来,部分高校建立了各类信息管理系统,例如:财务管理系统、人事管理系统、OA 办公系统、学生管理系统、教务管理系统和科研管理系统等。但因系统开发时间不同、开发公司不统一和学校机构设置调整等导致出现以下问题:

(1)数据格式不统一:每个信息系统具有独立的数据库,并且数据结构不统一。办公部门之间交互的数据表格中存在数据字段不一致和单元格格式不统一。需重复工作修改格式完成数据统一,造成人力、时间和资源的浪费;

(2)数据偏差:每个系统中存在学校机构和人员信息等多个重复模块,有时重复数据无法及时更新,造成实际学校人员总数不一致等情况,在工作中容易出现数据偏差;

(3)数据维护困难:因每个系统数据独立,存在多个重复模块和系统由不同公司开发,增加系统维护的时间和成本,影响工作效率。

近年来,对于区块链中的数据存储,研究者们都提出了许多的解决方案。国内学者韩菊茹等人提出的区块链的可信日志存储与验证系统,该系统实现了本地数据与区块链存储数据的完整性验证,因为日志的数据数量太多的问题,对gas 消耗太大。纪露生等人提出的一种基于区块链的链下个人数据保护方案,该系统设计智能合约数据结构,减小gas 消耗,实现个人数据的链上存储,数据安全性得到保障,系统架构设计数据的操作大部分都在链下完成。曹迪迪的基于区块链智能合约的可信存证系统研究与实现中实现了链上数据的基本操作并且gas 消耗低,文中因为存储数据的复杂性,设计采用数据指纹提取存储数据生成的哈希值,并没有把数据完全存储到区块链上。区块链技术具有去中心化、不可篡改、可追溯的特性。去中心化特性可以降低高校信息数据的维护成本,不可篡改特性保障共享数据的安全性,可追溯特性能够记录用户的操作记录。高校传统信息系统在用户登录时,用户名和密码存储在数据库中,存在被破解泄露的风险。零知识证明是一种证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的协议。该协议能够实现共享系统用户的无密码登陆,提升系统的安全性。针对以上问题,本文提出基于区块链的高校数据共享系统,使用NodeJS+Express 构建服务端,数据库使用MySQL,区块链联盟链FISCO BCOS 作为底层架构,Solidaty 语言编写数据格式优化和零知识证明协议智能合约。通过Docker 容器和压力测试工具Caliper测试系统部署的智能合约性能,测试结果属用户可接受范围。基于区块链的高校数据共享系统的构建,能够实现高校数据的统一格式共享,用户无密码登陆,整体提升了学校的工作效率。

1 相关技术

1.1 区块链联盟链和智能合约

联盟链由多个联盟节点共同维护区块链网络,联盟链数据只在联盟节点中公开,不同于区块链公有链和私有链。在联盟链网络中,众多的联盟节点彼此连接构成区块链网络。联联盟链有两大核心功能:数据存储和智能合约代码执行。智能合约是Nick Szabo 在20世纪90年代提出的一个概念,是以数字形式规定的一系列承诺。智能合约代表一段用高级语言(Solidity)编写并存储为区块链中字节码的代码。在每个联盟链全节点中,都保存有完整的区块链数据。不仅将交易数据保存在链上,编译后的合约代码同样也保存在链上。联盟链全节点中,提供了一个虚拟机EVM(Ethereum Virtual Machine)执行智能合约,实现图灵完备。

1.2 Web3.js和DApp应用

Web3.js 是区块链智能合约官方的Javascript API,帮助智能合约开发者使用HTTP 或者IPC 与本地的或者远程的区块链节点交互。Web3.js 是一个库的集合,主要包括下面几个库:Web3-eth 用于区块链和智能合约交互、Web3-shh 用于控制whisper 协议与p2p 通信以及广播、Web3-bzz 与swarm协议交互和Web3-utils 包含了一些Dapp 开发有用的功能。

DApp(Decentralization App)是去中心化应用,部署于区块链网络中。传统基于区块链联盟链系统架构中通过solidity 语言编写号智能合约,通过编译部署在区块链上,客户执行操作的系统流程为:第一步:客户端通过操作,发送执行智能合约请求;第二步:前端JS 调用Web3.js 接口把请求发送到智能合约;第三步:根据智能合约获取数据;第四步:前端JS 调用Web3.js 接口获取数据;第五步:获取到JSON 格式的数据。

2 数据共享思路

2.1 数据共享方法

为了保证共享数据的安全性,设计共享数据存储在区块链端,通过部署智能合约实现共享数据上传和数据查询功能。Web 服务端和区块链端通过Web3.js 接口连接,传递JSON的格式数据,本文系统设计共享数据为在高校工作中常用数据文件Excel 二维表。但区块链中不能直接存储Excel 文件,设计把Excel 二维表数据存储在智能合约中。但在区块链中智能合约每执行一个操作需要消耗系统资源,数据越大,消耗资源越多。参考文献的智能合约数据上传优化方法,把Excel 二维表数据单行数据逐条上传的传统方法改进为整表上传,减小资源消耗。

为避免密码的存储在数据库中被破解泄露和数据交互过程中被截取的风险,同时减小数据库访问压力。设计在服务器端的MySQL 数据库中不存储用户的密码数据,在区块链端部署基于非交互式零知识证明(Non-Interactive Zero-Knowledge,NIZK)协议的智能合约,客户端的用户只需发送零知识证明以内的正确知识信息(用户登录密码不发送),用户的用户名和零知识证明协议的交互信息存储在智能合约中,用户能够实现无密码登录。

2.2 系统架构

系统架构如图1所示,系统分为使用端、共享端和数据端。数据端包括:服务端和数据库,服务前端使用Vue-element-admin 框 架,结 合Element-UI、Vue-Router 路由组件搭建,Vue-CLI 3.0 完成打包发布。服务端使用NodeJS+Express 构建,Nginx 静态资源服务器存储资源文件。用户登录配合Jwt 访问令牌加MD5 的双重加密,并开启HTTPS 协议,进行数据传输加密,保证系统的安全性。数据库使用MySQL;共享端包括:区块链网络,数据使用哈希函数和非对称加密进行链式存储,区块节点运行在P2P网络中,每隔一段时间区块链通过传播机制和共识算法完成共识;智能合约包括数据格式优化和零知识证明登录智能合约,数据层和共享层使用Web3.js 连接;使用端涉及三种类型用户,普通用户,主要为学生和教职工。学院/部门管理员,主要为二级学院和行政部门负责数据维护工作人员。系统管理员,为学校网络中心负责人。

图1:共享系统架构图

3 系统实现

3.1 智能合约设计

设计好变量,再创建操作数据的CURD 函数,分别为:写数据:在客户端将JSON 格式的存储数据上传到合约,然后将JSON 格式的数据分拆,保存到以太坊网络上;读数据:将以太坊上的数据组合成JSON 格式,返回给客户端;改数据:在客户端将JSON 格式的数据上传到合约,然后将JSON 格式的修改数据分拆,保存到以太坊网络上;删除数据:将对应的数据删除。设计存取数据表的智能合约使用的是solidity 语言,但是solidity 语言本身是不能处理JSON 格式字符串的,需要使用第三方的Library(JsmnSolLib),其中规定每一个数组元素称为一个token。在EVM 中存在两种数据,为瞬时数据Memory 和永久数据Storage。不需要永久存储在区块链中的数据设置为瞬时数据Memory,可以减少资源的浪费。系统设计把区块链的用户信息、二维数据表内容信息、二维数据表字段名信息和二维数据表名信息存在Storage 中,主要使用结构体struct 和数组mapping 存储。

算法的复杂程度也会造成gas 消耗,所以为了操作上文中优化的上传数据,本文设计智能合约操作函数分别为:添加数据saveData()、读取数据getData()、更新数据updataData()、删除deleteData()和getNames(),参数中加入发送用户以太坊地址是为了区分不同用户对数据的操作。系统中不存储用户真实信息,每一次的智能合约函数状态变量改变执行,区块链都会创建一个交易,交易中都有一个哈希值作为验证标识,保证了区块链系统的匿名性和不可篡改。因为对上传数据的处理算法主要在添加数据和获取数据,智能合约中的存储变量如表1所示。

表1:智能合约的存储变量表

3.2 数据格式优化实现

在以太坊上,每个智能合约都有属于自己的存储空间,虽然智能合约没有查询语言(例如SQL)或者数据库组件支持,但是智能合约可以通过代码提供数据的初始化、读取或存储等功能。web3.js 接口只能通过JSON 格式传递数据,JSON 是一种与开发语言无关的、轻量级的数据存储格式。因上传区块链端智能合约的数据格式为JSON,因优化前的上传数据为按数据行数排序的数组,例如:上传数据为S=[[“Field1”,“Field2”,“Field3”,“Field4”],[“Row11”,“Row12”,“Row13”,“Row14”],[“Row21”,“Row22”,“Row23”,“Row24”],[“Row31”,“Row32”,“Row33”,“Row34”]]。优化个格式有4 个参数,分别为:Array,包含二维表所有字段和数据的内容数组序列;Field,存储二维表的字段数;Row:存储二维数据的记录行数。假如上传二维数据表S,字段Field 为4,记录数Row 为3。优化流程为:Array 从S 的第一行字段名开始从左向右依次遍历存储数据,直到遍历完整张二维表。优化后,Array 为:“[“Field1”,“Field2”,“Field3”,“Field4”,“Row11”,“Row12”,“Row13”,“Row14”,“Row21”,“Row22”,“Row23”,“Row24”,“Row31”,“Row32”,“Row33”,“Row34”]”;二维表中字段分别为Field1、Field2、Field3 和Field4,Field 为4;二维表中记录Row 为3。算法3-1 上传数据格式优化算法如下所示:

?

?

3.3 零知识注册和登录实现

设计基于非交互式零知识证明协议的智能合约各参数为:证明者是用户User;验证者是智能合约verify;智能合约的发布者公钥和私钥为:pk 和sk;签名函数为sign;哈希函数为Hash;公开参数为素数g 和n;用户账号为userName;用户密码为userPassword;随机函数random;客户端产生随机数为v;智能合约端产生随机数为c。

3.3.1 用户注册

通过部署非交互式零知识证明协议的智能合约,用户注册流程为:通过公钥私钥对生成算法生成(pk,sk)。pk 为用户登录系统时的账号,sk 为登录时的密码。用户注册流程为:

(1)用户用Hash 函数对用户密码sk 进行运算得到摘要H(sk);

(2)把摘要H(usk)转换成整型数值x;

(3)进行pow(g,x,n)运算,公式为y=gx mod n,得到公开素数g 的x 次方对公开素数n 的取余值;

(4)用智能合约的发布者的公钥pk 把y 和用户账号userName 两个信息进行签名得到sign(y)=sign pk(y,userName);

(5)把sing(y)发送给验证者verify,verify 用智能合约的发布者私钥sk 解密得到y、userName 和verify,完成用户注册。

3.3.2 用户登录

通过部署非交互式零知识证明协议的智能合约,用户登录流程为:

(1)客户端通过随机函数random 得到随机数v,进行pow(g,v,n)运算,公式为t=gmod n,得到公开素数g 的v次方对公开素数n 的取余值;

(2)使用智能合约发布者的公钥sk 对t、用户名userName 两个信息进行签名得到sign(t)=sign pk(y,userName);

(3)把sing(t)发送给验证者verify,verify 用智能合约的发布者私钥sk 解密得到t 和userName;

(4)智能合约在合约的用户列表数组中查询该用户是否注册,已注册返回随机函数random 得到的随机数c,否则返回无用户信息;

(5)证明者是用户User 收到返回值c,进行运算得到r=v-cx mod (n-1),通过公钥sk 把r、用户名userName 两个信息进行签名得到sign(r)=sign pk(r,userName);

(6)sign(r)发送给验证者verify,verify 用私钥sk 解密得到r 和userName,运算得到tval=g*ymod n,判断tval是否等于t,如果相等,就验证通过,用户登录成功。

4 实验测试

实验详细配置参数如下:操作系统:Ubuntu18.06、FISCO BCOS :2.8.1、Caliper:0.2.0、Docker:18.06.02、NodeJS:10.0.1、Vue:2.6.1、MySQL:5.7.1。实验使用Docker 和压力测试工具Caliper,测试基于高校共享数据系统的数据格式优化和非交互零知识证明智能合约函数性能。配置模拟节点11 个,编号0-10,网络地址为127.0.0.1:1001-127.0.0.1:1011,RPC监听地址为127.0.0.1:8501-127.0.0.1:8511,Channel 监听地址为0.0.0.0:1001-0.0.0.0:1011。性能测试分别测试发送速率(TPS)、最大延迟/s、最小延迟/s、平均延迟/s、吞吐量(TPS)。通过实验结果分析,合约函数的平均发送速率为1100TPS。时延最大的是数据格式优化中的数据上传函数1.4s,合约的平均时延在1s 左右是吞吐量平均在900TPS。因智能合约函数中查询数据时延小,上传数据时延大,所以性能测试参数为用户可以接受的范围。

5 结论

本文通过研究数据共享和区块链的结合,设计了使用端、共享端和数据端的三层系统架构,详细描述了共享端中数据格式优化的智能合约算法,解决了服务端与区块链端上传数据增加智能合约执行次数,造成系统资源消耗高的问题。设计并部署了了非交互式零知识证明的智能合约,并描述了用户登录流程,提升系统的安全性。基于区块链的高校共享系统建立,整体提升了高校的工作效率。但还存在不足之处,比如共享数据只能存储二维表数据,数据类别有限,在未来工作中,进一步优化共享系统能够存储图片、视频等复杂信息。

猜你喜欢

数据格式合约区块
区块链:一个改变未来的幽灵
区块链:主要角色和衍生应用
区块链+媒体业的N种可能
读懂区块链
在智能交通系统中PLC数据格式转换方法的研究
论子函数在C语言数据格式输出中的应用
DWG与SHP数据格式互转换方法研究——以龙岩规划测绘数据为例
基于ArcGIS的规划数据格式转换研究
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望