李節
(東南大學網絡空間安全學院,江蘇南京,211100)
2020年1月,新冠疫情爆發。為了應對疫情,2020年2月11日浙江省杭州市率先啟用了健康碼防疫管理機制。健康碼是以真實數據為基礎,由市民網上申報,再經后端處理與移動通信校驗等手段生成屬于個人的二維碼。健康碼的推出旨在讓復工更加精準有序。目前高校職工、學生需要每天在本校的健康管理系統上進行健康申報,以獲得進出校園的權限。在這類疫情防控系統中,一般要求用戶輸入涉及個人隱私的信息,但這些數據在一定程度上暴露了個人隱私。同時,網絡上也出現了偽造或篡改健康碼的事件報道。
近年來得到廣泛關注的區塊鏈技術通過密碼學技術保證了數據的安全性,因此獲得了廣泛應用。最新的區塊鏈技術引入了智能合約(Smart Contract)概念,可通過合約對區塊鏈進行編程。本文設計并實現了一個基于區塊鏈技術的疫情防控登記系統,可在保護個人隱私的情況下達到疫情防控的效果。
為了用區塊鏈技術改進與優化我國的傳染病監測預警系統,黃銳等通過區塊鏈技術將現行的傳染病預警系統、網絡系統、公共衛生交換系統、醫院信息管理系統整合成一條疫情監測預警的協同鏈,建立兼顧實時性與準確性的傳染病早期聯合預警監測平臺;汪濤等建立利用健康碼區塊鏈對新型冠狀病毒肺炎疫情進行防控的模型,可通過該模型對疫情防控難易程度與成效進行評估;李龔亮等為更好地解決區塊鏈中所涉及的交易隱私問題,以超級賬本Fabric作為仿真平臺,研究一種運用零知識證明保護隱私的算法,測試結果表明該算法可廣泛應用于區塊鏈隱私保護場景中。如今隨著數以萬計的車輛接入車聯網,楊顏博等針對該問題進行分析,提出一種使用區塊鏈技術保護車聯網隱私的方案,該方案將車聯網數據存儲在分布式哈希存儲表中,利用區塊鏈實現用戶數據存儲、訪問及用戶撤銷等功能,從而提高車輛接入效率。
本文根據以往研究成果,使用哈希算法與超級賬本作為區塊鏈框架,設計并實現了一個疫情防控系統,可實現前端將用戶隱私加密后發送到后端,后端根據相應規則產生對應的通行碼。實驗結果表明,本文設計的系統具備可行性。
隨著疫情防控的常態化,各高校采取健康申報的方式進行人員管理。各高校都開發了本校獨立的健康管理系統,學生與教職工每天在打卡系統上傳自身的健康狀況、行程計劃等。但由于各高校之間的信息并不共享,因而對師生之間的跨校學術交流產生了一定阻礙。各大高校的數據只存儲在自己內部的數據庫中,形成了數據孤島。但如果將數據全部外包給第三方服務器,用戶隱私往往得不到保證。例如A學生想去B學校參加學術交流活動,通常需要進行大量申請工作。因此,推出一個區域內各大高校認可的,便于師生在學校之間進行正常學術交流的疫情防控系統成為了當務之急。
本文設計的系統將加密技術與區塊鏈技術相結合,在不泄露用戶明文隱私的情況下,實現用戶行程軌跡等個人信息在各聯盟成員之中的共享。系統需各大高校與用戶相互合作以保證存儲到區塊鏈中數據的真實性。如圖1所示。各大高校通過區塊鏈共享疫情防控信息,以實現高校之間互通互認。

