李曼玉,于 瓅
(安徽理工大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,安徽 淮南 232000)
近些年,隨著醫(yī)療改革不斷推進(jìn),藥品作為醫(yī)療環(huán)節(jié)中必不可少的組成部分持續(xù)受到關(guān)注,不合格藥品和假藥嚴(yán)重危害人民群眾的生命健康和合法權(quán)益。 為此,國(guó)家也對(duì)藥品管理制定了專(zhuān)門(mén)的法律,對(duì)藥品的監(jiān)管和追溯進(jìn)行嚴(yán)格規(guī)定。 隨著數(shù)字化進(jìn)程的加速,提高藥品追溯能力、可視化過(guò)程以確保藥品安全成為當(dāng)務(wù)之急。
區(qū)塊鏈的時(shí)間戳、數(shù)字簽名、默克爾樹(shù)等技術(shù)對(duì)保障數(shù)據(jù)的真實(shí)性、有效性以及可追溯性提供支撐。 消費(fèi)者根據(jù)追溯碼可實(shí)現(xiàn)藥品從生產(chǎn)、運(yùn)輸再到銷(xiāo)售的全過(guò)程查詢(xún)。 為了避免儲(chǔ)存、運(yùn)輸過(guò)程中的不正確操作,可能導(dǎo)致藥品出現(xiàn)不合格現(xiàn)象,冷鏈運(yùn)輸藥品包裝上放置溫度傳感器以及RFID 標(biāo)簽進(jìn)行定時(shí)監(jiān)控,上傳流通過(guò)程中某一時(shí)刻某一地點(diǎn)的藥品溫度檢測(cè)數(shù)據(jù)。每級(jí)藥品包裝上均設(shè)置藥品追溯碼,患者通過(guò)藥品裝上的追溯碼,即可查詢(xún)藥品的生產(chǎn)信息、流通信息、使用信息,數(shù)字化藥品流通過(guò)程讓患者看得見(jiàn)、看得清。
傳統(tǒng)醫(yī)藥供應(yīng)鏈存在信息孤島、信任缺失、責(zé)任界定混亂等問(wèn)題,基于區(qū)塊鏈的藥品追溯系統(tǒng)為了保證安全與隱私性,不適合存儲(chǔ)在公有鏈中,且始終存儲(chǔ)所有藥品交易數(shù)據(jù)系統(tǒng)會(huì)導(dǎo)致存儲(chǔ)壓力過(guò)大等問(wèn)題。對(duì)此本文對(duì)藥品追溯系統(tǒng)的不足之處做出以下改進(jìn):一是基于Fabric 聯(lián)盟鏈進(jìn)行存儲(chǔ),基于PBFT 算法達(dá)成共識(shí),解決傳統(tǒng)依賴(lài)中心化系統(tǒng)導(dǎo)致環(huán)節(jié)間缺乏信任的問(wèn)題。 二是應(yīng)用物聯(lián)網(wǎng)技術(shù)以實(shí)現(xiàn)智能化識(shí)別、定位、溫度監(jiān)控,通過(guò)物聯(lián)網(wǎng)技術(shù)進(jìn)行數(shù)據(jù)讀寫(xiě),減少人工操作,保證數(shù)據(jù)的真實(shí)性、全面性。三是區(qū)塊鏈結(jié)合星際文件系統(tǒng)(IPFS)對(duì)患者公開(kāi)數(shù)據(jù)及其他數(shù)據(jù)進(jìn)行存儲(chǔ),并生成哈希文件地址與索引作為交易存入?yún)^(qū)塊,減輕區(qū)塊鏈數(shù)據(jù)存儲(chǔ)負(fù)擔(dān),實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)擴(kuò)展。
隨著區(qū)塊鏈技術(shù)的發(fā)展,區(qū)塊鏈被應(yīng)用于數(shù)據(jù)共享、數(shù)據(jù)追溯以及數(shù)據(jù)隱私保護(hù)。 劉耀宗等人提出了一種基于區(qū)塊鏈技術(shù)的RFID 大數(shù)據(jù)溯源安全模型,將RFID 與區(qū)塊鏈技術(shù)結(jié)合,形成了去中心化的溯源鏈[1]。 倪衛(wèi)紅等構(gòu)建基于區(qū)塊鏈的溫度可控的防疫應(yīng)急物資冷鏈供應(yīng)體系,將物聯(lián)網(wǎng)技術(shù)應(yīng)用于冷鏈醫(yī)藥品的溫度監(jiān)控[2]。 Chen 提出了一個(gè)基于物聯(lián)網(wǎng)的可追溯藥品防偽管理系統(tǒng),將物聯(lián)網(wǎng)技術(shù)應(yīng)用在藥品研發(fā)、認(rèn)證、生產(chǎn)到銷(xiāo)售全過(guò)程[3]。 禹忠等提出了一種基于 Fabric 區(qū)塊鏈平臺(tái)開(kāi)發(fā)的 Go 語(yǔ)言開(kāi)發(fā)鏈碼,實(shí)現(xiàn)用戶(hù)對(duì)藥品在網(wǎng)頁(yè)上查詢(xún)的醫(yī)藥防偽溯源系統(tǒng)[4]。 Uddin 提出了一個(gè) Medledger 框架來(lái)解決使用區(qū)塊鏈技術(shù)進(jìn)行藥物追溯的問(wèn)題,具體介紹所有參與實(shí)體使用區(qū)塊鏈鏈碼進(jìn)行協(xié)作實(shí)現(xiàn)藥品注冊(cè)、轉(zhuǎn)移和跟蹤的過(guò)程[5]。 Wang 將區(qū)塊鏈和星際文件系統(tǒng)(IPFS)結(jié)合應(yīng)用在中藥溯源系統(tǒng),通過(guò)水平和垂直兩個(gè)維度減輕區(qū)塊鏈的規(guī)模,提高驗(yàn)證效率,解決區(qū)塊鏈信息爆炸問(wèn)題[6]。
區(qū)塊鏈本質(zhì)是分布式數(shù)據(jù)庫(kù)[7],其運(yùn)用了多種跨學(xué)科技術(shù),其中利用按照時(shí)間順序排列的鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù);利用共識(shí)機(jī)制在無(wú)可信中心節(jié)點(diǎn)時(shí)分布節(jié)點(diǎn)達(dá)成一致;利用密碼學(xué)保證數(shù)據(jù)的不可篡改性;利用智能合約[8]加載合同或法律為可執(zhí)行程序。 區(qū)塊結(jié)構(gòu)如圖 1 所示。
圖1 區(qū)塊結(jié)構(gòu)
區(qū)塊鏈根據(jù)其去中心化的程度劃分為公有鏈、聯(lián)盟鏈和私有鏈。 公有鏈的代表有比特幣和以太坊,允許任何人或?qū)嶓w均可以加入和參與到公有鏈的建設(shè)上,沒(méi)有準(zhǔn)入限制,實(shí)現(xiàn)完全的去中心化。聯(lián)盟鏈?zhǔn)怯幸欢ǖ臏?zhǔn)入機(jī)制,加入該區(qū)塊鏈需要授權(quán)認(rèn)證身份,具有一定的隱私性,適合醫(yī)療機(jī)構(gòu)行業(yè)內(nèi)使用,屬于部分去中心化。 私有鏈高度限制寫(xiě)入與讀取權(quán)限,不對(duì)外部公開(kāi)。
區(qū)塊鏈技術(shù)的發(fā)展到現(xiàn)在可分為三個(gè)階段:以比特幣為代表的區(qū)塊鏈1.0,主要應(yīng)用在數(shù)字貨幣體系上;以以太坊為代表的區(qū)塊鏈2.0,主要應(yīng)用在金融領(lǐng)域;以 Hyperledger 為代表的區(qū)塊鏈 3.0,可為不同行業(yè)提供去中心化方案。
區(qū)塊鏈中節(jié)點(diǎn)擁有平等地位,通過(guò)共識(shí)機(jī)制使得節(jié)點(diǎn)之間相互信任。 PBFT 算法[9]中,當(dāng)惡意節(jié)點(diǎn)為f,正常節(jié)點(diǎn)至少為 2f+1,全部節(jié)點(diǎn)則至少為 3f+1。PBFT 算法工作過(guò)程如圖 2 所示。
圖2 PBFT 共識(shí)過(guò)程
(1)請(qǐng) 求(Request): 客 戶(hù) 端 client 向 主 節(jié) 點(diǎn) 0 發(fā)送請(qǐng)求并簽名;
(2)預(yù)準(zhǔn)備階段(Pre-prepare):主節(jié)點(diǎn) 0 收到客戶(hù)端的請(qǐng)求,校驗(yàn)數(shù)字簽名是否正確,正確則主節(jié)點(diǎn) 0 添加視圖編號(hào)到 pre-prepare 消息,對(duì)消息簽名并廣播;
(3)準(zhǔn)備階段(Prepare):非主節(jié)點(diǎn) i 收到 pre-prepare 消息并進(jìn)行驗(yàn)證,確認(rèn)消息合法后,非主節(jié)點(diǎn)i將節(jié)點(diǎn)編號(hào)i 寫(xiě)入 prepare 簽名并廣播;
(4)提交階段(Commit):非主節(jié)點(diǎn)收到至少 2f+1個(gè)節(jié)點(diǎn)的合法 prepare 消息時(shí),則簽名 commit 消息并廣播;
(5)回復(fù)階段(Reply):某個(gè)節(jié)點(diǎn)收到至少 2f+1個(gè)合法的commit 消息時(shí)執(zhí)行客戶(hù)端請(qǐng)求,將請(qǐng)求結(jié)果寫(xiě)入reply 消息,并簽名返回給客戶(hù)端,客戶(hù)端得到至少 f+1 個(gè) reply 消息,則請(qǐng)求已經(jīng)得到共識(shí)。
區(qū)塊鏈技術(shù)在網(wǎng)絡(luò)中采用P2P 協(xié)議進(jìn)行通信。區(qū)別于傳統(tǒng)的C/S 模式,扁平化的拓?fù)浣Y(jié)構(gòu)沒(méi)有中心節(jié)點(diǎn),節(jié)點(diǎn)之間地位平等,每個(gè)節(jié)點(diǎn)(peer)既是請(qǐng)求者也是應(yīng)答者,承擔(dān)交易的驗(yàn)證、交易的傳播等作用。 每個(gè)節(jié)點(diǎn)將鏈上的數(shù)據(jù)保存至本地,實(shí)現(xiàn)分布式存儲(chǔ)。
隨著區(qū)塊鏈數(shù)據(jù)的增長(zhǎng),全部節(jié)點(diǎn)備份數(shù)據(jù)產(chǎn)生了巨大的存儲(chǔ)代價(jià),通過(guò)鏈上鏈下存儲(chǔ)結(jié)合,鏈下用IPFS 星際文件系統(tǒng)存儲(chǔ),對(duì)企業(yè)數(shù)據(jù)與交易數(shù)據(jù)分流,一定程度上減輕節(jié)點(diǎn)冗余備份量。 首先,判斷無(wú)需對(duì)患者公開(kāi)卻需要對(duì)監(jiān)管方公開(kāi)的數(shù)據(jù)。 然后,使用AES 算法進(jìn)行加密,上傳的數(shù)據(jù)打包存入IPFS 星際文件系統(tǒng)中, 將哈希地址與企業(yè)ID 索引一起作為交易存放,通過(guò)PBFT 達(dá)成共識(shí)保存。 最后,直接上傳患者公開(kāi)數(shù)據(jù)至區(qū)塊鏈,達(dá)成一致后實(shí)現(xiàn)存儲(chǔ)。
監(jiān)管機(jī)構(gòu)和患者根據(jù)藥品的追溯碼對(duì)藥品進(jìn)行查詢(xún)。 監(jiān)管機(jī)構(gòu)查詢(xún)企業(yè)信息時(shí),通過(guò)企業(yè) ID 查詢(xún)區(qū)塊獲取IPFS 文件地址,通過(guò)文件地址獲取密文,然后向企業(yè)節(jié)點(diǎn)請(qǐng)求密鑰,節(jié)點(diǎn)驗(yàn)證監(jiān)管方身份后將密鑰傳輸給監(jiān)管機(jī)構(gòu),監(jiān)管方根據(jù)密鑰解密文件,通過(guò)對(duì)比計(jì)算文件哈希值和區(qū)塊鏈中存儲(chǔ)的哈希值來(lái)判斷文件是否被篡改,如圖3 所示。
圖3 數(shù)據(jù)存儲(chǔ)流程
系統(tǒng)交易流程的Client 節(jié)點(diǎn)主要完成數(shù)據(jù)上傳任務(wù),由系統(tǒng)中藥品生產(chǎn)企業(yè)、配送企業(yè)、使用單位負(fù)責(zé),Client 提出交易傳送至 Peer 節(jié)點(diǎn)。Peer 節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)和同步賬本,Peer 節(jié)點(diǎn)分為 Endorser 和 Committer,Endorser 背書(shū)節(jié)點(diǎn)模擬 Client 提交的交易,然后將結(jié)果簽名并返回。 Client 將響應(yīng)結(jié)果提交給Orderer 節(jié)點(diǎn),Orderer 節(jié)點(diǎn)負(fù)責(zé)接收交易及對(duì)交易進(jìn)行全排序,并將一批交易數(shù)據(jù)打包成新的區(qū)塊提交給Committer 節(jié)點(diǎn)。 Committer 節(jié)點(diǎn)在接受區(qū)塊后,驗(yàn)證接收區(qū)塊中的所有交易,驗(yàn)證通過(guò)則寫(xiě)入Ledger 賬本,加入本地區(qū)塊鏈并改寫(xiě)世界狀態(tài)。 交易流程如圖 4 所示。
圖4 交易流程
藥品溯源的參與方有藥品生產(chǎn)企業(yè)、配送單位和使用單位。 藥品追溯系統(tǒng)總設(shè)計(jì)模塊主要包括用戶(hù)注冊(cè)模塊、藥品信息上傳模塊、藥品信息查詢(xún)模塊,如圖 5 所示。
圖5 模塊功能結(jié)構(gòu)
用戶(hù)注冊(cè)模塊負(fù)責(zé)節(jié)點(diǎn)加入與退出,通過(guò)實(shí)現(xiàn)對(duì)所有參與節(jié)點(diǎn)認(rèn)證審核加入?yún)^(qū)塊鏈。 藥品信息上傳模塊的數(shù)據(jù)采集以物聯(lián)網(wǎng)技術(shù)為主,主要通過(guò)傳感器、射頻識(shí)別等技術(shù)將藥品與互聯(lián)網(wǎng)連接起來(lái),實(shí)現(xiàn)自動(dòng)采集物理世界原始數(shù)據(jù),實(shí)現(xiàn)對(duì)外部世界的感知和識(shí)別,減少人工干預(yù),確保藥品數(shù)據(jù)的真實(shí)性、精準(zhǔn)性[10]。 需要冷鏈運(yùn)輸?shù)乃幤凡渴饻囟葌鞲衅骱蚏FID 標(biāo)簽,采集溫度數(shù)據(jù)、位置數(shù)據(jù)和時(shí)間數(shù)據(jù),保證對(duì)冷鏈藥品的運(yùn)輸環(huán)境的監(jiān)控。 交易信息上傳至區(qū)塊鏈,企業(yè)信息存儲(chǔ)至IPFS,出現(xiàn)問(wèn)題時(shí),能夠通過(guò)追溯系統(tǒng)快速召回問(wèn)題藥品并查詢(xún)到具體用藥的患者,統(tǒng)計(jì)藥品造成影響范圍以及危害程度,保障人民健康,利于市場(chǎng)監(jiān)管。
Fabric 將鏈碼(Chaincode)打包部署在 Peer 節(jié)點(diǎn)上。 患者通過(guò)唯一追溯碼獲取藥品的生產(chǎn)信息、物流信息以及使用信息,由于患者流動(dòng)性大,不作為節(jié)點(diǎn)加入?yún)^(qū)塊鏈中。 生產(chǎn)廠家部署藥品信息合約,判斷合約的擁有者是否是生產(chǎn)商,DTC 為藥品的唯一追溯碼, 判斷 DTC 是否被使用, 添加藥品信息,如追溯碼、藥品名、時(shí)間戳、生產(chǎn)日期、CNDC(國(guó)家藥品標(biāo)識(shí)碼)、劑型、有效日期以及藥品狀態(tài)等。 藥品信息上傳的偽代碼如下:
配送企業(yè)部署運(yùn)輸信息合約,判斷合約的擁有者是否是配送企業(yè),判斷 DTC 是否存在,DTC 存在且運(yùn)輸單號(hào)為空,則添加運(yùn)輸信息(如追溯碼、配送企業(yè)唯一標(biāo)號(hào)、訂單號(hào)、發(fā)貨地址、收貨地址、時(shí)間戳、發(fā)貨數(shù)量、藥品狀態(tài)等)。 物流信息上傳偽代碼如下:
使用單位部署使用信息合約,判斷合約的擁有者是否是使用單位,判斷DTC 和運(yùn)輸單號(hào)是否存在,DTC 和運(yùn)輸單號(hào)存在且發(fā)藥時(shí)間為空,則添加使用信息(如追溯碼、使用單位唯一編碼、藥品分發(fā)時(shí)間、開(kāi)藥醫(yī)生、患者醫(yī)??ㄌ?hào)、時(shí)間戳等)。使用信息上傳偽代碼如下:
本文根據(jù)現(xiàn)階段藥品追溯的不足,采用物聯(lián)網(wǎng)技術(shù)采集數(shù)據(jù),采用區(qū)塊鏈技術(shù)實(shí)現(xiàn)分布式存儲(chǔ)數(shù)據(jù),智能合約自動(dòng)處理數(shù)據(jù),采用 Fabric 身份認(rèn)證篩除惡意節(jié)點(diǎn)以保證數(shù)據(jù)安全性,采用Fabric 結(jié)合星際文件系統(tǒng)存儲(chǔ)數(shù)據(jù)。 本文提出的藥品追溯方案解決了中心化系統(tǒng)中參與者的相互信任問(wèn)題,降低了人工參與的程度,減輕了區(qū)塊鏈的數(shù)據(jù)存儲(chǔ)負(fù)擔(dān)。 區(qū)塊鏈技術(shù)保證了數(shù)據(jù)共享的真實(shí)性、不可篡改性、可追溯性,但仍有地方需要深入研究,如隱私數(shù)據(jù)實(shí)現(xiàn)可搜索加密帶來(lái)的安全問(wèn)題,數(shù)據(jù)存儲(chǔ)負(fù)擔(dān)的存儲(chǔ)擴(kuò)展問(wèn)題,影響共識(shí)速度、性能輸出以及安全性的共識(shí)算法改進(jìn)問(wèn)題。 未來(lái)將進(jìn)一步優(yōu)化區(qū)塊鏈的存儲(chǔ)結(jié)構(gòu),以更好地實(shí)現(xiàn)醫(yī)療數(shù)據(jù)的存儲(chǔ)共享。
網(wǎng)絡(luò)安全與數(shù)據(jù)管理2022年4期