APP下载

基于区块链的医药防伪溯源系统研究

2020-02-19谢永斌

计算机工程与应用 2020年3期
关键词:医药客户端区块

禹 忠,郭 畅,谢永斌,薛 栋

西安邮电大学 通信与信息工程学院,西安710121

1 引言

医药溯源是指对药品的生产加工、物流运输、零售使用等过程进行记录追踪,这个工作需要药品供应链上下游各方的广泛参与。2018年由“有点甜”阿司匹林引出的21省份特大假药案暴露了目前医药防伪溯源系统的一大弊端,即目前医药防伪溯源系统的所有数据都存在中心数据库内,溯源认证采用中心记账模式,数据在上传、存储、查询等一系列操作中有被篡改的可能[1]。除此之外,目前医药防伪溯源系统还有两点不足:一是存储的数据信息不完整,消费者无法通过查询药品溯源码得到药品的物流信息及使用信息;二是数据信息的私密性无法保证,药品流通过程中参与者与最终消费者查询会得到相同的信息,容易造成消费者个人信息泄露。

区块链技术的出现为解决目前医药防伪溯源系统存在的数据易篡改、信息不完整以及信息私密性等问题提供一个新的思路[2]。首先,区块链所具有的去中心化的性质就是它的核心优势[3]。再结合密码学技术,将每一个区块通过区块头内的前一个区块的哈希值串联成链,且区块链上的每个节点都保存一份相同的账本,保证存储在区块链上的数据很难被篡改[4];其次,药品流通过程中的每个参与者都可以通过链码功能对药品信息进行记录,得到药品从生产到使用的全部信息,保证数据流的可靠性与完整性[5];最后,区块链中联盟链具有用户非授权不能接入的特点,作为联盟链代表的Fabric区块链平台具有基于证书认证的账号体系,各组织的账号是根据PKI(公钥基础设施)规范生成的一组证书和秘钥文件,在查询者发起查询请求时,Fabric侧会发起对提案消息的验证,包括对组织账号、通道信息及链码地址的认证,账号体系结合链码功能可以保证数据信息的私密性[6]。

本文提出的基于区块链的医药防伪溯源系统以药品作为溯源对象,以Fabric区块链平台为基础。首先,依据系统的功能需求将医药厂、经销商、医院作为组织加入到Fabric网络中,使用文件配置的方法完成Fabric环境的多机部署,使其具有链码的运行环境。然后开发并部署链码,在终端或者客户端将药品的生产、销售及使用信息通过各组织内经过认证的用户账号加密后上传到区块链。最后,开发客户端程序,消费者经由客户端通过药品溯源码发起查询请求,实现药品溯源信息在网页的查询。

2 相关工作

区块链技术自2008年因一个名为“中本聪”的学者发表的一篇有关比特币的文章开始出现至今[7],经历了区块链1.0“可编程货币”、区块链2.0“可编程金融”、区块链3.0“可编程社会”3个发展阶段[8],其应用场景也从最初的数字货币扩展到医疗、金融、教育、物流供应链等更多的领域[9]。2018年Caro等人提出一种集成区块链技术和物联网的可用于农产品供应链管理的完全分散式可追溯系统AgriBlockIoT,此系统设计并部署一个“从农场到餐桌”的经典食品可追溯场景,分别使用Ethereum和Hyperledger Sawtooth两种不同的区块链平台实现,并根据延迟、CPU负载和网络的使用情况对两种系统性能进行分析评估和比较。此系统将整个农产品供应链中物联网设备产生的有效数据信息存储到底层的区块链中,利用区块链技术保证交易记录的容错性、不变性、透明性和可追溯性[10]。同年Figorilli等人结合RFID传感器技术和区块链技术实现一个区块链架构内的木材链追溯系统,此系统将可追溯信息及木材质量相关信息整合到一个在线系统中,利用区块链技术去中心化和分布式存储的特点安全存储数据信息及交易记录,实现木材从立木到最终用户的电子溯源[11]。2019年Lin等人提出并在以太坊上开发了一种基于区块链和EPC信息服务的食品安全溯源系统,此系统利用区块链技术可追溯、时间戳及防篡改的特点结合智能合约和共识机制对整个食品供应链中的有效数据进行准确记录、共享及特定追踪,防止信息交互过程发生数据篡改和信息泄露等问题,用于有效检测和预防食品安全问题并追究责任[12]。