Fig.1 Structure of the epidemic management system圖1 疫情管理系統結構
如圖1所示,本文應用層設計了3個用戶實體,即系統維護員、用戶與高校管理員,各大高校通過共同合作組成了聯盟鏈。
由于區塊鏈系統的存儲空間相對有限,本文使用了兩個數據庫來保存數據。MongoDB數據庫用于存儲不需要溯源的普通數據,如用戶數據等,架設在專門的服務器上。而需要溯源、防篡改的數據,如用戶行程、疫區信息等,則由“Fabric SDK”通過Goosip協議分發到架設在各高校的專用服務器上,用于同步與校驗區塊數據。系統維護員負責向區塊鏈中添加疫情、疫苗等相關數據。用戶負責上傳自身行程,用于每天的健康打卡。同時用戶如果想去別的高校,可進行通行申請,系統通過校驗疫區數據與用戶行程數據判斷其是否具備權限進入指定高校。在本文系統中,用戶的行程隱私將會進行加密處理,以密文方式存儲在區塊鏈上。
系統的用戶角色如圖2所示,主要分為普通用戶、維護管理員與高校管理員。本文假設用戶是誠實可信的,即用戶在知曉自身隱私數據會被加密保存后,將會誠實地上傳自身隱私信息。登錄后,用戶上傳自己的行程、個人身體狀況等信息。如果用戶想去其他學校,可在申請模塊進行申請,指定學校的管理員將進行審核。同時,由于國內疫苗正在大規模接種中,各高校也正在向學生及教職工宣傳疫苗接種的必要性,因此系統也應具備查詢疫苗接種地的功能,以便用戶獲得真實、可靠的疫苗相關信息。維護管理員負責向MongoDB寫入用戶信息,使用戶獲得一個賬號,而且可添加聯盟成員、疫情、疫苗接種地等信息。高校管理員通過查詢指定用戶的賬戶信息,查看用戶通行碼,即可知曉用戶通行狀態。

Fig.2 System function圖2 系統功能
基于區塊鏈技術的疫情管理系統各模塊詳細內容如下:
(1)系統管理。該模塊可添加用戶與高校成員,數據將保存在MongoDB數據庫中。用戶在登錄時進行校驗,根據相應屬性跳轉進入不同頁面。
(2)疫情模塊。該模塊為系統管理員維護區塊鏈數據而設置,在該模塊中,管理員可添加疫情、疫苗等信息,也可根據關鍵碼查詢用戶行程軌跡。
(3)用戶模塊。用戶模塊包含4個子模塊,分別是行程申報、疫區查詢、疫苗查詢與通行認證。行程申報模塊為用戶提供了個人隱私前端加密保存至區塊鏈的功能;疫區查詢模塊用于從區塊鏈中查詢當前疫情信息;疫苗查詢模塊用于查詢當前疫苗接種地情況;在通行認證模塊中,用戶輸入相關數據,如車次號、航班號等,經過加密后與后端區塊鏈中的數據進行匹配,生成通行狀態。
本系統是高校之間分享數據的平臺,對系統的要求不需要太高。高校的在校人數相對穩定,因此目前的區塊鏈超級賬本框架足以支持其并發量。在數據存儲方面,由于用戶上傳的大多是字符串等數據,不涉及文件上傳與下載,因此普通服務器足以承載。
針對系統的安全需求,首先為應對用戶的隱私泄露問題,本系統使用了哈希散列技術[15]。本文假設用戶誠實、可信,且積極配合防疫工作。用戶信息并不會直接被服務端作為明文存儲,因此用戶沒有必要進行偽造。因此,通過在前端直接對用戶行程進行Hash 散列,傳遞到區塊鏈進行保存會取得更好的效果。
本文設計的系統總體架構如圖3所示。

Fig.3 System architecture圖3 系統架構
應用層:在基于區塊鏈的疫情管理系統中,應用層主要負責界面展示,包括行程上傳、疫情共享等模塊的用戶操作界面與服務接口界面。
接口層:接口層主要為應用層提供調用智能合約的接口。所有需要寫入區塊鏈的數據結構都需要在智能合約中進行定義,并利用超級賬本提供的API,通過智能合約與賬本交互。
服務層:在超級賬本中,服務層負責提供由Go 語言實現的智能合約服務、疫情錄入服務以及疫情追溯服務。此外,調用服務層需要通過證書管理體系對聯盟鏈中的成員進行身份管理與驗證。
共識層:在超級賬本中,共識的達成依賴于排序節點。超級賬本并不采用“工作量證明”(Pow)這種耗費資源的算法,而是采取背書擔保的共識算法。通過各節點對數據的校驗及簽名認證,取得共識后將數據寫入賬本。
賬本層:存儲層負責存儲行程的密文數據。超級賬本提供歷史數據庫,可查詢數據的改動。根據最新的數據狀態(超級賬本中稱為世界狀態),即可查詢出最新的鍵值對。
3.2.1 系統管理模塊設計
系統管理模塊主要用來添加用戶與高校成員。本文采用非關系型數據庫MongoDB 存儲以上數據,得到如圖4所示的用戶E-R 圖。

Fig.4 The E-R diagram of user圖4 用戶E-R圖

