APP下载

基于联盟链的行程溯源校验系统的设计与实现分析

2023-05-09蔡超萍康晓凤王可张百川王宇

软件工程 2023年5期
关键词:数字签名区块链

蔡超萍 康晓凤 王可 张百川 王宇

关键词:区块链;联盟链;行程溯源;数字签名

中图分类号:TP315 文献标识码:A

1 引言(Introduction)

行程码对防控病毒传播起到了至关重要的作用。一些不法分子恶意伪造行程码,给疾病管控部门的传染病防控工作带来了巨大的困难,也给社会卫生安全带来了严重威胁。为了避免类似事件的发生,行程码的数据防伪就成为行程溯源工作中亟待解决的问题。

本系统通过提供请求者IP(Internet Protocol,网际互联协议)位置的API(Application Programming Interface, 应用程序编程接口),返回json格式的地理位置(精确到区)信息,后端通过工具类JsonUtil处理此信息,再结合打卡时间和用户姓名生成行程对象,行程对象上传到区块链后,根据返回的哈希值生成公钥和私钥,使用私钥对json字符串加密,并把加密结果和公钥写入数字二维码,达到防止伪造行程码的目的。由于区块链具有信息不可篡改的特点,所以可以根据区块的哈希值对用户的行程溯源。Web应用前后端分离,前端使用VUE和Element-UI技术实现图形化用户界面,后端使用Spring身份控制技术分离权限,同时采用ECDSA算法进行签名,实现防篡改和数据保护功能。对比RSA(Rivest-Shamir-Adleman)算法,ECDSA(Elliptic Curve Digital SignatureAlgorithm,椭圆曲线数字签名算法)既保障了信息安全,又降低了算法复杂度[1]。

2 联盟链和ECDSA简介(Introduction to consortiumblockchain and ECDSA)

联盟链是一种基于区块链技术的分布式账本技术,也是一种特殊的区块链[2],由一组受信任的参与者组成,能安全地共享数据和信息,同时具有如下优势:可以防止未经授权的访问和篡改,提供更高的安全性;可以减少交易的确认时间,提供更快的交易速度;其成本相较于公共区块链更低,能够减少网络中的节点数量,减少硬件需求;可以提供高扩展性,支持更多的参与者和应用程序。

ECDSA是一种基于椭圆曲线密码学的数字签名算法,也是一种公钥密码体制[3],用于确保数据的完整性和可靠性。ECDSA使用椭圆曲线算法生成公钥和私钥,其安全性取决于椭圆曲线的安全性即阶的选择,因为它使用更少的计算量生成公钥和私钥,并且可以提供更高的安全性,所以安全性比RSA更高[3]。ECDSA的签名过程非常简单,首先对消息进行哈希计算,其次使用私钥对哈希值加密形成签名,最后使用公钥对签名进行验证。

3 系统设计与实现(System design and implementation)

本系统的核心技术为ECDSA算法和Hyperledger Fabric联盟链技术,核心模块包括Web端和联盟链。Web端分前后两个部分,Web前端采用广泛使用的JavaScript库VUE3结合Element-UI构建网页,后端采用Spring-Boot搭建控制层,并采用Redis缓存数据。联盟链部分在前端加载FabricClient库与Fabric Ca Client,通过RPC(Remote ProcedureCall,远程过程调用协议)服务与另一台服务器上的联盟链的Order和Peer节点进行通信,并在本地SQL(Structured QueryLanguage)数据库保存一份与上传数据相同的备份[4]。综合使用以上技术设计实现了本系统,包括用户管理、行程生成、行程校验和行程溯源四大模块,系统模块如图1所示。

3.1 用户管理模块

本系统没有直接提供注册功能,通过直接添加数据库的特权用户分别管理低级权限的用户。在Spring中使用@PreAuthorize注解控制用户权限[5],规定只有拥有某项权限的用户才可以调用某项函数。Spring Security的访问控制原理是基于角色的访问控制(Role-Based Access Control,RBAC),它将用户分配到不同的角色,并为每个角色分配不同的权限,从而实现访问控制。同时,在目录API中定义后端Controller层中对应的响应所需的路由,在后端使用@RequestController等注解指定相应的方法。在SQL数据库创建用户时,使用role字段赋予操作函数的具体权限,在具体函数中为超级管理员添加对用户进行“增、删、改、查”的权限,具体实现界面如图2所示,超级管理员可以管理普通用户。

3.2 行程生成模块

Web端的前端使用VUE加载地图插件vue-amap,并且向百度、高德、谷歌等厂商申请用于定位API所需的密钥,如图3所示。本系统在前端使用Axois技术通过用户IP向路由请求获取地理位置,逻辑代码再根据地理位置信息生成行程对象,通过工具类TimeToString获得实时时间写入行程对象,前端通过文本框获取用户输入的姓名等详细信息,并返回给后端写入对象,再将数据写入Peer节点。本系统有两个Peer节点,一个用于存储地址的随机编号,另一个用于存储用户的行程信息。Hyperledger Fabric提供了两种创建数据库的选择,即goleveldb(默认)与CouchDB,本系统使用-s参数创建了两个CouchDB數据库。