相比以上对农产品、木材及食品溯源的重视,医药产品的重要性也不容置疑,所以一个安全可靠的医药防伪溯源系统是必需的。2010年Huang等人提出的基于RFID的监管可追溯系统,其具有的电子谱系和可追溯性不仅有益于医疗管理人员和患者,而且有益于供应链上的其他参与者[13]。2016年蔡勇等提出一种基于二维码的中药质量可追溯系统,此系统能对药品的生产、加工及流通过程等外在信息和中药内在质量变化进行追溯[14]。2018年Benatia等人通过对几种产品追溯工作的比较研究,提出一种基于大数据技术的数据采集、存储、分析和可视化的数据管理系统,可以确保不同供应链参与者之间的系统互操作性[15]。以上关于医药的溯源系统都有自己的优势,但不能同时满足数据存储去中心化、信息全面且防篡改以及信息私密性这三个要求。而区块链技术在溯源系统的应用中具有独特优势:(1)区块链技术的去中心化和分布式存储特性可保证数据信息的公开透明性和数据流的完整可靠性;(2)区块链技术可追溯和数据防篡改的特点可以有效解决供应链中的假冒伪劣问题;(3)区块链技术数据防篡改和时间戳的特点可以实现举证和追责,解决各参与方的纠纷。结合区块链的技术优势和目前医药防伪溯源系统的不足,本文提出了一种基于区块链的医药防伪溯源系统。

此系统针对目前医药防伪溯源系统的不足之处有如下创新:(1)利用区块链技术解决传统医药溯源系统存在的数据存储中心化易篡改问题,保证药品数据的可靠性。(2)结合区块链技术和链码功能加入药品的流通信息和使用信息,保证药品数据流的完整性。(3)利用Fabric基于证书认证的账号体系结合链码功能保证数据信息的私密性。

3 系统模型

3.1 系统流程

图1展示的是系统的总体设计流程:包括Fabric网络环境搭建、链码开发、客户端开发及药品信息的上传与查询。其中具体流程如下:

①Fabric环境多机部署及链码开发:根据系统的功能需求部署Fabric环境,系统环境配置有三个组织,分别对应医药厂、经销商和医院三个现实场景,且三个组织的节点加入同一个通道,每个组织的节点上安装不同的链码以实现不同组织对药品不同操作功能的需求。

②药品信息上传:药品在医药厂被生产和包装,出厂时药品包装上会有唯一的药品溯源码。在药品流通到医药厂、经销商和医院三个组织时,根据各组织节点上安装链码的功能,以药品溯源码为键,在终端或客户端用各个组织内经过认证的用户账号分别将药品的生产信息、流通信息及使用信息上传到Fabric区块链。

③药品溯源信息查询:消费者在购买或使用药品后,使用经过组织3认证的用户账号登录区块链医药防伪溯源平台,输入药品溯源码,即可跳转至药品溯源信息显示界面,得到药品从生产到使用各个阶段的溯源信息,此过程仍通过链码3实现。

3.2 系统架构

本文系统架构模型包括Fabric网络环境模块、智能合约模块和Web服务及客户端开发模块三个部分[16]。具体架构设计如图2所示。

图1 系统流程图

图2 系统架构模型

Fabric网络环境模块包括数据层和网络层,它的功能是对数据采集部分采集到的药品数据进行存储。其中数据层是区块链的核心部分,用于将药品流通过程中产生的数据加密后上传到区块链[17];网络层是Fabric区块链平台信息传输的基础,包括共识机制、P2P网络及网络中的数据验证机制[18];数据采集部分需要采集的数据包括药品的生产信息、物流信息及使用信息,其采集数据的具体分类如图3所示。此处显示的药品信息即为系统需要上传和查询所得的信息。

