檀鐘盛,陳春暉
(福建工程學(xué)院 互聯(lián)網(wǎng)經(jīng)貿(mào)學(xué)院,福建 福州 350118)
2019年發(fā)生Covid-19疫情,中國政府反應(yīng)迅速,采取果斷措施,其中健康碼就是措施之一。健康碼是一項可以安裝在智能手機(jī)上的軟件,個人可以實名認(rèn)證并填報健康狀況[1]?!敖】荡a”誕生于數(shù)字政府建設(shè)發(fā)達(dá)的杭州。杭州健康碼是依據(jù)《浙江省疫情防控責(zé)任令》,為解決疫情期間返工返崗及公共空間管控而采取的應(yīng)急性技術(shù)治理措施[2]。隨著疫情常態(tài)化,健康碼也出現(xiàn)長期存在的趨勢,但目前健康碼存在著以下問題:(1)信息不安全。主流健康碼平臺目前仍是中心化系統(tǒng),中心化平臺容易遭受外部攻擊。例如,北京健康寶就曾在疫情的高峰期,遭到境外網(wǎng)絡(luò)的攻擊。而且這樣的攻擊并不只有一次,早在北京冬奧會、殘奧會期間,健康寶就曾多次遭受境外攻擊,一旦這些外部攻擊成功,將會導(dǎo)致不可估量的損失;(2)各地健康碼相互不流通。在疫情防控中,健康碼幾乎等于身份通行證,然而目前由于數(shù)據(jù)不共享、地方政策不同等原因?qū)е赂鞯亟】荡a各不相同,互不相認(rèn),甚至出現(xiàn)同一省份出現(xiàn)省市兩級不同的健康碼,造成了碼上加碼,給交通樞紐的人群造成不便;(3)健康碼中私人隱私保護(hù)不足。健康碼數(shù)據(jù)中涉及姓名、身份證、聯(lián)系方式等大量敏感數(shù)據(jù),然而目前健康碼平臺五花八門,個人信息需要多次提交,泄露風(fēng)險高。尤其在疫情期間,確診患者信息泄露,極有可能導(dǎo)致社會歧視、網(wǎng)絡(luò)暴力等嚴(yán)重后果;(4)健康碼穩(wěn)定性。由于主流健康碼是中心化系統(tǒng),一旦系統(tǒng)發(fā)生故障,可能導(dǎo)致系統(tǒng)數(shù)小時不能正常使用,給市民造成極大不便;(5)健康碼職權(quán)濫用。健康碼作為政府防疫工作中的重要工具,已經(jīng)成為社會的普遍共識。在特殊的疫情時期,紅碼已經(jīng)成為禁止令,濫用紅碼是對國家公信力的損害。區(qū)塊鏈去中心化、可追溯、公開透明等特點為解決上述問題提供了技術(shù)支持,該文將區(qū)塊鏈技術(shù)與非對稱加密相結(jié)合,提出了一種基于區(qū)塊鏈技術(shù)的健康碼方案,并基于此方案構(gòu)建一個系統(tǒng)來驗證上述方案的可行性。
比特幣屬于區(qū)塊鏈(blockchain)的1.0版本,比特幣可以在沒有第三方的情況下進(jìn)行交易[3]。區(qū)塊鏈能夠?qū)?shù)據(jù)分布式存儲在不同的節(jié)點,任何節(jié)點都必須按照共識協(xié)議進(jìn)行更新,從而實現(xiàn)了多方信息共享和監(jiān)督[4]。Buterin在2013年提出了以太坊,它作為區(qū)塊鏈2.0版本在區(qū)塊鏈1.0的基礎(chǔ)上,新增了圖靈完備的編程語言,首次將區(qū)塊鏈和智能合約相融合[5]。Nick Szabo[6]提出智能合約的概念,智能合約是一種可執(zhí)行或驗證的計算機(jī)協(xié)議,智能合約一旦生效就會堅定不移地按照合約內(nèi)容進(jìn)行自我驗證和自我執(zhí)行[7]。總的來說,區(qū)塊鏈由數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、應(yīng)用層、激勵層和合約層組成,具體架構(gòu)如圖1所示。
區(qū)塊鏈主要有以下兩大特點:(1)去中心化:區(qū)塊鏈?zhǔn)怯筛鲄⑴c節(jié)點組成的P2P(Peer to Peer)網(wǎng)絡(luò)構(gòu)造的,沒有中心服務(wù)器,所有參與節(jié)點都是服務(wù)器,數(shù)據(jù)分布在各個參與的節(jié)點上,所有節(jié)點在區(qū)塊鏈中都是平等的。(2)不可篡改性:數(shù)據(jù)經(jīng)過節(jié)點驗證通過后會被永久存儲在區(qū)塊鏈上,除創(chuàng)世區(qū)塊外,每個區(qū)塊都有上一個區(qū)塊的Hash值,如果修改某個區(qū)塊的數(shù)據(jù),則之前所有區(qū)塊的Hash值都要重新計算,除非能掌握區(qū)塊鏈中51%算力,否則某些惡意的節(jié)點修改是無效的。
1976年,非對稱加密這一概念首次由W. Diffie和M. Hellman提出。非對稱加密需要兩個密鑰,即公鑰和私鑰。非對稱加密的公鑰和私鑰是成對產(chǎn)生,如果使用公鑰對一個明文進(jìn)行加密,那么只有對應(yīng)的私鑰可以對密文進(jìn)行解密。反之,如果用私鑰對一個明文進(jìn)行簽名,那么同樣也只有對應(yīng)的公鑰可以對其進(jìn)行驗證,具體非對稱加密原理見圖2。目前,RSA加密算法是用途最為廣泛的非對稱加密算法之一。
圖2 非對稱加密流程
RSA加密算法目前是最有影響力的公私加密算法之一。RSA密碼體制中包含一組密鑰對,公鑰和私鑰,私鑰歸個人保管,公鑰可公布給所有人。使用RSA加密首先需要知道接收方的公鑰,使用接收方的公鑰對明文進(jìn)行加密,發(fā)送方將密文發(fā)送給接收方,此時即便遭遇外部攻擊信息被攔截下來,攔截方?jīng)]有對應(yīng)私鑰也無法破解加密文件,接收方收到密文使用私鑰解密獲取明文。RSA加密算法安全性依賴于大數(shù)的因式分解,將兩個大質(zhì)數(shù)相乘是十分容易的,但是對兩個大質(zhì)數(shù)進(jìn)行因式分解是十分困難的,所以用乘法作為加密密鑰,安全性極高[8]。
RSA生成算法如下:
(1)隨機(jī)產(chǎn)生兩個不同的大質(zhì)數(shù)p、q;
(2)計算n=p*q,同時計算歐拉函數(shù)φ(n)=(p-1)*(q-1);
(3)隨機(jī)產(chǎn)生一個整數(shù)e,e與φ(n)互質(zhì),令gcd(e,φ(n))=1,且滿足1 (4)計算d≡e-1(modφ(n)); (5)公鑰PublicKey={e,n},私鑰PrivateKey={d,n}。 為了保證健康碼隱私不被泄露和信息非法篡改的問題,去中心化和非對稱加密是健康碼方案中不可忽視的重要環(huán)節(jié)。區(qū)塊鏈作為一項新型技術(shù),其去中心化、不可篡改等特點可用于多個領(lǐng)域,比如醫(yī)療[9]、籌款[10]、能源[11]、人工智能[12]、金融[13]、疫情預(yù)警[14]等。文獻(xiàn)[15]提出了一種基于Django架構(gòu)的校園健康碼系統(tǒng),系統(tǒng)高效整合了校園健康碼信息,但系統(tǒng)并未對校園師生的信息進(jìn)行加密存儲。文獻(xiàn)[16]使用TDC搭建了健康碼系統(tǒng),但同樣未能對用戶信息進(jìn)行加密保護(hù)。文獻(xiàn)[17]討論了由于數(shù)字技術(shù)抗疫成為主流抗疫手段,導(dǎo)致了個人私密信息的泄露,應(yīng)該加強(qiáng)對信息匿名化和脫敏化的處理。文獻(xiàn)[18]認(rèn)為目前App(Application)的隱私泄露嚴(yán)重,應(yīng)該加強(qiáng)對App用戶的法律保護(hù)。然而,中心化平臺對信息有著絕對的控制權(quán),故其容易遭受外部攻擊導(dǎo)致信息被篡改或泄露。為了解決中心化帶來的種種問題,相關(guān)工作則研究基于區(qū)塊鏈技術(shù)的Dapp(Decentralized Application)應(yīng)用。例如文獻(xiàn)[19]提出了一種基于區(qū)塊鏈技術(shù)的個人信息管理系統(tǒng),使用區(qū)塊鏈來管理信息。文獻(xiàn)[20]提出利用區(qū)塊鏈技術(shù)做一個隱私性投票,在不透露投票人的隱私的前提下通過投票決定是否進(jìn)行以太幣資助。文獻(xiàn)[9]提出了基于區(qū)塊鏈的電子病歷,通過部署在區(qū)塊鏈上的智能合約來對病歷進(jìn)行增加、刪除、修改、查詢等功能。文獻(xiàn)[21]提出將區(qū)塊鏈技術(shù)與云存儲技術(shù)相結(jié)合,實現(xiàn)基于區(qū)塊鏈技術(shù)的醫(yī)療數(shù)據(jù)存儲方案。上述研究雖然利用區(qū)塊鏈技術(shù)防止了信息被篡改,但是并沒有考慮到用戶隱私泄露的問題。綜合上述情況,該文提出將區(qū)塊鏈技術(shù)與健康碼相結(jié)合。利用區(qū)塊鏈去中心化、信息公開透明、可追溯等特點保證了健康碼信息公開透明,打破數(shù)據(jù)壁壘,為全國統(tǒng)一健康碼的使用奠定了基礎(chǔ),同時滿足了系統(tǒng)安全、用戶隱私保護(hù)和紅碼追責(zé)的需求。 將區(qū)塊鏈技術(shù)引入健康碼平臺設(shè)計,基于以太坊平臺進(jìn)行去中心化的健康碼方案設(shè)計。功能包括申請健康碼、健康碼信息展示、健康報備、高風(fēng)險區(qū)域黃碼等功能。為了保證用戶隱私不被泄露,系統(tǒng)會用非對稱加密對用戶重要信息加密,然后上傳區(qū)塊鏈,以此保護(hù)用戶隱私可靠,避免了用戶的隱私泄露被不法分子利用,同時利用區(qū)塊鏈不可篡改、去中心化的特點有效解決了信息安全的問題。 相較于傳統(tǒng)的健康碼平臺,所提出的方案以區(qū)塊鏈技術(shù)為核心,通過利用區(qū)塊鏈不可篡改、去中心化、公開透明等特點實現(xiàn)了基于以太坊智能合約的健康碼系統(tǒng),有效解決了健康碼信息安全、個人隱私泄露、紅碼追責(zé)等問題。 圖3展示了基于以太坊智能合約的健康碼系統(tǒng)中用戶提交數(shù)據(jù)進(jìn)行鏈上存儲以及平臺操作流程。 圖3 業(yè)務(wù)模型 首先,用戶提交信息到系統(tǒng),系統(tǒng)收到用戶的信息后使用平臺公開的公鑰對用戶的隱私信息,如身份證、電話等進(jìn)行加密;然后,將加密信息上傳到以太坊。平臺收到用戶上傳的加密信息使用平臺的私鑰解密得到原始信息,確認(rèn)用戶信息無誤則審核通過。 健康碼平臺會對用戶信息進(jìn)行各類分析,用戶過去14天行程中去過高風(fēng)險地區(qū),健康碼則會從綠碼變?yōu)辄S碼,變回綠碼需要兩次核酸檢測,若兩次核酸均沒有問題,則自動變回綠碼,紅碼人員在完成居家隔離和醫(yī)學(xué)觀察后,自動轉(zhuǎn)為綠碼,后臺會自動把用戶的健康信息更新到區(qū)塊鏈上,方便工作人員查詢。 系統(tǒng)分為三個部分,Web前端模塊、中間模塊、區(qū)塊鏈模塊,系統(tǒng)具體架構(gòu)如圖4所示。 圖4 系統(tǒng)架構(gòu) 應(yīng)用層Web模塊使用react為前端框架。Web模塊為用戶提供良好可視化的交互界面,提交多方請求,通過智能合約提供的接口將數(shù)據(jù)提交到區(qū)塊鏈上。 中間模塊由智能合約與Web3組成,用戶與健康碼平臺的需求與業(yè)務(wù)邏輯均以智能合約的形式寫入以太坊節(jié)點中。智能合約規(guī)定了各方的執(zhí)行操作和操作規(guī)范,所有的操作只能按照智能合約的內(nèi)容執(zhí)行。該文使用Solidity語言編寫智能合約,實現(xiàn)健康碼平臺的各項功能。Web3是實現(xiàn)智能合約具體操作的接口API(application programming interface),通過Web3獲取節(jié)點的狀態(tài)、監(jiān)聽事件、調(diào)用合約等,實現(xiàn)智能合約和上層應(yīng)用與以太坊的交互。 以太坊分布式交易賬本為底層提供數(shù)據(jù)存儲環(huán)境,支持并存儲智能合約操作所產(chǎn)生的各個區(qū)塊,使用PoW(Proof of Work)共識協(xié)議來實現(xiàn)記賬功能,每個節(jié)點會得到一個防篡改、真實的賬本。 Web前端頁面主要分為用戶注冊、用戶信息查詢、高風(fēng)險地區(qū)判斷、行程申報共四部分。Web交互界面采用Html、Css 和Javascript進(jìn)行界面設(shè)計,使用react開發(fā)交互界面。通過web3.js(與以太坊兼容的JavaScript API)與以太坊節(jié)點連接,從而調(diào)用智能合約方法。通過remix(以太坊官方推薦的網(wǎng)頁編譯器)來進(jìn)行智能合約的編寫與測試,利用MetaMask插件(以太坊錢包)與以太坊進(jìn)行交互,生成的交易數(shù)據(jù)通過MetaMask錢包發(fā)送到以太坊網(wǎng)絡(luò),并通過MetaMask錢包支付gas(以太坊中每步操作都會消耗一個固定的消耗值)手續(xù)費等支付操作。 在業(yè)務(wù)層進(jìn)行應(yīng)用開發(fā),首先需要對智能合約進(jìn)行編寫,健康碼智能合約屬性信息見表1。用戶結(jié)構(gòu)體包含了身份證、姓名、聯(lián)系方式、核酸檢測等信息詳情,見表2。 表1 健康碼合約屬性 表2 用戶結(jié)構(gòu)體屬性 3.3.1 用戶注冊 用戶注冊是本系統(tǒng)主要功能之一,用戶需要提交信息到系統(tǒng),系統(tǒng)會對用戶的隱私信息進(jìn)行加密,加密算法使用RSA算法。系統(tǒng)收到用戶提交的信息后,使用平臺發(fā)布的公鑰對用戶隱私信息加密,之后將加密后的信息上傳區(qū)塊鏈,平臺工作人員通過區(qū)塊鏈獲得用戶加密信息,用平臺私鑰對加密部分進(jìn)行解密,審核用戶信息,確認(rèn)沒有問題則審核通過。用戶注冊的合約代碼如下: Algorithm 1:addper (1)//生成公密鑰 (2) key=NodeRsa({b:指定密鑰長度}); (3)//導(dǎo)出公鑰 (4) pub=key.exportKey(public); (5)//導(dǎo)出私鑰 (6) pri=key.exportKey(private); (7) myEncrypt=NodeRsa(platform_pubKey); (8) //加密隱私信息 (9)Encrypt=myEncrypt(person_message, 'base64'); (10)function (person message){ (11) perinfo memory pe=perinfo({ (12) identify :經(jīng)過公鑰加密過的身份證, (13) status :健康碼狀態(tài), (14) …… (15) phone :經(jīng)過公鑰加密的聯(lián)系方式 }); (16)//加入用戶集合 (17) person.push(pe); 3.3.2 判斷是否為黃碼 健康碼分為綠碼、黃碼、紅碼,其中黃碼的判定規(guī)則為過去14天去過高風(fēng)險地區(qū),并且沒有做過核酸檢測的人員。判斷為黃碼的人員變回綠碼需要做兩次核酸,若兩次核酸都為陰性則轉(zhuǎn)回綠碼。高風(fēng)險地區(qū)判斷合約代碼如下: Algorithm 2:isYellow (1)function() onlymanage { (2) for(i=0;i (3) for(j=0;j< 2 weeks;j++){ (4) //過去14天去過風(fēng)險區(qū)則為True,反之為Fales (5) flag=isEqual(14天行程,高風(fēng)險地區(qū)); (6) //如果為真則修改健康碼狀態(tài) (7) if(flag){ (8) status=黃碼; (9) } (10) } (11) } (12)} 實驗在window10操作系統(tǒng)下設(shè)計實現(xiàn),在構(gòu)建的基于以太坊智能合約的健康碼系統(tǒng)下構(gòu)建以太坊開發(fā)環(huán)境,同時實現(xiàn)健康碼功能,需要安裝Node.js,Truffle框架,MeatMask錢包,Ganache-cii測試框架,web3.js,remix。使用remix來測試智能合約的功能,通過Ganache模擬以太坊的真實環(huán)境,最后部署到以太坊rinkeby網(wǎng)絡(luò)上。 針對系統(tǒng)的用戶注冊、平臺審核、黃碼判斷、信息展示等一系列重要功能做了測試。用戶注冊、平臺審核等一系列會改變區(qū)塊鏈數(shù)據(jù)的操作都會通過MetaMask錢包打包到以太坊節(jié)點中。信息展示操作不會對區(qū)塊鏈數(shù)據(jù)產(chǎn)生修改的操作,只產(chǎn)生調(diào)用信息,無交易。 部分重要模塊功能實驗如圖5所示,圖5展示了用戶注冊時的操作??梢钥吹?用戶上傳的部分隱私信息將會以密文的形式顯示。 圖5 信息展示 以太坊中需要改變狀況的操作都需要消耗gas。gas price是單個gas的價格,實際交易花費成本為gas* gas price。在該系統(tǒng)中,智能合約部署在以太坊rinkeby網(wǎng)絡(luò)中,部署合約的賬戶地址為0xC2FC51c9e D99905bCBDcB1d5fe9296E6E5977510,智能合約的部署地址為0x1eda70be3a1fd92dfa783c698c00fb5114fdc dbd97d92890223e6da6dbd855ef。利用智能合約分析各函數(shù)消耗的花費。合約發(fā)起者發(fā)起constructor需要花費0.004 383 7 ETH(以太幣)。用戶注冊addper需要花費0.000 806 78 ETH。工作人員對與確診病例軌跡重合人員變更為黃碼需要花費0.000 120 57 ETH。工作人員對確診病患或高風(fēng)險人員設(shè)置紅碼需要花費0.000 078 892 ETH。工作人員對病愈人員或核酸檢測超過2次為陰性的人員變更為綠碼需要0.000 097 492 ETH。智能合約具體花費見表3。表3證明了方案所消耗的成本是可接受的。 表3 智能合約花費測試 與文獻(xiàn)[15-18]所提出的方案進(jìn)行對比,具體對比見表4。文獻(xiàn)[15-16]提出了一種健康碼方案,但方案僅實現(xiàn)了健康碼的監(jiān)控功能,并未保障健康碼用戶的隱私安全。文獻(xiàn)[17-18]提出應(yīng)對用戶信息進(jìn)行脫敏處理,但方案沒有考慮中心化系統(tǒng)帶來的危險,且未解決信息孤島問題。文中方案利用區(qū)塊鏈解決了中心化和數(shù)據(jù)孤島問題且保證了數(shù)據(jù)可溯源,同時利用非對稱加密保障了用戶的隱私安全。通過與現(xiàn)有文獻(xiàn)的比較,不難看出提出的基于區(qū)塊鏈和非對稱加密的健康碼方案能夠有效地保障在疫情下的人身安全,且能夠有效保護(hù)用戶隱私安全。 表4 相關(guān)方案功能比較 區(qū)塊鏈技術(shù)本質(zhì)上就是分布式數(shù)據(jù)庫,區(qū)塊鏈上各個節(jié)點通過共識協(xié)議記賬,它與傳統(tǒng)數(shù)據(jù)庫最大的區(qū)別就在于中心化和非中心化。方案根據(jù)區(qū)塊鏈技術(shù)去中心化、不可篡改、信息可追溯等特點,研究設(shè)計了基于以太坊智能合約的健康碼方案,該方案采用非對稱加密,保證了用戶隱私信息的安全性,同時利用區(qū)塊鏈公開透明、不可篡改等特點,確保了信息的真實性。但該方案在具體實現(xiàn)過程中仍存在一定問題和挑戰(zhàn)需要解決。如讓電信、聯(lián)通等運營商共享海量數(shù)據(jù)、共同維護(hù)方案的運行。解決上述問題,對方案進(jìn)一步落地具有重要意義。對區(qū)塊鏈技術(shù)在疫情健康碼方面的應(yīng)用提出了設(shè)計方案,希望能對當(dāng)前健康碼存在的痛點提出新的解決思路,也希望對接下來區(qū)塊鏈的應(yīng)用研究做一些啟發(fā)和建議。 在后續(xù)工作中,還將繼續(xù)完成健康碼智能合約的邏輯需求,并將區(qū)塊鏈和移動端開發(fā)相結(jié)合,進(jìn)一步實現(xiàn)健康碼方案的可靠性與多適用性。1.3 相關(guān)研究
2 系統(tǒng)架構(gòu)模型
2.1 業(yè)務(wù)模型
2.2 系統(tǒng)技術(shù)架構(gòu)
3 模塊功能與合約設(shè)計
3.1 前端設(shè)計
3.2 合約屬性設(shè)計
3.3 合約功能實現(xiàn)
4 實驗分析
4.1 方案可行性
4.2 其他方案分析
5 結(jié)束語