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