图3 采集数据的具体分类

智能合约模块指的是合约层,是系统的核心,封装的是能够实现系统功能的智能合约[19]。Fabric上的智能合约又被人称为链码(Chaincode),是一段可以在Fabric区块链平台上进行验证,存储和执行等操作的代码,而且链码还有与Fabric网络进行交互的功能。

Web服务及客户端开发模块包括应用层和用户层,使消费者及药品流通过程的各参与者与Fabric区块链平台进行交互,为用户提供简洁的互动界面[20]。其中应用层包括输入接口和各种信息查询入口;用户层面向用户或商家,包括药品流通过程中各个参与者。

4 系统功能实现

医药防伪溯源系统的完成需要Fabric网络环境、智能合约和Web服务及客户端开发三个模块功能的协同实现,下文将会详细介绍各个模块功能。

4.1 Fabric网络环境模块

Fabric网络环境模块的主要功能是创建系统所需的组织节点,具有链码的运行环境,并将药品数据信息上传至区块链。根据图1所示的系统流程图部署Fabric环境,使用配置文件的方法创建组织节点,并通过Fabric的模块生成证书和数据文件以及系统和通道的创始块,最后开启orderer节点和peer节点,创建通道并将节点加入通道,完成医药防伪溯源系统的Fabric网络环境多机部署,以便用来实现药品数据的存储及查询,确保数据的真实性及完整性。根据系统需求,其配置信息中的组织标识符和组织ID及后续所安装的链码名字如表1所示。

表1 医药防伪溯源系统组织信息表

4.2 智能合约模块

基于区块链的医药防伪溯源系统的智能合约模块封装的是药品数据存储和查询的链码。一段完整的链码包含链码代码和链码管理命令两部分。链码代码是功能业务的承载体,负责具体的业务逻辑与身份认证。链码管理命令负责链码的部署,安装,调用等工作,命令中包含操作对象的数据信息;通过整体分析,运用在医药防伪溯源系统上的链码具体结构如图4所示[21]。

图4 链码结构图

其中代码层中的信息管理是为了与同一通道中的其他节点上的链码进行通信,并与客户端传来的命令进行交互,使链码中提供的节点地址被发现并通知;功能实现是根据系统功能需求编写代码实现药品信息的上传及查询。

管理命令层包含每一个操作对象的数据信息,链码名和通道名是此次操作命令需要指定的链码和通道;身份证明是指验证此次操作的用户身份,保证发起此次命令的用户是经过组织证书认证的;关键溯源信息则包括此药品从生产到使用的所有上传到区块链上的信息,或者是查询所需要提交的药品溯源码。

4.2.1 链码功能流程

Fabric的链码是客户端与Fabric网络之间的桥梁,本次医药防伪溯源系统设计中的链码使用Go语言开发。三个链码分别安装在不同组织的节点上,链码的功能包括上传药品信息、获取药品信息以及获取药品的交易记录。且安装在组织3节点上的链码还具有调用安装在组织1和组织2节点上链码的功能,以此来完成药品信息的溯源。

图5展示的是部署在组织3节点上的链码功能流程图。在链码部署成功后的实例化过程中会用到系统初始化Init方法,接下来是系统Invoke方法,主要功能是发起交易。在本次链码开发的Invoke方法下定义了功能类型functiontype、药品名称medicalname、药品数据medicaldata三个参数,功能类型对应以下四种接口的存储管理方法,针对此次系统设计所需要的四种功能:

(1)如果functiontype=putdata,则会使用Chaincode-StubInterface接口的PutState方法,此方法的功能是存储数据到Fabric账本中,负责接收并存储从客户端传递过来的药品使用信息的相关数据。

(2)如果functiontype=getdata,则会使用Chaincode-StubInterface接口的GetState方法,此方法的功能是从Fabric账本中获取指定数据,并将获取的数据交给链码处理,可以负责验证通过功能(1)存储的数据是否存在于Fabric账本中。