Hyperledger Fabric架构的通信过程如图4所示,应用向CA(Certificate Authority,证书授权)服务器发起注册,在提交行程的业务流程中向Peer节点发出提交交易的申请,同时Orderer节点对交易进行排序。区块链采用Docker搭建,通过编写配置文件生成证书等文件,创建TraceChannel通道,在服务器中开放17051端口为交互式CLI(Command Line Interface,命令行接口),开放17050端口为Order节点,开放两个数据库端口为Peer节点的交互接口,具体端口与节点域名如图5所示。系统采用Go语言编写链码,完成后将部署智能合约部署到联盟链,使用Hyperledger Fabric shim包实现链上数据的“增、删、改、查”业务,由于区块链具有防篡改特性,因此此业务并不是真实意义上的“增、删、改”操作,而是覆写。

3.3 行程校验模块

行程校验部分的主要算法为ECDSA公钥签名算法[6]。ECDSA是基于椭圆曲线上的离散对数问题, 可分解为EC( Elliptic Curve,椭圆曲线) 上的DSA(DigitalSignature Algorithm, 数字签名算法)问题。在本系统中,主要采用基于蒙哥马利曲线的一种椭圆曲线加密算法,即secp256r1[7]。该算法利用蒙哥马利曲线的特性实现安全加密,从而保护数据的安全性。Web端的后端定义了HEX编码、ECDSA签名、json处理、QRCode生成等工具类,并在控制类的逻辑代码中直接调用,降低了代码复用率。在ECDSA工具类中,系统利用java.security包中的KeyPairGenerator类获得的实体与随机数生成方法SecureRandom生成的随机数一起生成密钥对,其中私钥用于签名,公钥用于验证签名[8]。将签名所生成的哈希值写入行程对象的属性,并重写toString方法,将对象转换成json格式之后写入QRCode(QuickResponseCode,快速响应码),QRCode的内容如图6所示。生成的QRCode保存在D own l o a d目录中,前端可以通过请求/Download路由调用后台的Download方法下载二维码。虽然行程码中的明文信息可以伪造,但是目前的计算能力还无法伪造数字签名。

本系统支持用户上传行程码,大型企业机构可以通过上传ZIP壓缩文件的方式批量校验行程码。Web应用的前端使用Axios与后端Java程序进行交互,实现文件上传、行程新增等功能。Web端的后端接收到上传文件后,通过文件类型调用重载的两个analyse函数。ZIP文件解压后,将文件名存入数组,再利用循环调用校验函数调用QRCode中的analyseQR方法返回二维码的具体信息。系统会将其反序列化还原为对象,并根据对象的时间、姓名与编号等属性在数据库内综合查询得到私钥[9],然后调用ECDSA工具类中的verifyECDSA进行检验签名,ECDSA验签逻辑如图7所示,验签的结果以布尔值的形式通过/verify路由响应给Web应用的前端进行判断,并以弹窗的形式返回校验结果。

3.4 行程溯源模块

本系统使用Hyperledger Fabric在服务端搭建区块链,使用kafka共识机制,提高容错能力[10],共识模式如图8所示。首先使用Fabric框架生成网络证书与节点证书,证书包括网络连接使用的TLS(Transport Layer Security, 传输层安全性协议)证书与用于用户鉴权的CA证书,其中TLS证书也会被fabric-ca-client使用,然后使用CA创建授权用户身份与成员关系服务提供者MSP(Membership Service Providers)。使用TLS证书与MSP配置Peer和Order节点信息,Peer节点既可以保存并验证账本,又能运行智能合约,实现业务逻辑;Order节点用于验证交易并在验证成功之后提交交易至账本。本系统中的数据库为couchDB,couchDB可以对json数据进行富文本查询,使用Fabric2.4编写链码,在区块链中将链码作为外部服务,添加索引到链码之后启动网络,创建通道后启动链码。

4 结论(Conclusion)

在科技飞速发展的今天,使用区块链技术可以为生物医学研究提供一个安全的、去中心化的数据存储和共享平台,促进传染病的研究与防治。使用行程码帮助传染病溯源工作精确定位患者,降低了病毒的传染速度与规模,但恶意伪造行程码的开源项目给溯源工作的开展造成了巨大的困难。本系统采用Hyperledger Fabric联盟链技术与ECDSA公钥签名算法结合传统的JavaWeb技术实现了权限管理、区块溯源、数字签名等功能,同时具有行程溯源和校验的功能,使用本系统可以有效预防行程码的伪造行为。

作者简介:

蔡超萍(2002-),女,本科生.研究领域:信息安全.

康晓凤(1978-),女,硕士,副教授.研究领域:信息安全.

王可(2001-),男,本科生.研究领域:信息安全.

张百川(2002-),男,本科生.研究领域:信息安全.

王宇(2003-),男,本科生.研究领域:信息安全.

猜你喜欢

数字签名区块链
基于正交拉丁方理论的数字签名分组批量验证
浅析计算机安全防护中数字签名技术的应用
保险企业的区块链技术应用方向选择研究
区块链技术在金融领域的应用与前景研究
基于数字签名的QR码水印认证系统
区块链技术的应用价值分析
“区块链”的苟且、诗和远方
基于区块链技术的数字货币与传统货币辨析
数字签名简述
用“区块链”助推中企走出去