Fig.5 The E-R diagram of school圖5 學校E-R圖
3.2.2 疫情維護模塊設計
疫情維護模塊主要用于維護管理員向區塊鏈中寫入的疫情相關數據,如疫情地區、疫情航班、車次號等。疫情E-R 圖如圖6所示。

Fig.6 The E-R diagram of epidemic圖6 疫情E-R圖
由于疫情信息需要寫入超級賬本中,因此需要設計相應的結構體。對于疫苗信息,為方便溯源,也設計相應的數據模型。疫苗E-R 圖如圖7所示。

Fig.7 The E-R diagram of vaccine圖7 疫苗E-R圖
3.2.3 用戶模塊設計
對用戶而言,主要需要進行行程申報,疫區、疫苗查詢以及通行認證。敏感信息將會被加密存儲至超級賬本中,用戶將在前端調用Jquery 提供的MD5 加密函數對明文直接進行加密,然后將密文發送到區塊鏈進行存儲。
對于通行認證部分,服務端首先從超級賬本中取出疫情明文,然后同樣進行MD5 加密,再與用戶的明文進行匹配,得出狀態碼。高校管理員可根據用戶手機號查詢用戶通行狀態碼。用戶狀態認證流程如圖8所示。
3.2.4 智能合約設計

Fig.8 User status authentication process圖8 用戶狀態認證流程
所謂智能合約即鏈上代碼,其保證了結果的一致性。本文使用Go語言設計并實現了表1所列的智能合約函數,通過這些智能合約可實現用戶信息添加、系統數據管理、用戶狀態查詢等功能。
國際阿爾茨海默病協會預計,在全球范圍內,阿爾茨海默病患者的數量每20年將翻一番,到2050年,將有超過1.15億人患有此病。從今年開始,原本為期一天的“世界阿爾茨海默病日”將被延長至一個月。阿爾茨海默病帶來的人文主義思考,使今年的活動聚焦在減少對該病的歧視與恥辱感上。

Table1 Smart contract表1 智能合約
智能合約內的相關結構體已在前文作過介紹,智能合約的設計大部分只需調用超級賬本提供的3個API即可,分別是“GetState”、“PutState”、“GetHistoryState”,可向賬本寫入、讀取與查詢歷史數據。
本文設計了4個peer節點與一個order節點作為區塊鏈底層網絡。由于超級賬本需要MSP證書才能加入網絡進行交易,而超級賬本中想要生成滿足MSP配置的證書,可通過“OpenSSL”或使用“Cryptogen”工具及“Hyperledger Fabric CA”組件,本文選擇第二種方式生成成員身份配置信息。為了使用Cryptogen工具,首先編寫“crypto-config.yaml”配置節點,接下來通過配置configtx.yaml文件指定區塊大小、出塊時間、創世區塊等,之后編寫Docker的配置文件“docker-compose.yaml”,在文件中指定了組織網絡拓撲與對應鏡像文件之間的映射關系。
最后編寫SDK,并完成如下內容:①加載本地配置文件,嘗試發現網絡中的資源;②獲取用戶身份;③對網絡內的通道進行操作或加入通道;④注冊并監聽指定通道內的事件;⑤對通道內的鏈碼進行操作。
4.2.1 登錄界面
系統登錄界面如圖9所示。

Fig.9 System log-in interface圖9 系統登錄界面
根據前端用戶輸入的數據,服務端會從Mongodb中查找對應卡號的用戶是否為管理員屬性。如果是管理員屬性則跳轉到管理員界面,如果是普通用戶屬性,則跳轉到普通用戶界面,如圖10所示。

Fig.10 Common user interface圖10 普通用戶界面
用戶數據上傳界面如圖11所示,數據將會通過服務端調用智能合約的Addregion函數,將其寫入超級賬本中。

Fig.11 User information uploading interface圖11 用戶數據上傳界面
4.2.2 通行認證信息輸入界面
如圖12所示,在前端使用通行認證功能需要填寫對應信息。
根據前文所述的健康校驗流程,以用戶“lijie”為例,系統可生成通行碼如圖13所示。

Fig.12 Pass certification information input interface圖12 通行認證信息輸入界面

Fig.13 Access code圖13 通行碼
本文通過將哈希函數與區塊鏈技術相結合,設計并實現了一個基于區塊鏈技術的疫情管理系統。系統測試結果表明,本文設計的系統可有效保護用戶的個人隱私信息,同時達到防疫的效果。下一步本文將探索如何將零知識證明技術與防疫相結合,以達到更好的數據隱私保護效果。