(3)如果functiontype=gethistory,则会使用Chaincode-StubInterface接口的GetHistoryForKey方法,此方法的功能是获取指定键的历史记录,此系统中以某个药品溯源码为指定键进行查询来获取此药品的历史记录。

(4)如果functiontype=getmedicalhistory,则会使用ChaincodeStubInterface接口的GetHistoryForKey方法和调用其他链码InvokeChaincode方法,前者功能与功能(3)一样,后者的功能是调用安装在组织1和组织2节点上的链码,以保证通过执行功能(4)就可以得到指定药品从生产到使用的全部数据信息。

图5 链码功能流程图

如果功能方法不是以上四种,则直接返回空值;功能(3)和功能(4)执行后得到的键值数组切片要通过json.Marshal函数转换成json数组输出,以便后续数据在网页端的显示。

4.2.2 链码执行过程

系统功能的实现离不开链码的执行,药品的关键溯源信息也需要通过链码来存储和查询,在链码安装及实例化完成后,需要在终端或者客户端输入命令来调用链码。图6是链码执行的示意图,展示了在客户端发起药品溯源查询时链码具体的执行过程。

图6 链码执行示意图

①消费者通过客户端发起药品溯源查询请求。

②客户端的Fabric-SDK获取消费者(查询发起者)的身份认证证书。

③客户端与peer节点建立连接。

④客户端发送交易提案给Fabric的peer节点,背书节点显示查询流程提案开始。Fabric侧发起对提案消息的验证,包括对组织身份、通道信息及链码地址的认证。首先验证通道报头信息,其次检查发起者的签名信息,包括对发起者组织身份是否合法的认证以及对签名存在是否正确的认证。最后验证链码信息,包括对报头信息及链码名称的验证。

⑤背书节点提供流程提案交易号txid,Fabric侧按交易号检索事务并构建新的交易模拟器,背书节点开始模拟提案并提供交易号txid及通道id。随后启动链码(若链码正在运行,则不需要重新启动),其包括执行、设置链码提议、发送执行消息、Fabric侧处理链码消息及发送状态消息事务等一系列操作。

⑥启动的链码根据交易提案查询对应的账本,从缓存中获取链码所需要的数据,获取完成后通知并退出。

⑦peer节点退出链码的调用过程,Fabric侧完成事务模拟/查询执行,退出查询流程提案。区块链上的节点返回相应的信息,完成查询过程。

4.3 Web服务及客户端开发模块

基于区块链的医药防伪溯源系统的前端界面主要包括查询入口界面及信息显示界面。其中模块开发程序的主要功能是负责处理消费者在客户端发送的请求,并与Fabric区块链进行交互。总体来说,Web服务及客户端开发模块的两个主要功能就是在后台进行逻辑处理并收集数据以及在前端界面合理简洁的显示数据。

链码部署完成之后,通过编写客户端演示程序来模拟一个客户端发起交易请求,演示程序由Node.js来编写。其中Node.js提供的http模块主要作用就是搭建http服务端和客户端。此次客户端开发指定http服务启动在3000端口,在终端输入命令开启浏览器,启动成功之后在浏览器中输入指定网址来进行医药溯源。

以一次药品查询为例,消费者在客户端发起查询请求,客户端会根据查询发起者的地址信息进行服务器请求,服务器端在接收请求后会运行Web服务代码调用Fabric区块链上的链码进行数据查询。此时还会对登录客户端的用户账号进行认证,经过认证的具有不同的账号的请求指令会指向不同的链码地址,得到不同的查询结果。之后服务器端会把处理得到的药品溯源信息数据返回到客户端,将查询结果显示给消费者。

5 结果与分析

5.1 溯源信息的查询

图7展示的是医药信息的查询入口界面,此时并未输入查询药品的药品溯源码medical_id,显示信息为“please enter the medical_id”。

图7 药品信息的查询界面

