李節(jié)
(東南大學網(wǎng)絡空間安全學院,江蘇南京,211100)
2020年1月,新冠疫情爆發(fā)。為了應對疫情,2020年2月11日浙江省杭州市率先啟用了健康碼防疫管理機制。健康碼是以真實數(shù)據(jù)為基礎,由市民網(wǎng)上申報,再經(jīng)后端處理與移動通信校驗等手段生成屬于個人的二維碼。健康碼的推出旨在讓復工更加精準有序。目前高校職工、學生需要每天在本校的健康管理系統(tǒng)上進行健康申報,以獲得進出校園的權(quán)限。在這類疫情防控系統(tǒng)中,一般要求用戶輸入涉及個人隱私的信息,但這些數(shù)據(jù)在一定程度上暴露了個人隱私。同時,網(wǎng)絡上也出現(xiàn)了偽造或篡改健康碼的事件報道。
近年來得到廣泛關(guān)注的區(qū)塊鏈技術(shù)通過密碼學技術(shù)保證了數(shù)據(jù)的安全性,因此獲得了廣泛應用。最新的區(qū)塊鏈技術(shù)引入了智能合約(Smart Contract)概念,可通過合約對區(qū)塊鏈進行編程。本文設計并實現(xiàn)了一個基于區(qū)塊鏈技術(shù)的疫情防控登記系統(tǒng),可在保護個人隱私的情況下達到疫情防控的效果。
為了用區(qū)塊鏈技術(shù)改進與優(yōu)化我國的傳染病監(jiān)測預警系統(tǒng),黃銳等通過區(qū)塊鏈技術(shù)將現(xiàn)行的傳染病預警系統(tǒng)、網(wǎng)絡系統(tǒng)、公共衛(wèi)生交換系統(tǒng)、醫(yī)院信息管理系統(tǒng)整合成一條疫情監(jiān)測預警的協(xié)同鏈,建立兼顧實時性與準確性的傳染病早期聯(lián)合預警監(jiān)測平臺;汪濤等建立利用健康碼區(qū)塊鏈對新型冠狀病毒肺炎疫情進行防控的模型,可通過該模型對疫情防控難易程度與成效進行評估;李龔亮等為更好地解決區(qū)塊鏈中所涉及的交易隱私問題,以超級賬本Fabric作為仿真平臺,研究一種運用零知識證明保護隱私的算法,測試結(jié)果表明該算法可廣泛應用于區(qū)塊鏈隱私保護場景中。如今隨著數(shù)以萬計的車輛接入車聯(lián)網(wǎng),楊顏博等針對該問題進行分析,提出一種使用區(qū)塊鏈技術(shù)保護車聯(lián)網(wǎng)隱私的方案,該方案將車聯(lián)網(wǎng)數(shù)據(jù)存儲在分布式哈希存儲表中,利用區(qū)塊鏈實現(xiàn)用戶數(shù)據(jù)存儲、訪問及用戶撤銷等功能,從而提高車輛接入效率。
本文根據(jù)以往研究成果,使用哈希算法與超級賬本作為區(qū)塊鏈框架,設計并實現(xiàn)了一個疫情防控系統(tǒng),可實現(xiàn)前端將用戶隱私加密后發(fā)送到后端,后端根據(jù)相應規(guī)則產(chǎn)生對應的通行碼。實驗結(jié)果表明,本文設計的系統(tǒng)具備可行性。
隨著疫情防控的常態(tài)化,各高校采取健康申報的方式進行人員管理。各高校都開發(fā)了本校獨立的健康管理系統(tǒng),學生與教職工每天在打卡系統(tǒng)上傳自身的健康狀況、行程計劃等。但由于各高校之間的信息并不共享,因而對師生之間的跨校學術(shù)交流產(chǎn)生了一定阻礙。各大高校的數(shù)據(jù)只存儲在自己內(nèi)部的數(shù)據(jù)庫中,形成了數(shù)據(jù)孤島。但如果將數(shù)據(jù)全部外包給第三方服務器,用戶隱私往往得不到保證。例如A學生想去B學校參加學術(shù)交流活動,通常需要進行大量申請工作。因此,推出一個區(qū)域內(nèi)各大高校認可的,便于師生在學校之間進行正常學術(shù)交流的疫情防控系統(tǒng)成為了當務之急。
本文設計的系統(tǒng)將加密技術(shù)與區(qū)塊鏈技術(shù)相結(jié)合,在不泄露用戶明文隱私的情況下,實現(xiàn)用戶行程軌跡等個人信息在各聯(lián)盟成員之中的共享。系統(tǒng)需各大高校與用戶相互合作以保證存儲到區(qū)塊鏈中數(shù)據(jù)的真實性。如圖1所示。各大高校通過區(qū)塊鏈共享疫情防控信息,以實現(xiàn)高校之間互通互認。
Fig.1 Structure of the epidemic management system圖1 疫情管理系統(tǒng)結(jié)構(gòu)
如圖1所示,本文應用層設計了3個用戶實體,即系統(tǒng)維護員、用戶與高校管理員,各大高校通過共同合作組成了聯(lián)盟鏈。
由于區(qū)塊鏈系統(tǒng)的存儲空間相對有限,本文使用了兩個數(shù)據(jù)庫來保存數(shù)據(jù)。MongoDB數(shù)據(jù)庫用于存儲不需要溯源的普通數(shù)據(jù),如用戶數(shù)據(jù)等,架設在專門的服務器上。而需要溯源、防篡改的數(shù)據(jù),如用戶行程、疫區(qū)信息等,則由“Fabric SDK”通過Goosip協(xié)議分發(fā)到架設在各高校的專用服務器上,用于同步與校驗區(qū)塊數(shù)據(jù)。系統(tǒng)維護員負責向區(qū)塊鏈中添加疫情、疫苗等相關(guān)數(shù)據(jù)。用戶負責上傳自身行程,用于每天的健康打卡。同時用戶如果想去別的高校,可進行通行申請,系統(tǒng)通過校驗疫區(qū)數(shù)據(jù)與用戶行程數(shù)據(jù)判斷其是否具備權(quán)限進入指定高校。在本文系統(tǒng)中,用戶的行程隱私將會進行加密處理,以密文方式存儲在區(qū)塊鏈上。
系統(tǒng)的用戶角色如圖2所示,主要分為普通用戶、維護管理員與高校管理員。本文假設用戶是誠實可信的,即用戶在知曉自身隱私數(shù)據(jù)會被加密保存后,將會誠實地上傳自身隱私信息。登錄后,用戶上傳自己的行程、個人身體狀況等信息。如果用戶想去其他學校,可在申請模塊進行申請,指定學校的管理員將進行審核。同時,由于國內(nèi)疫苗正在大規(guī)模接種中,各高校也正在向?qū)W生及教職工宣傳疫苗接種的必要性,因此系統(tǒng)也應具備查詢疫苗接種地的功能,以便用戶獲得真實、可靠的疫苗相關(guān)信息。維護管理員負責向MongoDB寫入用戶信息,使用戶獲得一個賬號,而且可添加聯(lián)盟成員、疫情、疫苗接種地等信息。高校管理員通過查詢指定用戶的賬戶信息,查看用戶通行碼,即可知曉用戶通行狀態(tài)。
Fig.2 System function圖2 系統(tǒng)功能
基于區(qū)塊鏈技術(shù)的疫情管理系統(tǒng)各模塊詳細內(nèi)容如下:
(1)系統(tǒng)管理。該模塊可添加用戶與高校成員,數(shù)據(jù)將保存在MongoDB數(shù)據(jù)庫中。用戶在登錄時進行校驗,根據(jù)相應屬性跳轉(zhuǎn)進入不同頁面。
(2)疫情模塊。該模塊為系統(tǒng)管理員維護區(qū)塊鏈數(shù)據(jù)而設置,在該模塊中,管理員可添加疫情、疫苗等信息,也可根據(jù)關(guān)鍵碼查詢用戶行程軌跡。
(3)用戶模塊。用戶模塊包含4個子模塊,分別是行程申報、疫區(qū)查詢、疫苗查詢與通行認證。行程申報模塊為用戶提供了個人隱私前端加密保存至區(qū)塊鏈的功能;疫區(qū)查詢模塊用于從區(qū)塊鏈中查詢當前疫情信息;疫苗查詢模塊用于查詢當前疫苗接種地情況;在通行認證模塊中,用戶輸入相關(guān)數(shù)據(jù),如車次號、航班號等,經(jīng)過加密后與后端區(qū)塊鏈中的數(shù)據(jù)進行匹配,生成通行狀態(tài)。
本系統(tǒng)是高校之間分享數(shù)據(jù)的平臺,對系統(tǒng)的要求不需要太高。高校的在校人數(shù)相對穩(wěn)定,因此目前的區(qū)塊鏈超級賬本框架足以支持其并發(fā)量。在數(shù)據(jù)存儲方面,由于用戶上傳的大多是字符串等數(shù)據(jù),不涉及文件上傳與下載,因此普通服務器足以承載。
針對系統(tǒng)的安全需求,首先為應對用戶的隱私泄露問題,本系統(tǒng)使用了哈希散列技術(shù)[15]。本文假設用戶誠實、可信,且積極配合防疫工作。用戶信息并不會直接被服務端作為明文存儲,因此用戶沒有必要進行偽造。因此,通過在前端直接對用戶行程進行Hash 散列,傳遞到區(qū)塊鏈進行保存會取得更好的效果。
本文設計的系統(tǒng)總體架構(gòu)如圖3所示。
Fig.3 System architecture圖3 系統(tǒng)架構(gòu)
應用層:在基于區(qū)塊鏈的疫情管理系統(tǒng)中,應用層主要負責界面展示,包括行程上傳、疫情共享等模塊的用戶操作界面與服務接口界面。
接口層:接口層主要為應用層提供調(diào)用智能合約的接口。所有需要寫入?yún)^(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)都需要在智能合約中進行定義,并利用超級賬本提供的API,通過智能合約與賬本交互。
服務層:在超級賬本中,服務層負責提供由Go 語言實現(xiàn)的智能合約服務、疫情錄入服務以及疫情追溯服務。此外,調(diào)用服務層需要通過證書管理體系對聯(lián)盟鏈中的成員進行身份管理與驗證。
共識層:在超級賬本中,共識的達成依賴于排序節(jié)點。超級賬本并不采用“工作量證明”(Pow)這種耗費資源的算法,而是采取背書擔保的共識算法。通過各節(jié)點對數(shù)據(jù)的校驗及簽名認證,取得共識后將數(shù)據(jù)寫入賬本。
賬本層:存儲層負責存儲行程的密文數(shù)據(jù)。超級賬本提供歷史數(shù)據(jù)庫,可查詢數(shù)據(jù)的改動。根據(jù)最新的數(shù)據(jù)狀態(tài)(超級賬本中稱為世界狀態(tài)),即可查詢出最新的鍵值對。
3.2.1 系統(tǒng)管理模塊設計
系統(tǒng)管理模塊主要用來添加用戶與高校成員。本文采用非關(guān)系型數(shù)據(jù)庫MongoDB 存儲以上數(shù)據(jù),得到如圖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 疫情維護模塊設計
疫情維護模塊主要用于維護管理員向區(qū)塊鏈中寫入的疫情相關(guān)數(shù)據(jù),如疫情地區(qū)、疫情航班、車次號等。疫情E-R 圖如圖6所示。
Fig.6 The E-R diagram of epidemic圖6 疫情E-R圖
由于疫情信息需要寫入超級賬本中,因此需要設計相應的結(jié)構(gòu)體。對于疫苗信息,為方便溯源,也設計相應的數(shù)據(jù)模型。疫苗E-R 圖如圖7所示。
Fig.7 The E-R diagram of vaccine圖7 疫苗E-R圖
3.2.3 用戶模塊設計
對用戶而言,主要需要進行行程申報,疫區(qū)、疫苗查詢以及通行認證。敏感信息將會被加密存儲至超級賬本中,用戶將在前端調(diào)用Jquery 提供的MD5 加密函數(shù)對明文直接進行加密,然后將密文發(fā)送到區(qū)塊鏈進行存儲。
對于通行認證部分,服務端首先從超級賬本中取出疫情明文,然后同樣進行MD5 加密,再與用戶的明文進行匹配,得出狀態(tài)碼。高校管理員可根據(jù)用戶手機號查詢用戶通行狀態(tài)碼。用戶狀態(tài)認證流程如圖8所示。
3.2.4 智能合約設計
Fig.8 User status authentication process圖8 用戶狀態(tài)認證流程
所謂智能合約即鏈上代碼,其保證了結(jié)果的一致性。本文使用Go語言設計并實現(xiàn)了表1所列的智能合約函數(shù),通過這些智能合約可實現(xiàn)用戶信息添加、系統(tǒng)數(shù)據(jù)管理、用戶狀態(tài)查詢等功能。
國際阿爾茨海默病協(xié)會預計,在全球范圍內(nèi),阿爾茨海默病患者的數(shù)量每20年將翻一番,到2050年,將有超過1.15億人患有此病。從今年開始,原本為期一天的“世界阿爾茨海默病日”將被延長至一個月。阿爾茨海默病帶來的人文主義思考,使今年的活動聚焦在減少對該病的歧視與恥辱感上。
Table1 Smart contract表1 智能合約
智能合約內(nèi)的相關(guān)結(jié)構(gòu)體已在前文作過介紹,智能合約的設計大部分只需調(diào)用超級賬本提供的3個API即可,分別是“GetState”、“PutState”、“GetHistoryState”,可向賬本寫入、讀取與查詢歷史數(shù)據(jù)。
本文設計了4個peer節(jié)點與一個order節(jié)點作為區(qū)塊鏈底層網(wǎng)絡。由于超級賬本需要MSP證書才能加入網(wǎng)絡進行交易,而超級賬本中想要生成滿足MSP配置的證書,可通過“OpenSSL”或使用“Cryptogen”工具及“Hyperledger Fabric CA”組件,本文選擇第二種方式生成成員身份配置信息。為了使用Cryptogen工具,首先編寫“crypto-config.yaml”配置節(jié)點,接下來通過配置configtx.yaml文件指定區(qū)塊大小、出塊時間、創(chuàng)世區(qū)塊等,之后編寫Docker的配置文件“docker-compose.yaml”,在文件中指定了組織網(wǎng)絡拓撲與對應鏡像文件之間的映射關(guān)系。
最后編寫SDK,并完成如下內(nèi)容:①加載本地配置文件,嘗試發(fā)現(xiàn)網(wǎng)絡中的資源;②獲取用戶身份;③對網(wǎng)絡內(nèi)的通道進行操作或加入通道;④注冊并監(jiān)聽指定通道內(nèi)的事件;⑤對通道內(nèi)的鏈碼進行操作。
4.2.1 登錄界面
系統(tǒng)登錄界面如圖9所示。
Fig.9 System log-in interface圖9 系統(tǒng)登錄界面
根據(jù)前端用戶輸入的數(shù)據(jù),服務端會從Mongodb中查找對應卡號的用戶是否為管理員屬性。如果是管理員屬性則跳轉(zhuǎn)到管理員界面,如果是普通用戶屬性,則跳轉(zhuǎn)到普通用戶界面,如圖10所示。
Fig.10 Common user interface圖10 普通用戶界面
用戶數(shù)據(jù)上傳界面如圖11所示,數(shù)據(jù)將會通過服務端調(diào)用智能合約的Addregion函數(shù),將其寫入超級賬本中。
Fig.11 User information uploading interface圖11 用戶數(shù)據(jù)上傳界面
4.2.2 通行認證信息輸入界面
如圖12所示,在前端使用通行認證功能需要填寫對應信息。
根據(jù)前文所述的健康校驗流程,以用戶“l(fā)ijie”為例,系統(tǒng)可生成通行碼如圖13所示。
Fig.12 Pass certification information input interface圖12 通行認證信息輸入界面
Fig.13 Access code圖13 通行碼
本文通過將哈希函數(shù)與區(qū)塊鏈技術(shù)相結(jié)合,設計并實現(xiàn)了一個基于區(qū)塊鏈技術(shù)的疫情管理系統(tǒng)。系統(tǒng)測試結(jié)果表明,本文設計的系統(tǒng)可有效保護用戶的個人隱私信息,同時達到防疫的效果。下一步本文將探索如何將零知識證明技術(shù)與防疫相結(jié)合,以達到更好的數(shù)據(jù)隱私保護效果。