李曼玉,于 瓅
(安徽理工大學 計算機科學與工程學院,安徽 淮南 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 結合星際文件系統存儲數據。 本文提出的藥品追溯方案解決了中心化系統中參與者的相互信任問題,降低了人工參與的程度,減輕了區塊鏈的數據存儲負擔。 區塊鏈技術保證了數據共享的真實性、不可篡改性、可追溯性,但仍有地方需要深入研究,如隱私數據實現可搜索加密帶來的安全問題,數據存儲負擔的存儲擴展問題,影響共識速度、性能輸出以及安全性的共識算法改進問題。 未來將進一步優化區塊鏈的存儲結構,以更好地實現醫療數據的存儲共享。