本次查询发起者的身份信息为“username:‘Admin’,mspid:‘Org3MSP’”,且发起请求所在的节点为peer0org3,当添加药品溯源码后再次发起溯源请求,部署在组织3节点上的链码就会启动,进而调用部署在前两个组织节点的链码,就能得到药品从生产到使用的全部溯源信息。此处以药品“香菊胶囊”为例,假设香菊胶囊的药品溯源码为0000001,按照图8所示在浏览器发起medical_id=0000001药品的查询请求,就可以得到香菊胶囊的溯源信息,具体数据如图8所示,可以看到查询结果中的药品溯源码与输入的药品溯源码是一致的。

5.2 系统性能分析

本次医药防伪溯源系统设计的环境搭建部分在虚拟机vmware中完成,操作系统为ubuntu16.4。虚拟机设置如下:内存为1 GB,处理器为2,硬盘为30 GB。图9展示的是查询命令发出后Fabric的响应时间,以其中50次查询结果为例。图中横坐标i表示第i次查询,纵坐标t表示每次查询Fabric的响应时间,具体响应时间处于动态变化中,与查询命令发出时刻的网络速率有关,其平均响应时间为22 ms,符合网络时延要求。当消费者在客户端进行药品溯源信息查询时,其结果显示界面不会出现卡顿或崩溃,可以获得较好的用户体验。

图8 药品的溯源信息显示界面

图9 查询时Fabric的响应时间

为了保证数据的隐私性,使消费者的个人信息不被泄露,基于区块链的医药防伪溯源系统可以根据查询发起者不同的身份信息来确定此次查询者可以调用的链码,并根据链码功能来获得不同的数据信息。被组织1和组织2认证的用户不能得到组织3节点存储的药品使用信息,以身份信息为“username:‘Admin’,mspid:‘Org2MSP’”的被组织2认证的查询者为例,此节点发出的信息查询只能调用部署在组织2节点上的链码,得到的是药品的流通信息,具体数据如图10所示。

图10 药品流通信息显示界面

基于区块链的医药防伪溯源系统具有较为简单的查询操作,较短的时间响应,非常完整的溯源信息以及非常高的隐私性。将此系统与相关工作中基于其他技术的三篇有关医药溯源的系统作比较可以得出如表2所示的结果。从表2可以看出,四篇文章中所设计的系统都能完成基本功能,即信息可追溯,参考文献[14]与本文所设计的系统具有更好的信息完整性。而且本文设计的基于区块链的医药防伪溯源系统借助于区块链技术所具有的去中心化、基于证书认证的账号体系等特性,使此系统在存储分散化程度及信息隐私性方面具有独特的优势。

表2 系统性能对比表

6 结论

本文从药品的实际应用场景出发,设计了一个基于区块链的医药溯源系统,以药品为溯源对象,以Fabric区块链平台为基础,对药品生产加工、物流运输及零售使用等过程进行数据记录追踪。通过客户端使用药品溯源码进行查询,得到此药品的溯源信息,且Fabric响应时间平均为22 ms,验证了设计方案的可行性与有效性。区块链技术与溯源技术的结合应用,进一步完善了医药防伪溯源系统的性能,利用区块链技术去中心化、数据难以篡改及交易可追溯的特点保证药品数据的可靠性,实现药品的全过程可追溯,且可追溯到链上的每一个参与者,提高医药防伪溯源信息的透明度,保证消费者能通过查询药品的溯源码了解到药品从生产到使用的全部信息。而且Fabric中基于证书认证的账号体系结合链码功能可以保证数据的隐私性,使消费者的个人信息不被泄露。另外在商业应用中,结合区块链技术的医药溯源系统可以为品牌背书,为医药企业增加信任值,提高医药企业竞争力,带来额外收益。除了对医药的溯源,区块链技术还可以与电子病历信息储存、共享慢性疾病诊疗、医疗欺诈与理赔方面相结合,为医疗卫生的良好发展提供更有利的保障。

猜你喜欢

医药客户端区块
区块链:一个改变未来的幽灵
区块链:主要角色和衍生应用
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
区块链+媒体业的N种可能
读懂区块链
大枢纽 云平台 客户端——中央人民广播电台的探索之路
传统医药类非遗
医药下一个十年 创新为王