李曼玉,于 瓅
(安徽理工大学 计算机科学与工程学院,安徽 淮南 232000)
近些年,随着医疗改革不断推进,药品作为医疗环节中必不可少的组成部分持续受到关注,不合格药品和假药严重危害人民群众的生命健康和合法权益。 为此,国家也对药品管理制定了专门的法律,对药品的监管和追溯进行严格规定。 随着数字化进程的加速,提高药品追溯能力、可视化过程以确保药品安全成为当务之急。
区块链的时间戳、数字签名、默克尔树等技术对保障数据的真实性、有效性以及可追溯性提供支撑。 消费者根据追溯码可实现药品从生产、运输再到销售的全过程查询。 为了避免储存、运输过程中的不正确操作,可能导致药品出现不合格现象,冷链运输药品包装上放置温度传感器以及RFID 标签进行定时监控,上传流通过程中某一时刻某一地点的药品温度检测数据。每级药品包装上均设置药品追溯码,患者通过药品装上的追溯码,即可查询药品的生产信息、流通信息、使用信息,数字化药品流通过程让患者看得见、看得清。
传统医药供应链存在信息孤岛、信任缺失、责任界定混乱等问题,基于区块链的药品追溯系统为了保证安全与隐私性,不适合存储在公有链中,且始终存储所有药品交易数据系统会导致存储压力过大等问题。对此本文对药品追溯系统的不足之处做出以下改进:一是基于Fabric 联盟链进行存储,基于PBFT 算法达成共识,解决传统依赖中心化系统导致环节间缺乏信任的问题。 二是应用物联网技术以实现智能化识别、定位、温度监控,通过物联网技术进行数据读写,减少人工操作,保证数据的真实性、全面性。三是区块链结合星际文件系统(IPFS)对患者公开数据及其他数据进行存储,并生成哈希文件地址与索引作为交易存入区块,减轻区块链数据存储负担,实现数据的存储扩展。
随着区块链技术的发展,区块链被应用于数据共享、数据追溯以及数据隐私保护。 刘耀宗等人提出了一种基于区块链技术的RFID 大数据溯源安全模型,将RFID 与区块链技术结合,形成了去中心化的溯源链[1]。 倪卫红等构建基于区块链的温度可控的防疫应急物资冷链供应体系,将物联网技术应用于冷链医药品的温度监控[2]。 Chen 提出了一个基于物联网的可追溯药品防伪管理系统,将物联网技术应用在药品研发、认证、生产到销售全过程[3]。 禹忠等提出了一种基于 Fabric 区块链平台开发的 Go 语言开发链码,实现用户对药品在网页上查询的医药防伪溯源系统[4]。 Uddin 提出了一个 Medledger 框架来解决使用区块链技术进行药物追溯的问题,具体介绍所有参与实体使用区块链链码进行协作实现药品注册、转移和跟踪的过程[5]。 Wang 将区块链和星际文件系统(IPFS)结合应用在中药溯源系统,通过水平和垂直两个维度减轻区块链的规模,提高验证效率,解决区块链信息爆炸问题[6]。
区块链本质是分布式数据库[7],其运用了多种跨学科技术,其中利用按照时间顺序排列的链式数据结构来存储数据;利用共识机制在无可信中心节点时分布节点达成一致;利用密码学保证数据的不可篡改性;利用智能合约[8]加载合同或法律为可执行程序。 区块结构如图 1 所示。
图1 区块结构
区块链根据其去中心化的程度划分为公有链、联盟链和私有链。 公有链的代表有比特币和以太坊,允许任何人或实体均可以加入和参与到公有链的建设上,没有准入限制,实现完全的去中心化。联盟链是有一定的准入机制,加入该区块链需要授权认证身份,具有一定的隐私性,适合医疗机构行业内使用,属于部分去中心化。 私有链高度限制写入与读取权限,不对外部公开。
区块链技术的发展到现在可分为三个阶段:以比特币为代表的区块链1.0,主要应用在数字货币体系上;以以太坊为代表的区块链2.0,主要应用在金融领域;以 Hyperledger 为代表的区块链 3.0,可为不同行业提供去中心化方案。
区块链中节点拥有平等地位,通过共识机制使得节点之间相互信任。 PBFT 算法[9]中,当恶意节点为f,正常节点至少为 2f+1,全部节点则至少为 3f+1。PBFT 算法工作过程如图 2 所示。
图2 PBFT 共识过程
(1)请 求(Request): 客 户 端 client 向 主 节 点 0 发送请求并签名;
(2)预准备阶段(Pre-prepare):主节点 0 收到客户端的请求,校验数字签名是否正确,正确则主节点 0 添加视图编号到 pre-prepare 消息,对消息签名并广播;
(3)准备阶段(Prepare):非主节点 i 收到 pre-prepare 消息并进行验证,确认消息合法后,非主节点i将节点编号i 写入 prepare 签名并广播;
(4)提交阶段(Commit):非主节点收到至少 2f+1个节点的合法 prepare 消息时,则签名 commit 消息并广播;
(5)回复阶段(Reply):某个节点收到至少 2f+1个合法的commit 消息时执行客户端请求,将请求结果写入reply 消息,并签名返回给客户端,客户端得到至少 f+1 个 reply 消息,则请求已经得到共识。
区块链技术在网络中采用P2P 协议进行通信。区别于传统的C/S 模式,扁平化的拓扑结构没有中心节点,节点之间地位平等,每个节点(peer)既是请求者也是应答者,承担交易的验证、交易的传播等作用。 每个节点将链上的数据保存至本地,实现分布式存储。
随着区块链数据的增长,全部节点备份数据产生了巨大的存储代价,通过链上链下存储结合,链下用IPFS 星际文件系统存储,对企业数据与交易数据分流,一定程度上减轻节点冗余备份量。 首先,判断无需对患者公开却需要对监管方公开的数据。 然后,使用AES 算法进行加密,上传的数据打包存入IPFS 星际文件系统中, 将哈希地址与企业ID 索引一起作为交易存放,通过PBFT 达成共识保存。 最后,直接上传患者公开数据至区块链,达成一致后实现存储。
监管机构和患者根据药品的追溯码对药品进行查询。 监管机构查询企业信息时,通过企业 ID 查询区块获取IPFS 文件地址,通过文件地址获取密文,然后向企业节点请求密钥,节点验证监管方身份后将密钥传输给监管机构,监管方根据密钥解密文件,通过对比计算文件哈希值和区块链中存储的哈希值来判断文件是否被篡改,如图3 所示。
图3 数据存储流程
系统交易流程的Client 节点主要完成数据上传任务,由系统中药品生产企业、配送企业、使用单位负责,Client 提出交易传送至 Peer 节点。Peer 节点负责存储和同步账本,Peer 节点分为 Endorser 和 Committer,Endorser 背书节点模拟 Client 提交的交易,然后将结果签名并返回。 Client 将响应结果提交给Orderer 节点,Orderer 节点负责接收交易及对交易进行全排序,并将一批交易数据打包成新的区块提交给Committer 节点。 Committer 节点在接受区块后,验证接收区块中的所有交易,验证通过则写入Ledger 账本,加入本地区块链并改写世界状态。 交易流程如图 4 所示。
图4 交易流程
药品溯源的参与方有药品生产企业、配送单位和使用单位。 药品追溯系统总设计模块主要包括用户注册模块、药品信息上传模块、药品信息查询模块,如图 5 所示。
图5 模块功能结构
用户注册模块负责节点加入与退出,通过实现对所有参与节点认证审核加入区块链。 药品信息上传模块的数据采集以物联网技术为主,主要通过传感器、射频识别等技术将药品与互联网连接起来,实现自动采集物理世界原始数据,实现对外部世界的感知和识别,减少人工干预,确保药品数据的真实性、精准性[10]。 需要冷链运输的药品部署温度传感器和RFID 标签,采集温度数据、位置数据和时间数据,保证对冷链药品的运输环境的监控。 交易信息上传至区块链,企业信息存储至IPFS,出现问题时,能够通过追溯系统快速召回问题药品并查询到具体用药的患者,统计药品造成影响范围以及危害程度,保障人民健康,利于市场监管。
Fabric 将链码(Chaincode)打包部署在 Peer 节点上。 患者通过唯一追溯码获取药品的生产信息、物流信息以及使用信息,由于患者流动性大,不作为节点加入区块链中。 生产厂家部署药品信息合约,判断合约的拥有者是否是生产商,DTC 为药品的唯一追溯码, 判断 DTC 是否被使用, 添加药品信息,如追溯码、药品名、时间戳、生产日期、CNDC(国家药品标识码)、剂型、有效日期以及药品状态等。 药品信息上传的伪代码如下:
配送企业部署运输信息合约,判断合约的拥有者是否是配送企业,判断 DTC 是否存在,DTC 存在且运输单号为空,则添加运输信息(如追溯码、配送企业唯一标号、订单号、发货地址、收货地址、时间戳、发货数量、药品状态等)。 物流信息上传伪代码如下:
使用单位部署使用信息合约,判断合约的拥有者是否是使用单位,判断DTC 和运输单号是否存在,DTC 和运输单号存在且发药时间为空,则添加使用信息(如追溯码、使用单位唯一编码、药品分发时间、开药医生、患者医保卡号、时间戳等)。使用信息上传伪代码如下:
本文根据现阶段药品追溯的不足,采用物联网技术采集数据,采用区块链技术实现分布式存储数据,智能合约自动处理数据,采用 Fabric 身份认证筛除恶意节点以保证数据安全性,采用Fabric 结合星际文件系统存储数据。 本文提出的药品追溯方案解决了中心化系统中参与者的相互信任问题,降低了人工参与的程度,减轻了区块链的数据存储负担。 区块链技术保证了数据共享的真实性、不可篡改性、可追溯性,但仍有地方需要深入研究,如隐私数据实现可搜索加密带来的安全问题,数据存储负担的存储扩展问题,影响共识速度、性能输出以及安全性的共识算法改进问题。 未来将进一步优化区块链的存储结构,以更好地实现医疗数据的存储共享。