李國良 邵思豪
(遼寧省大數(shù)據(jù)管理中心(遼寧省信息中心) 沈陽 110002)
黨的十八大以來,黨中央、國務院要求深入推進“互聯(lián)網(wǎng)+政務服務”[1],全面推進“一網(wǎng)通辦”[2],加快推進信息數(shù)據(jù)共享[3],加快電子證照庫建設(shè)及電子證照管理[4],力求打通數(shù)據(jù)壁壘,全面優(yōu)化營商環(huán)境建設(shè).目前,全國各地均已建成覆蓋省市兩級的電子證照系統(tǒng),為減少企業(yè)提交辦事材料、為數(shù)據(jù)多跑路提供了重要的應用支撐.
然而,電子證照建設(shè)應用過程中存在的問題也日益顯現(xiàn),包括:1)證照信息的安全可信問題.電子證照存儲在數(shù)據(jù)中心服務器中,當受到攻擊時將導致證照信息被篡改或刪除,無法保障數(shù)據(jù)安全存儲和可信共享.2)電子證照系統(tǒng)操作過程的行為審計、精準授權(quán)問題.在電子證照管理中存在拖延上傳、證照信息有誤等問題,導致數(shù)據(jù)不全面、不準確.此外,管理員不規(guī)范操作也會導致證照信息丟失、篡改、泄露等.3)證照驗證過程中的隱私保護問題.在電子證照驗證場景中存在持證者隱私信息被過度暴露的風險.
本文將區(qū)塊鏈技術(shù)與電子證照相結(jié)合,借助區(qū)塊鏈的去中心化、可追溯、不可篡改等特性,以及智能合約和零知識證明等關(guān)鍵技術(shù),解決了無法跨部門協(xié)同提供證明服務,電子證照操作記錄無法安全存儲、可信共享、存證追溯,無法進行數(shù)據(jù)應用授權(quán)、精準授權(quán)驗證、行為審計等問題.并基于本文提出的技術(shù)方案,分析重點應用場景.最后通過實驗驗證了本文方案具備可行性,且提升了安全性.
自2008年比特幣問世以來[5],因區(qū)塊鏈去中心化、集體維護、不可篡改、抗抵賴和可追溯等技術(shù)優(yōu)勢,受到了工業(yè)界和學術(shù)界的廣泛關(guān)注.按照對用戶的開放程度,區(qū)塊鏈可分為3類:公有、私有和聯(lián)盟[6].區(qū)塊鏈技術(shù)發(fā)展可大致分為以下3個階段.1)區(qū)塊鏈1.0:可編程貨幣,代表為2008年比特幣的出現(xiàn).2)區(qū)塊鏈2.0:智能合約,代表為2015年以太坊的出現(xiàn)[7].3)區(qū)塊鏈3.0:2018年以來,區(qū)塊鏈技術(shù)廣泛應用在金融交易、物聯(lián)網(wǎng)和數(shù)據(jù)共享等領(lǐng)域[8],以Hyperledger為代表.
區(qū)塊鏈技術(shù)本質(zhì)上是對數(shù)字事件在分布式數(shù)據(jù)庫上創(chuàng)建無法篡改的記錄——分布式賬本[9].網(wǎng)絡中的參與者根據(jù)共識原則來制約和協(xié)商對賬本記錄的更新,沒有第三方仲裁機構(gòu)參與.分布式賬本中的每條記錄都有1個時間戳和唯一的密碼簽名,使其成為網(wǎng)絡中所有交易的可審計歷史記錄.哈希算法和Merkle樹結(jié)構(gòu)確保數(shù)據(jù)不被篡改.
共識機制是分布式系統(tǒng)的核心[10],互相不信任的節(jié)點通過預設(shè)機制最終達到數(shù)據(jù)一致性稱為共識.共識機制的目標為:1)一致性,所有誠實節(jié)點所保存的區(qū)塊鏈前綴相同;2)有效性,由誠實節(jié)點發(fā)布的消息將被所有誠實節(jié)點記錄到自己的區(qū)塊鏈中.目前主要的共識機制有權(quán)益型(工作量證明[11]和股權(quán)證明[12-13]等)、容錯型(實用拜占庭容錯[14]和授權(quán)拜占庭容錯[15]等)、選舉型(Ripple[16-18]和Raft[19]等)3種.共識機制在電子證照系統(tǒng)中應用于證照的可信應用,確?!耙粩?shù)一源”.
智能合約是傳統(tǒng)合約的數(shù)字化版本[20].“智能合約就是執(zhí)行合約條款的可計算交易協(xié)議”[21],可在滿足其寫入條件時自行執(zhí)行[22].智能合約須是合同條款[23],全生命周期包括生成、發(fā)布、執(zhí)行3部分[9].智能合約作為在區(qū)塊鏈上自動執(zhí)行的特殊程序[24],在證照系統(tǒng)中應用于證照的授權(quán)使用及到期自動失效等場景,確保業(yè)務的可靠運行.
超級賬本HyperLedger尤其是其中的Fabric是全球最流行的許可鏈技術(shù)[25],支持多種客戶端編程和智能合約語言,如Go,Java等.HyperLedger是一個不可變的共享賬本,支持多個不同的參與方加入同一通道來共享同一個賬本.通道間的數(shù)據(jù)是隔離的;通道中數(shù)據(jù)默認是不加密的,可以被通道成員看到;但私有化數(shù)據(jù)默認是加密的,只有得到授權(quán)的通道成員才能解密數(shù)據(jù).
基于區(qū)塊鏈可追溯和不可篡改的特性,可解決證照信息及操作記錄的安全存儲、可信共享、存證追溯問題.基于智能合約和零知識證明來保護個人及企業(yè)的證照隱私.基于區(qū)塊鏈分布式、各節(jié)點平權(quán)的特點,可在各部門分別搭建節(jié)點服務器,獲取區(qū)塊鏈全量數(shù)據(jù),實現(xiàn)證照數(shù)據(jù)獨立發(fā)布和驗證.
基于區(qū)塊鏈技術(shù)賦能電子證照系統(tǒng)建設(shè)應用,將有利于提高證照的存在性證明、變化過程證明、查驗證明等[26-27]能力.借助區(qū)塊鏈的去中心化同步記賬、交易身份認證、數(shù)據(jù)加密和數(shù)據(jù)不可篡改等特征,可跨部門提供證照證明服務,保障了證照數(shù)據(jù)安全性、完整性、可靠性.既確保了企業(yè)和法人隱私安全,又提高了政務服務質(zhì)量和效率.
區(qū)塊鏈+電子證照具有如下幾點優(yōu)勢:
1) 深化跨部門互信.
將電子證照數(shù)據(jù)寫入數(shù)據(jù)庫時,同步會往區(qū)塊鏈平臺寫入1個節(jié)點數(shù)據(jù).根據(jù)區(qū)塊鏈平權(quán),節(jié)點數(shù)據(jù)只能寫入、不能修改和刪除的特點,確保區(qū)塊節(jié)點數(shù)據(jù)的不可篡改.在每次調(diào)用電子證照時,系統(tǒng)都會對數(shù)據(jù)進行哈希計算,并與區(qū)塊鏈節(jié)點上的哈希值進行比較,保障證照數(shù)據(jù)的完整性和可信性.
2) 電子證照調(diào)用過程可追溯.
區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)如圖1所示:不同區(qū)塊節(jié)點根據(jù)哈希值首尾相連,如果當前區(qū)塊數(shù)據(jù)造假會導致前一區(qū)塊作出修改,然后迭代修改前一區(qū)塊,必然會導致當前節(jié)點的所有前驅(qū)節(jié)點數(shù)據(jù)都被迫作出造假修改,這在區(qū)塊鏈平臺的共識機制保護和約束下是很難做到的.因此,通過這種機制可確保寫入?yún)^(qū)塊鏈的數(shù)據(jù)不可篡改且可溯源.
3) 智能合約重構(gòu)電子證照業(yè)務應用.
智能合約不僅是一個自動執(zhí)行的計算機程序還是一個系統(tǒng)參與者,它既可接收和存儲信息,也可向外發(fā)送信息,還可臨時保管資產(chǎn),并總是按照事先的規(guī)則,不依賴第三方執(zhí)行操作,進行可追蹤且不可逆轉(zhuǎn)的可信交易.安全性和交易成本方面均優(yōu)于傳統(tǒng)合約算法.
4) 可監(jiān)管的隱私保護.
證照數(shù)據(jù)作為個人或企業(yè)的基本數(shù)據(jù)之一,具有隱私保護需求[28].同時,部門頒發(fā)的證照信息屬于政務信息,不應被其他部門全部知曉,需進行可監(jiān)管的隱私保護.可通過零知識證明、數(shù)據(jù)加密等隱私保護技術(shù)對區(qū)塊鏈記錄的信息進行處理,控制證照信息的知悉范圍來保護隱私并進行監(jiān)管.
圖1 區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)
本著可靠、穩(wěn)定、可拓展、可信與安全的原則,系統(tǒng)按照統(tǒng)一規(guī)劃、分層構(gòu)建來設(shè)計實現(xiàn).總體架構(gòu)分為4層,分別是展示訪問層、系統(tǒng)應用層、區(qū)塊支撐層、共享交換層.總體架構(gòu)如圖2所示.
圖2 總體架構(gòu)設(shè)計
1) 展示訪問層.
主要面向3大類用戶,如表1所示,包括社會公眾、業(yè)務應用和管理人員.
表1 用戶分類及用戶功能
展示訪問層包含政務服務網(wǎng)、行政審批系統(tǒng)、委辦局業(yè)務系統(tǒng)等需和電子證照系統(tǒng)集成的業(yè)務系統(tǒng).用戶通過上述系統(tǒng)訪問電子證照系統(tǒng),獲取統(tǒng)一的數(shù)據(jù)接口服務.數(shù)據(jù)接口主要分為2類:一類是面向互聯(lián)網(wǎng)提供公眾服務接口,另一類是為部門提供數(shù)據(jù)共享接口.
2) 系統(tǒng)應用層.
應用層主要劃分為2個子系統(tǒng):一個是面向業(yè)務單位使用的證照管理系統(tǒng);另一個是面向數(shù)據(jù)采集和共享的證照共享系統(tǒng).
3) 區(qū)塊支撐層.
通過區(qū)塊支撐層,賦能電子證照管理和共享系統(tǒng),針對電子證照應用場景,利用可信數(shù)據(jù)源管理機制確保數(shù)據(jù)安全,利用數(shù)字身份(包括人員身份和網(wǎng)絡設(shè)備身份)鎖定證照數(shù)據(jù)責任主體,利用區(qū)塊鏈存證溯源,確保數(shù)據(jù)不被篡改.
此外,還包含目錄索引庫、電子證照庫、審計日志庫,涉及數(shù)據(jù)的存儲和管理.電子證照庫是本系統(tǒng)基礎(chǔ),主要包括電子證照、電子材料、批文等信息.主要使用讀寫分離、表分區(qū)、分表設(shè)計、分布式存儲等技術(shù)提升性能.
4) 共享交換層.
共享交換層借助省數(shù)據(jù)共享平臺和電子政務云平臺,實現(xiàn)和省直/地市的電子證照系統(tǒng)共享證照數(shù)據(jù)的功能.
平臺基于超級賬本、Hyperledger和高并發(fā)審計側(cè)鏈,可運行在云端或本地服務器上,利用關(guān)系型數(shù)據(jù)庫、對象存儲等作為基礎(chǔ)設(shè)施支撐.
3.2.1 自適應上鏈算法
第①行:遍歷每個數(shù)據(jù)提供方;第②行:由數(shù)據(jù)提供方client提供原始數(shù)據(jù);第③行:對原始數(shù)據(jù)進行清洗預處理,得到清洗后數(shù)據(jù)clean_data;第④行:對清洗后數(shù)據(jù)clean_data進行結(jié)構(gòu)化處理,得到結(jié)構(gòu)化數(shù)據(jù)stru_data;第⑤行:對結(jié)構(gòu)化數(shù)據(jù)stru_data加密處理,得到數(shù)據(jù)data;第⑥行:數(shù)據(jù)data在當前網(wǎng)絡進行流通;第⑦行:創(chuàng)建新區(qū)塊blocknode;第⑧行:將數(shù)據(jù)data填入?yún)^(qū)塊blocknode;第⑨行:判斷主鏈是否低負載;第⑩行:若主鏈低負載,則將blocknode加入主鏈;第~行:若主鏈高負載,則將blocknode加入側(cè)鏈;第行:上鏈算法結(jié)束.
算法1.自適應上鏈算法.
輸入:clientSet;/*所有數(shù)據(jù)提供方*/
輸出:(mainchain,sidechain)./*更新后的主鏈和側(cè)鏈*/
① FOR eachclientbelongs toclientSet
/*遍歷*/
②raw_data=produce(client);
/*原始數(shù)據(jù)*/
③clean_data=clean(raw_data);
/*數(shù)據(jù)清洗*/
④stru_data=structure(clean_data);
/*結(jié)構(gòu)化*/
⑤data=encrypt(stru_data);
/*數(shù)據(jù)加密*/
⑥currentnet.flow(data);
/*在當前網(wǎng)絡進行流通*/
⑦blocknode=newblock();
⑧blocknode.add(data);
/*將data填入?yún)^(qū)塊*/
⑨ IFislowload(mainchain);
/*判斷主鏈低負載*/
⑩mainchain.add(blocknode);
3.2.2 審計側(cè)鏈
審計側(cè)鏈是為高并發(fā)場景下的自適應審計而設(shè)計.這是一個中心化系統(tǒng),實現(xiàn)對區(qū)塊鏈交易客戶端簽名、交易發(fā)起、校驗、打包成區(qū)塊、區(qū)塊哈希寫入母鏈等操作.
審計側(cè)鏈用戶使用母鏈的區(qū)塊頭哈希進行簽名驗證,使審計側(cè)鏈雖采用了中心化架構(gòu),仍可實現(xiàn)鏈上數(shù)據(jù)的不可篡改和抗抵賴.
3.2.3 電子證照的安全存儲與隱私保護
通過主鏈和側(cè)鏈上的智能合約將電子證照存儲在區(qū)塊鏈上,防止其內(nèi)容被篡改,達到數(shù)據(jù)安全存儲和隱私保護目的.
新增證照則將更新的證照保護在鏈下的數(shù)據(jù)庫中,將證照指紋(哈希值)保存在鏈上的智能合約中.如果篡改數(shù)據(jù)則改變相應的哈希值,通過調(diào)用智能合約會發(fā)現(xiàn)與鏈上哈希值不相等,便無法執(zhí)行篡改操作,確保數(shù)據(jù)的安全存儲.同時,在算法執(zhí)行過程中,數(shù)據(jù)均加密存儲,即使被泄露也很難還原,提高了隱私保護效果.
證照新增流程見算法2.第①行:遍歷每個要新增的電子證照li;第②行:權(quán)威節(jié)點AN首先生成隨機密鑰rand_key用于電子證照的AES加密;第③行:用AES算法對證照li加密,加密后的結(jié)果為aes_li;第④行:用sha256算法求電子證照的哈希值,哈希值保存為sha_li; 第⑤行:用sha256算法求加密后電子證照aes_li的哈希值,結(jié)果保存為sha_aes_li;第⑥行:利用[電子證照li、電子證照哈希值sha_li,加密后電子證照哈希值sha_aes_li]提取其他有用屬性;第⑦行:將[加密電子證照aes_li,加密電子證照哈希值sha_aes_li,和其他證照信息other_attri]加入電子證照數(shù)據(jù)庫DB中,并返回該license在數(shù)據(jù)庫DB中存儲地址li_DBaddr;第⑧行:用橢圓曲線算法對[電子證照身份信息sta_ID、證照編號lics_ID、電子證照的哈希值sha_li,加密電子證照的哈希值sha_aes_li]進行數(shù)字簽名,得到數(shù)字簽名結(jié)果sig_li;第⑨行:將數(shù)字簽名結(jié)果sig_li通過RESTFul Service發(fā)送到智能合約SC,SC收到后從簽名中恢復公鑰publickey信息,與SC中預存的公鑰進行比較;第⑩行:如果二者相同說明證照新增流程合法,則在合約SC中添加[證照編號li_ID,證照版本li_ver,證照在數(shù)據(jù)庫DB中存儲地址li_DBaddr、電子證照的哈希值sha_li、時間戳time])等信息.電子證照更新算法與新增算法類似,不同之處在于權(quán)威節(jié)點AN不重新生成rand_key,而是使用第1次新增該證照時創(chuàng)建的rand_key.
算法2.證照新增算法.
輸入:licenseSet;/*所有要新增的電子證照*/
輸出:(DB,SC)./*更新后的數(shù)據(jù)庫和智能合約*/
① FOR eachlibelongs tolicenseSet
/*遍歷*/
②rand_key=producekey(AN);
/*生成隨機密鑰*/
③aes_li=AES(li,rand_key);
/*AES算法加密*/
④sha_li=SHA(li);
/*求電子證照的哈希值*/
⑤sha_aes_li=SHA(aes_li);
/*求加密后證照的哈希*/
⑥other_attri=extract(li,sha_li,
sha_aes_li);
⑦li_DBaddr=DB.add(aes_li,sha_aes_li,
other_attri);/*加入數(shù)據(jù)庫*/
⑧sig_li=ECCSig(sta_ID,li_ID,
sha_li,sha_aes_li);
⑨ IFSC.checkOwner(sig_li,sta_ID)
/*檢驗身份*/
⑩SC.addmap(li_ID,li_ver,li_DBaddr,
sha_li,time);/*在合約SC中添
加證照相關(guān)信息*/
3.2.4 電子證照的可信共享與存證追溯
電子證照的可信共享是指在部門之間或部門與外部之間,通過智能合約、數(shù)據(jù)庫技術(shù)、公鑰加密、對稱加密等技術(shù)實現(xiàn)可信證照數(shù)據(jù)共享.
證照共享算法如算法3所示.第①②行:發(fā)送方權(quán)威節(jié)點ANsend,使用私鑰Pri_K_send對[要分享的證照編號li_ID,接收方權(quán)威節(jié)點ANrecv_ID等]通過ECC橢圓曲線算法進行數(shù)字簽名,得到sig1并發(fā)送給智能合約;第③行:智能合約SC收到請求后,檢查發(fā)送方ANsend簽名,用ANrecv的公鑰Pub_K_send解簽名sig1,驗證發(fā)送方是否是ANSend;第④行:檢查通過后,將接受方ANrecv_ID信息和待分享證照li_ID寫入合約分享列表shareANList;第⑥⑦行:接收方ANrecv使用私鑰Pri_K_recv對要接收證照編號li_ID和ANrecv的ID信息進行簽名,得到sig2并發(fā)送給智能合約SC;第⑧行:SC收到請求后,對接收方ANrecv進行簽名檢查,用ANrecv的公鑰Pub_K_recv解簽名sig2,驗證是否確實ANrecv發(fā)送;第⑧行簽名檢查成功后,第⑨行進一步檢查,SC用sig2還原ANrecv[發(fā)送方的li_ID和接收方ANrecv_ID],與第④行SC在shareANList已存信息進行對比,確定是ANsend將共享li_ID發(fā)送給ANrecv.第⑨行檢查通過后,第⑩行智能合約SC發(fā)送[待分享電子證照的ID、哈希值和待分享證照DB地址li_DBaddr、證照哈希值sha_li]給ANrecv;第行:ANrecv根據(jù)從合約中獲取的證照li在DB中的存儲地址li_DBaddr,進而從DB數(shù)據(jù)庫中獲取加密的證照aes_li,ANrecv通過請求將ANrecv的ID和待分享證照編號li_ID發(fā)送給ANsend,獲得加密的證照aes_li的解密密鑰;第行:ANrecv將[ANrecv_ID,li_ID]發(fā)送給ANsend,請求獲得解密密鑰rand_key;第行:用智能合約SC檢查行信息的合法性;若合法,則執(zhí)行行,ANsend利用智能合約獲取ANrecv的公鑰Pub_K_recv,用Pub_K_recv對rand_key進行橢圓曲線加密,并發(fā)送給ANrecv;第行:ANrecv收到ANsend的數(shù)據(jù)后,使用私鑰Pri_K_recv進行解密得到rand_key,再用rand_key對加密電子證照aes_li進行解密,得到原始電子證照li.最終ANsend成功地將證照內(nèi)容li共享給ANrecv,實現(xiàn)了可信共享與存證追溯.
算法3.證照共享算法.
輸入:(li_ID,ANsend,ANrecv);/*待分享電子證照編號、發(fā)送方、接收方*/
輸出:li./*要共享的證照信息*/
①sig1=ECCSig(Pri_K_send,li_ID,
ANrecv_ID);
②ANsendsend [ANrecv_ID,sig1]→SC;
③ IFSC.checkOwner(sig1,ANsend_ID)
④shareANList.add(ANrecv_ID,li_ID);
⑤ END IF
⑥sig2=ECCSig(Pri_K_recv,li_ID,
ANrecv_ID);
⑦ANrecvsend[ANrecv_ID,sig2]→SC;
⑧ IFSC.checkOwner(sig2,ANrecv_ID)
⑨ IFSC.checkShareList(sig2,ANrecv_ID)
⑩SCsend [li_ID,li_DBaddr,sha_li]
→ANrecv;
req]→ANsend;
li_ID)
rand_key);
ANrecv;
en_r_key);
基于區(qū)塊鏈可追溯和不可篡改的特性,可解決數(shù)據(jù)安全可信問題.業(yè)務系統(tǒng)產(chǎn)生的電子證照數(shù)據(jù)在寫入數(shù)據(jù)庫時,同步向區(qū)塊鏈平臺寫入1個節(jié)點數(shù)據(jù).證照產(chǎn)生后會有變更、年檢、注銷、廢止等狀態(tài).區(qū)塊鏈對證照變更申請、審核人員、審核結(jié)果、審核時間等信息記鏈,以對證照進行全過程管理.每次訪問或調(diào)用證照數(shù)據(jù)時都將數(shù)據(jù)庫中的數(shù)據(jù)進行哈希計算,并與區(qū)塊鏈節(jié)點上的哈希值比較,確保證照數(shù)據(jù)的完整性和可信性.
授權(quán)應用點主要包括:1)當電子證照到期時,智能合約自動執(zhí)行,將證照狀態(tài)改為無效狀態(tài),規(guī)避過期證照使用問題;2)根據(jù)證照類型及業(yè)務屬性,將共享方式分為無條件共享、有條件共享和不予共享.對于有條件共享的,可將共享條件固化為智能合約,證照被調(diào)用訪時按智能合約自動執(zhí)行.
如圖3所示,電子證照應用授權(quán)智能合約應用過程如下:1)首先電子證照服務提供方將電子證照共享目錄上鏈,上鏈內(nèi)容包含證照共享服務目錄列表;2)數(shù)據(jù)使用方申請電子證照共享資源;3)數(shù)據(jù)提供方審核數(shù)據(jù)使用方的調(diào)用申請,建立智能合約,申請審核過程可追蹤且不可逆轉(zhuǎn);4)調(diào)用申請通過審核后可獲取共享資源.
圖3 證照共享智能合約過程
電子證照應用過程的上鏈內(nèi)容包含持證者、證件號碼、證照類型、用途、調(diào)用時間等,從而建立應用過程的分布式賬本.賬本中每條記錄都有時間戳和唯一的密碼簽名,使賬本成為所有交易的可審計歷史記錄,且數(shù)據(jù)不可篡改,便于應用審計.
利用零知識證明技術(shù)在提供完備證照驗證功能的同時,保障隱私不被泄露.其具備2點優(yōu)勢:1)匿名性.不會向驗證方透露除擁有證照之外的額外信息,可不用明示交易者多余信息,即可證明擁有相關(guān)證照.2)不可鏈接性.當1個人申請多個電子證照時,也不泄露這些證照歸屬同一身份,防止持證方的精準用戶畫像被泄露.
在傳統(tǒng)電子證照應用場景中,假設(shè)持證方Alice需要向Bob(商店職員)證明她有車管所發(fā)給她的駕照.Alice是持證方用戶,車管所是頒發(fā)者,商店職員Bob是驗證方.Alice為了向Bob證明她有駕駛證,Alice可以出示車管所頒發(fā)的電子證照.這樣Bob就可以看到Alice的名字、地址、年齡等,無形中泄露了Alice的隱私.
如圖4所示.Alice可使用區(qū)塊鏈生成一個“零知識證明”駕駛證的電子證照,該電子證照只顯示她擁有有效的駕照,沒有額外信息.在“零知識證明”驗證過程中:1)Bob(商店職員)只知道Alice有一個有效的執(zhí)照,他無法了解關(guān)于Alice的其他信息(匿名性);2)即使Alice多次訪問商店并生成多個電子證照,Bob(商店職員)也無法從這些電子證照中判斷來源同一個人(不可鏈接性),確保個人隱私不被泄露.
圖4 電子證照零知識證明
為防止證照信息被泄露,持證方可選擇加密存儲某些證照數(shù)據(jù).利用“加密存儲+解密白名單”來保護隱私,只有解密白名單中的驗證方才能獲得加密電子證照的密鑰來查看,實現(xiàn)精準授權(quán)驗證.
精準授權(quán)驗證過程如圖5所示.首先,生成一個隨機數(shù)K作為對稱加密密鑰并對文件進行加密,密文證照存儲到區(qū)塊鏈外數(shù)據(jù)庫中.然后,對密文證照進行哈希計算,得到哈希值作為密文文件的ID,在智能合約中使用這個ID作為文件索引.接下來,電子證照授權(quán)給驗證方進行驗證,就用對方用戶的公鑰對K進行加密,加密后的多個K排在一起形成授權(quán)解密白名單,白名單附加在電子證照ID之后寫入?yún)^(qū)塊鏈.最后,只有得到授權(quán)的驗證方才可以用自己的私鑰解密得到K,再用K解密鏈外數(shù)據(jù)庫中的密文證照,獲取電子證照明文.
圖5 電子證照精準授權(quán)驗證
本文系統(tǒng)基于Hyperledger Fabric開發(fā)環(huán)境搭建,操作系統(tǒng)采用Ubuntu的64 b系統(tǒng).運用Hyperledger Fabric開發(fā)者測試網(wǎng)絡來配置模擬真實的網(wǎng)絡環(huán)境.系統(tǒng)服務器端的主要開發(fā)語言是Java(版本JDK 1.8.0_121).
5.2.1 單場景測試
因篇幅有限,僅以使用率較高的電子證照檢索實驗數(shù)據(jù)為例.如表2所示,電子證照檢索服務分別為1 000,2 000,3 000個用戶并發(fā),平均事務響應時間均小于3 s,且事務均全部通過,符合性能指標.
表2 單場景測試實驗結(jié)果
5.2.2 混合場景測試
混合場景測試結(jié)果如表3所示.測試采用2 000個并發(fā)線程,持續(xù)運行時間5 min.其中電子證照檢索服務占26%,其他業(yè)務占10%或8%,模擬真實使用情況.平均事務響應時間均小于3 s,且事務通過率均為100%,符合性能指標.
表3 混合場景測試實驗結(jié)果
圍繞數(shù)據(jù)機密性、完整性、可用性、抗依賴性、可追溯性、真實性進行測試.其中可用性測試包含在5.2節(jié)功能測試中.如表4所示,機密性、完整性、可用性、抗依賴性、可追溯性、真實性均測試通過,表明系統(tǒng)具有較好的安全性.
表4 安全測試實驗結(jié)果
區(qū)塊鏈本質(zhì)上是一個基于共識機制、利用智能合約的分布式賬本.本文將區(qū)塊鏈技術(shù)與電子證照相結(jié)合,借助區(qū)塊鏈的去中心化同步記賬,可通過任意部門提供證照證明服務;基于區(qū)塊鏈可追溯、不可篡改、透明公開的特性,解決傳統(tǒng)信息存儲系統(tǒng)中證照信息與操作記錄的安全存儲、可信共享、存證追溯問題;基于智能合約和零知識證明來保護個人及企業(yè)隱私.系統(tǒng)通過了功能測試和安全測試,表明本文方案具備可行性,并提升了安全性.