譚海波,周 桐,2,趙 赫,趙 哲,2,王衛(wèi)東,張中賢,盛念祖,2,李曉風
1(中國科學院 合肥物質(zhì)科學研究院,安徽 合肥 230031)
2(中國科學技術(shù)大學,安徽 合肥 230026)
通訊作者:趙赫,E-mail:zhaoh@hfcas.ac.cn
檔案是一種重要的數(shù)據(jù)記錄,是人們在各種社會活動中直接形成的具有保存價值的原始信息.區(qū)別于一般的圖書情報資料和電子文檔信息,檔案的本質(zhì)屬性是原始記錄性,它使得檔案能夠還原真實的歷史狀況,因而具備重要的保存與參考價值,并且擁有法律效力.
隨著IT 技術(shù)的高速發(fā)展,人們大規(guī)模地運用數(shù)字化的手段來提升檔案的存儲和處理效率.現(xiàn)有的數(shù)字檔案系統(tǒng)為檔案的管理工作帶來便利的同時,仍然存在以下主要問題[1]:(1)相比傳統(tǒng)的紙質(zhì)物理檔案,數(shù)字檔案作為保存在存儲介質(zhì)上的比特字節(jié),具有高度的易變性,并且數(shù)字檔案在存儲、傳輸和處理等過程中容易被修改;(2)每個檔案館都是檔案信息的“孤島”,檔案館之間缺乏安全有效的檔案共享渠道;(3)現(xiàn)有的數(shù)字檔案保護方案大多是通過數(shù)字水印和數(shù)字簽名等技術(shù)實現(xiàn),在檔案遭到篡改或破壞后一般難以恢復.
檔案數(shù)據(jù)的真實性和原始性主要依賴于對系統(tǒng)中心或第三方實體的信任,如系統(tǒng)主節(jié)點、中心數(shù)據(jù)庫以及系統(tǒng)負責人、數(shù)據(jù)庫管理員等.一旦上述系統(tǒng)中心不再可信(例如系統(tǒng)數(shù)據(jù)庫遭入侵,或管理員被脅迫或收買),檔案數(shù)據(jù)的真實性將蕩然無存.
區(qū)塊鏈是一種運行于對等網(wǎng)絡中各節(jié)點遵從特定共識機制的公共賬本技術(shù),它具有去中心化、無需信任、防篡改性強等優(yōu)點[2-4],有望解決現(xiàn)有數(shù)字檔案館中普遍存在的數(shù)據(jù)安全性低、共享性差等問題.本文基于區(qū)塊鏈以及IPFS(inter planetary file system)[5]、數(shù)字簽名和混合加密等技術(shù),提出了以下解決方法.
1)數(shù)字檔案館之間構(gòu)建聯(lián)盟鏈,共同管理和維護此區(qū)塊鏈的穩(wěn)定運行,并將數(shù)據(jù)快照定期與公有鏈進行錨定,保障數(shù)據(jù)安全的同時,降低了數(shù)據(jù)保護成本;
2)通過私有IPFS 集群加密存儲檔案原始數(shù)據(jù),配合鏈上的智能合約存儲檔案指紋等摘要信息,實現(xiàn)了檔案信息的保護、驗證、恢復與共享;
3)采用將檔案修改記錄和檔案摘要歷史版本存儲到智能合約上的方式,實現(xiàn)了對檔案修改操作責任人的追責和檔案歷史版本的回溯;
4)基于本文提出的數(shù)據(jù)檔案保護和共享方法,研發(fā)了檔案數(shù)據(jù)保護與共享系統(tǒng),該系統(tǒng)與傳統(tǒng)的檔案管理系統(tǒng)以接口的形式進行對接,為現(xiàn)有的檔案數(shù)據(jù)提供額外的安全保護.
本文第1 節(jié)介紹數(shù)字檔案館建設和區(qū)塊鏈數(shù)據(jù)保護領域的相關工作.第2 節(jié)介紹本方法涉及的區(qū)塊鏈和IPFS 等相關技術(shù).第3 節(jié)介紹整體架構(gòu),包括系統(tǒng)架構(gòu)和智能合約架構(gòu).第4 節(jié)介紹方法的具體設計.第5 節(jié)介紹方法的具體實現(xiàn).第6 節(jié)對本方法進行分析與評估.最后在第7 節(jié)對本文工作進行總結(jié).
自20 世紀90 年代起,美國就開始了數(shù)字檔案館的相關研究[6],并隨后推廣到其他發(fā)達國家.2004 年,美國華盛頓州數(shù)字檔案館完成建設,存儲了超過1 億份檔案文件,其中部分檔案通過網(wǎng)絡共享至其他國家[7].2009 年,瑞士國家數(shù)字檔案館建設完成,通過多地備份等機制,實現(xiàn)檔案文件的長期儲存[8].上世紀90 年代末,我國國家檔案局提出了構(gòu)建數(shù)字檔案館的規(guī)劃,以實現(xiàn)紙質(zhì)檔案和音、視頻檔案的數(shù)字化,達到檔案的長期存儲、高效共享和快捷查詢等目標[9].2014 年,國家檔案局《數(shù)字檔案室建設指南》中明確提出了數(shù)字檔案室的建設原則及內(nèi)容[10],為推動我國數(shù)字檔案館的建設與發(fā)展奠定了基礎.2015 年,肖敏等人基于大數(shù)據(jù)分析技術(shù),挖掘各類數(shù)字檔案之間的關聯(lián)性和潛在價值,為檔案管理人員提供更有針對性的決策建議[11].2016 年,福建省數(shù)字檔案館信息平臺的建設過程中,利用了云計算等技術(shù)來解決檔案分散各地的“孤島效應”問題,提升了檔案的共享、處理和存儲效率[12].2017 年,王偉等人在數(shù)字檔案館建設過程中融合了射頻識別技術(shù)(RFID),在增加數(shù)字檔案安全性的同時,提高了檔案管理工作的效率[13].
數(shù)字檔案的相關規(guī)范標準已日趨完善,大數(shù)據(jù)、云計算、物聯(lián)網(wǎng)等新技術(shù)正逐步應用到數(shù)字檔案館的建設中.但受限于中心化的存儲技術(shù)與管理方式,檔案的原始性、真實性和安全性等問題尚未得到妥善解決,檔案被偽造、竊取和篡改等惡性事件屢有發(fā)生[14].
近年來,國內(nèi)外許多研究人員和機構(gòu)運用區(qū)塊鏈技術(shù)在數(shù)據(jù)保護與共享領域進行一些探索與實踐[1].2013年,Araoz 等人創(chuàng)立了Proof of Existence 項目,通過將哈希值存儲到區(qū)塊鏈交易OP_RETURN 字段的方法,實現(xiàn)了電子文件的真實性保護[15].Vaughan 等人提出了Chainpoint 項目,基于區(qū)塊鏈實現(xiàn)了一種通用的文件保護框架,該方案計算文件哈希值并以此構(gòu)建默克爾樹[16],以降低數(shù)據(jù)保護的成本[17].2016 年,Azaria 等人利用智能合約構(gòu)建了去中心化的醫(yī)療數(shù)據(jù)訪問與權(quán)限管理系統(tǒng),實現(xiàn)患者對其醫(yī)療數(shù)據(jù)的所有權(quán),使其自主地對醫(yī)療記錄進行分享與管理[18].同年11 月,蔡維德等人提出了基于區(qū)塊鏈的應用系統(tǒng)開發(fā)方法,包含了賬戶鏈、交易鏈雙鏈設計模型,以及鏈上代碼并行執(zhí)行模型應用原則[19].2017 年,Rifi 等人[20]通過IPFS 存儲物聯(lián)網(wǎng)(IoT)設備數(shù)據(jù)、智能合約控制訪問權(quán)限的方式,實現(xiàn)了IoT 設備數(shù)據(jù)的訪問保護.但該方案基于公有區(qū)塊鏈和公有IPFS 實現(xiàn),仍然具有數(shù)據(jù)存儲成本高和隱私性較差等問題.同年,螞蟻金服公司基于區(qū)塊鏈技術(shù)開展捐贈善款流向的追蹤管理,提升其系統(tǒng)和數(shù)據(jù)的透明性、可追溯性和不可篡改性[21].2018 年,百度將區(qū)塊鏈技術(shù)應用于百度百科的數(shù)據(jù)保護,將百科詞條每次更新的歷史版本和作者、編輯時間等信息記錄到區(qū)塊鏈上,達到數(shù)據(jù)保護與存證的目的[22].2017 年9 月,薛騰飛等人綜合利用了區(qū)塊鏈、MIFS、AFS 和DDBS 等技術(shù),提出了基于區(qū)塊鏈的醫(yī)療數(shù)據(jù)共享模型,實現(xiàn)了各醫(yī)療機構(gòu)的數(shù)據(jù)共享/但是該方案依然將醫(yī)療數(shù)據(jù)存儲在中心化數(shù)據(jù)庫中,沒有很好地解決醫(yī)療數(shù)據(jù)篡改和恢復等問題[23].同年10 月,章寧等人利用區(qū)塊鏈、數(shù)據(jù)庫和非對稱加密等技術(shù),實現(xiàn)了一種基于區(qū)塊鏈的個人隱私數(shù)據(jù)保護的解決方案框架,初步實現(xiàn)了在互聯(lián)網(wǎng)租車場景中個人隱私的保護/但是該方案設計的數(shù)據(jù)交互審計平臺運行在中心化服務器上,仍然可能存在安全性和穩(wěn)定性方面的隱患[24].自2014 年起,該實驗室的研究團隊也開展了區(qū)塊鏈技術(shù)的相關研究,并在物聯(lián)網(wǎng)和醫(yī)療健康數(shù)據(jù)[25-28]等多個應用場景進行了實踐[1].
一般而言,區(qū)塊鏈結(jié)構(gòu)是以數(shù)據(jù)區(qū)塊為單位、按照時間順序鏈接而成;數(shù)據(jù)區(qū)塊則是由分布式節(jié)點通過共識算法產(chǎn)生、并以一定的經(jīng)濟激勵確保所有節(jié)點都有動力參與到區(qū)塊鏈的活動中來.分布式系統(tǒng)中的所有節(jié)點地位均等,不存在任何中心化的特殊節(jié)點,且每個節(jié)點均會驗證區(qū)塊數(shù)據(jù)、傳播區(qū)塊數(shù)據(jù),從而保證少量節(jié)點的作惡不會影響到整個區(qū)塊鏈系統(tǒng)的運行.區(qū)塊鏈可分為公有鏈、私有鏈、聯(lián)盟鏈,其中,公有鏈被稱為非許可鏈,任何組織或個人都可以參與共識,并具有數(shù)據(jù)的讀寫權(quán)限;私有鏈適用于單位或組織的內(nèi)部系統(tǒng)使用[29],其數(shù)據(jù)的讀寫權(quán)限是由該組織控制的,不能夠完全解決信任問題;聯(lián)盟鏈也被稱為許可鏈,其共識由聯(lián)盟成員參與,數(shù)據(jù)讀寫權(quán)限按聯(lián)盟規(guī)則制定,節(jié)點的加入需要聯(lián)盟其他節(jié)點的同意.主流的公有鏈和聯(lián)盟鏈實例比較[30]見表1.
Table 1 Comparision between mainstream permission and permissionless blockchains表1 主流的公有鏈和聯(lián)盟鏈實例比較
共識算法致力于解決在去中心化的分布式互連網(wǎng)絡中所有的節(jié)點如何達成一致的問題[32].目前,區(qū)塊鏈系統(tǒng)中的共識算法主要包括工作量證明(proof of work,簡稱PoW)、股權(quán)證明(proof of stake,簡稱PoS)和權(quán)威證明(proof of authority,簡稱PoA)等[32-34],其中,比特幣采用PoW 共識算法,要求系統(tǒng)的各節(jié)點基于自身算力共同求解一個計算復雜但驗證容易的數(shù)學難題,最快解決該難題的節(jié)點將獲得一個區(qū)塊打包的權(quán)利;在PoS 系統(tǒng)中,持有最多數(shù)字貨幣而非最高算力的節(jié)點具有最大的概率打包下一個區(qū)塊,從而解決了PoW 中算力資源浪費的問題;PoA 則是一種由指定的權(quán)威節(jié)點產(chǎn)生區(qū)塊的共識機制,所有的權(quán)威節(jié)點地位相同,可以通過投票的方式踢出或加入權(quán)威節(jié)點[35].相比于PoW 和PoS 共識機制,雖然PoA 的去中心化程度以及節(jié)點的競爭公平性和匿名性較弱,但是可靠的權(quán)威節(jié)點認證機制和高效的共識效率更加適用于聯(lián)盟鏈的使用場景,并且避免了算力浪費和51%攻擊的問題.現(xiàn)實場景中的每個數(shù)字檔案館維護一個權(quán)威節(jié)點,由組織機構(gòu)的聲譽擔保,每個檔案館都會積極遵守共識算法,維護聯(lián)盟鏈運行,不會輕易做出損害自身名譽的行為.
智能合約是可以在區(qū)塊鏈上自動執(zhí)行的特殊程序,其特點是程序代碼以及數(shù)據(jù)均存儲于鏈上,因此擁有防篡改性強、去中心化程度高等特點[36,37].智能合約以交易的形式被創(chuàng)建和調(diào)用,合約程序在分布式網(wǎng)絡中的所有節(jié)點被執(zhí)行,因此不存在中心節(jié)點,且任何節(jié)點發(fā)生故障都不會影響合約程序的運行[1].以太坊是主流的支持智能合約的區(qū)塊鏈,通過以太坊虛擬機實現(xiàn)了智能合約的功能,允許開發(fā)人員使用類似JavaScript 語法的高級語言Solidity 進行智能合約的開發(fā)[38].
IPFS 是全球互聯(lián)的分布式文件系統(tǒng),它綜合了包括分布式哈希表、塊交換、版本控制系統(tǒng)和自我認證文件等系統(tǒng)的優(yōu)點,具有內(nèi)容可尋址、不可篡改、去中心化等特點[39].在存儲文件時,IPFS 會根據(jù)文件內(nèi)容計算得出文件指紋,在獲取文件時,IPFS 根據(jù)文件指紋從存儲節(jié)點中取出文件并驗證之后返回給用戶[1].IPFS 分為私有集群和公有集群:公有集群是指全網(wǎng)IPFS 節(jié)點構(gòu)成的分布式網(wǎng)絡,任何人均可作為一個節(jié)點加入到該網(wǎng)絡中;私有集群僅限于某個團體或組織內(nèi)部使用,具有相同swarm-key 的節(jié)點才可以參與到該網(wǎng)絡中[40].
如圖1 所示,本文提出的數(shù)據(jù)檔案保護和共享方法由數(shù)字檔案館、聯(lián)盟區(qū)塊鏈、公有區(qū)塊鏈、私有IPFS集群、系統(tǒng)服務(RESTful service)這5 部分構(gòu)成系統(tǒng)協(xié)同完成:數(shù)字檔案館(digital archive,簡稱DA)作為數(shù)字檔案聯(lián)盟的權(quán)威節(jié)點參與到聯(lián)盟區(qū)塊鏈中,享有檔案保護、驗證、共享等服務;系統(tǒng)服務是一種去中心化應用(DApp),本身不存儲任何檔案數(shù)據(jù)和身份信息,以RESTful 接口的形式為數(shù)字檔案館系統(tǒng)提供智能合約和IPFS接口調(diào)用;公有區(qū)塊鏈采用基于PoW 共識算法的以太坊區(qū)塊鏈(ethereum),通過定期存儲聯(lián)盟鏈區(qū)塊快照信息,實現(xiàn)了對聯(lián)盟鏈上數(shù)據(jù)的保護;聯(lián)盟區(qū)塊鏈采用基于PoA 共識算法的以太坊聯(lián)盟鏈,通過智能合約存儲檔案館的數(shù)字身份和檔案的摘要信息,實現(xiàn)了身份的注冊與恢復和檔案的保護與共享等業(yè)務邏輯,并通過定期與公有鏈錨定的方式增強數(shù)據(jù)的原始性和真實性保護;私有IPFS 集群存儲了加密檔案的原始信息,并通過swarm.key進行節(jié)點的身份認證,通過分布式哈希表(DHT)[41]、塊交換(BitTorrent)[42]等技術(shù)保障了數(shù)據(jù)的安全性.基于公有區(qū)塊鏈、聯(lián)盟區(qū)塊鏈和私有IPFS 集群結(jié)合的數(shù)字檔案數(shù)據(jù)流如圖2 所示.
Fig.1 System artchitecture diagram圖1 系統(tǒng)架構(gòu)圖
Fig.2 Data flow chart of digital archives圖2 數(shù)字檔案數(shù)據(jù)流圖
本方法主要利用智能合約一致性和不可篡改的特性,在區(qū)塊鏈原始安全功能的基礎上,還具有靈活性和可編程性.本方法的智能合約體系(如圖3 所示)由公有鏈中區(qū)塊數(shù)據(jù)保護合約(block data protection contract,簡稱BAPC)和聯(lián)盟鏈合約共同構(gòu)成:BAPC 合約部署在公有鏈中,并存儲聯(lián)盟鏈的數(shù)據(jù)快照信息;聯(lián)盟鏈中的智能合約包括數(shù)字身份控制合約(digital identity controller contract,簡稱DICC)、數(shù)字身份管理合約(digital identity manage contract,簡稱DIMC)、數(shù)字檔案管理合約(digital archive manage contract,簡稱DAMC)等.
Fig.3 Structure chart of smart contracts圖3 智能合約架構(gòu)圖
· DICC 作為全局合約記錄該聯(lián)盟鏈中所有檔案館的數(shù)字身份標識(SC-ID)、對應的公鑰(PubKey)和與其相關聯(lián)的DIMC 和數(shù)字檔案管理合約(DMAC).在創(chuàng)建DICC 合約時,首個檔案館的數(shù)字身份以及相關合約被一同創(chuàng)建;
· DIMC 通過民主投票的方式實現(xiàn)檔案館聯(lián)盟數(shù)字身份的內(nèi)部自治,包括身份創(chuàng)建投票合約(identity creation vote contract,簡稱ICVC)和身份重置合約(identity reset vote contract,簡稱IRVC):ICVC 合約用于為新加入聯(lián)盟的檔案館在DICC 合約中創(chuàng)建投票請求并為其投票;IRVC 合約用于在檔案館私鑰泄露時,通過民主投票的方式重置其公鑰.
· DAMC 用于實現(xiàn)數(shù)字檔案保護、驗證、恢復和共享等業(yè)務邏輯,包括檔案信息存儲合約(archive information storage contract,簡稱AISC)、檔案共享(信息)存儲合約(archive sharing storage contract,簡稱ASSC)和檔案權(quán)限控制合約(archive authority control contract,簡稱AACC):AACC 合約用于數(shù)字檔案的權(quán)限控制;AISC 合約用于存儲檔案的摘要信息,包括數(shù)字檔案對象(DocJSON)的IPFS 地址、哈希值、版本號、創(chuàng)建時間和最后修改時間等;ASSC 合約用于存儲檔案館分享的檔案信息,包括檔案編號(DocID)、檔案館身份標識(SC-ID)和分享時間等.一個DocID 可以共享給多個SC-ID 訪問.ASSC 中的SC-ID 的分類如表2 所示:若DocID 對應的SC-ID 的值為-1,則該檔案是完全對外部開放的,外部用戶或檔案館都可以直接從ASSC 合約中獲取檔案IPFS 地址;若為0,則聯(lián)盟內(nèi)部的所有成員都訪問;若SC-ID 的值≥1 時,則只有指定SC-ID 的檔案館有權(quán)訪問該檔案.
Table 2 SC-ID classification表2 SC-ID 分類
數(shù)字檔案的數(shù)字身份代表此檔案館參與到聯(lián)盟鏈中,是檔案保護、共享等活動的基礎.每個希望加入聯(lián)盟的數(shù)字檔案館都需要獲得半數(shù)以上聯(lián)盟成員的同意,方可為其在聯(lián)盟中完成數(shù)字身份的注冊.具體流程如下.
· 首先,加入聯(lián)盟的數(shù)字檔案館基于ECDSA 橢圓曲線算法[43]在本地秘密地生成公私密鑰對〈PK,SK〉,其中,SK本地秘密存儲;
· 然后,通過可靠信道,將PK及其身份信息發(fā)送給聯(lián)盟內(nèi)的所有成員,并委托某個成員通過其ICVC 合約創(chuàng)建數(shù)字身份的投票請求,其他成員則通過其ICVC 合約參與投票;
· 最后,當票數(shù)超過半數(shù)時,DICC 合約保存該檔案館的公鑰信息,然后為其生成SC-ID 并創(chuàng)建DIMC 和DAMC 等一系列合約,從而完成數(shù)字檔案館身份的注冊.
由于私鑰由檔案館秘密存儲,一旦內(nèi)部人員或黑客非法竊取到私鑰,就可以偽造該檔案館的身份進行檔案的查看、修改和分享等操作.因此,一方面需要檔案館妥善保管SK,避免因管理不善導致SK的泄露;另一方面,本文設計了基于投票機制的密鑰重置方案.
· 首先,檔案館秘密地重新生成一對新的公私密鑰〈PKNEW,SKNEW〉,通過可靠信道,將新的PKNEW和SC-ID等信息發(fā)送給聯(lián)盟內(nèi)的其他成員,并請求某一成員為其創(chuàng)建重置投票;
· 其他聯(lián)盟成員為其進行重置投票,當票數(shù)超過半數(shù)時,DICC 合約重置該檔案館的公鑰.
本方法在設計過程中充分考慮了檔案館密鑰重置的可能,通過身份編號SC-ID 實現(xiàn)了公鑰與業(yè)務邏輯的解耦.檔案查詢與共享等操作都基于SC-ID 進行權(quán)限判斷,即使重置了DICC 合約中的公鑰,只要簽名對應的公鑰與DICC 中的SC-ID 保持一致,依然可以驗證檔案館的數(shù)字身份.
數(shù)字檔案保護是指通過聯(lián)盟鏈和公有鏈的鏈上智能合約,配合IPFS 私有集群將數(shù)字檔案存儲在區(qū)塊鏈上,防止其內(nèi)容被非法篡改和破壞,并提供驗證和恢復等操作,從而達到保護數(shù)字檔案的目的.新增檔案是將數(shù)字檔案對象DocJSON 保護在鏈下的私有IPFS 集群和其檔案指紋保存在鏈上的AISC 合約中;更新檔案則將每次更新生成的DocJSON 檔案對象和更新檔案時產(chǎn)生的數(shù)據(jù)進行保護.如圖4 所示,數(shù)字檔案對象是JSON 形式的檔案信息組織結(jié)構(gòu),包含檔案編號、版本號、創(chuàng)建時間、操作管理員和檔案附件等信息.
Fig.4 Structure diagram of JSON of digital archives圖4 數(shù)字檔案JSON 對象結(jié)構(gòu)圖
檔案新增流程見算法1,DA 首先生成一對隨機的密鑰edk(key,iv)用于檔案附件和檔案對象的加密,然后,先用edk 對檔案附件加密后存儲到IPFS 集群,并將附件哈希值()、加密附件的指紋()和其他檔案屬性整合為檔案對象(DocJSON)加密后存入IPFS 集群,并對檔案館身份(SC-ID)、檔案編號(DocID)、檔案對象哈希值()和加密檔案對象的檔案指紋()等信息進行簽名,通過RESTful Service 發(fā)送到智能合約進行處理.AISC 合約收到新增檔案請求后,調(diào)用AACC 合約從簽名中恢復公鑰信息,并與DICC 合約中登記的密鑰進行對比:若身份檢查通過,則在合約中添加檔案編號與摘要等信息的映射.
算法1.Saving of Archive.
檔案更新操作流程與新增類似,不同之處在于DA 不會重新生成edk,而是使用在新增檔案時創(chuàng)建的edk;DA會根據(jù)DocID 從AISC 合約和IPFS 中取出DocJSON 并解密,然后根據(jù)更新的檔案信息生成新的DocJSON 并在加密后存儲至IPFS 和AISC 合約中.
檔案驗證操作包括公有鏈對聯(lián)盟鏈上的數(shù)據(jù)驗證、聯(lián)盟鏈對IPFS 中檔案數(shù)據(jù)的驗證和DocJSON 對檔案館本地數(shù)據(jù)庫中檔案信息的驗證這3 部分,具體流程見算法2.
算法2.Validation of Archives.
DA 對SC-ID,DocID 等信息進行簽名發(fā)送到RESTful Service 處理,Service 收到請求后,從公有鏈上的BDPC合約中獲取最新的聯(lián)盟鏈區(qū)塊快照信息,并與聯(lián)盟鏈中的區(qū)塊信息進行比對驗證:若驗證不通過,則返回聯(lián)盟鏈數(shù)據(jù)異常錯誤;若驗證通過,則將簽名發(fā)送到智能合約處理.AISC 合約收到請求后,先通過AACC 合約對檔案館身份進行檢查,然后,根據(jù)DocID 從合約中查詢該檔案的摘要信息List〈DocJSONipfs,DocJSONhash〉并返回.DA 從AISC 合約獲取信息后,先根據(jù)DocJSONipfs從IPFS 集群中獲取DocJSONciphertext,然后根據(jù)本地的edk信息解密得到DocJSONplaintext,并驗證其哈希值是否與DocJSONhash一致:若驗證不通過,則返回IPFS 數(shù)據(jù)異常錯誤.最后,將可信任的DocJSONplaintext與本地數(shù)據(jù)庫中的檔案信息進行比對驗證:若驗證不通過,則返回本地數(shù)據(jù)異常的錯誤.
在檔案驗證過程中產(chǎn)生的數(shù)據(jù)異常錯誤,本文提供與之對應的恢復手段.
· 聯(lián)盟區(qū)塊鏈數(shù)據(jù)異常:通過聯(lián)盟鏈和公有鏈上的BDPC 合約存儲的區(qū)塊信息進行比對,發(fā)現(xiàn)異常后可以繼續(xù)與BDPC 合約之前存儲的區(qū)塊信息進行對比,定位出異常區(qū)塊高度,并在聯(lián)盟鏈中基于此區(qū)塊高度重新開始創(chuàng)建新的區(qū)塊;
· IPFS 集群數(shù)據(jù)異常:由于AISC合約中保存有該檔案各歷史版本的數(shù)字指紋和哈希值,一旦系統(tǒng)偵測到當前檔案信息被篡改,可恢復前期已保存的正確版本;
· 本地數(shù)據(jù)庫數(shù)據(jù)異常:依照鏈上保存的可信檔案文件來重置本地數(shù)據(jù)庫被攻擊者篡改的檔案.相較于去中心化的區(qū)塊鏈及IPFS,本地數(shù)據(jù)庫中的檔案數(shù)據(jù)更易被篡改,因此這是本方案中需要重點考慮的保護內(nèi)容.
數(shù)字檔案的共享是指在數(shù)字檔案聯(lián)盟成員內(nèi)部或數(shù)字檔案聯(lián)盟與外部用戶之間,通過智能合約、IPFS 和混合加密機制實現(xiàn)了安全可靠的檔案數(shù)據(jù)的共享,并使得傳統(tǒng)的檔案系統(tǒng)可以安全高效地獲取區(qū)塊鏈系統(tǒng),從而保護檔案數(shù)據(jù),具體流程如圖5 所示.
步驟1:數(shù)字檔案館A(DA-A)使用私鑰SKA對待分享檔案編號DocID、分享目標檔案館SC-ID-B 等信息進行簽名,并通過Service 發(fā)送到智能合約.ASSC 合約在收到請求后,先調(diào)用AACC 合約,通過簽名對檔案館身份進行檢查,檢查通過后,將SC-ID-B 寫入合約中DocID 對應的分享列表;
Fig.5 Flow chart of archievs sharing and acquisition圖5 檔案共享與獲取流程圖
步驟2:數(shù)字檔案館B(DA-B)使用私鑰SKB對待分享檔案編號DocID 和身份標識SC-ID-B 等信息進行簽名,并發(fā)送到智能合約.ASSC 合約在收到請求后,先調(diào)用AACC 合約對DA-B 進行見算法 3 的權(quán)限檢查,檢查通過后,返回檔案指紋和對應的哈希值;
算法3.Authority Check.
步驟3:DA-B 根據(jù)從合約中獲取的檔案指紋,從IPFS 集群中異步獲取加密的檔案對象DocJSONciphertext,同時,DA-B 通過異步https 請求將身份標識SC-ID-B 和DocID 發(fā)送給DA-A,獲取DocJSON 的解密密鑰;
步驟4:DA-A 收到DA-B 的請求后,根據(jù)DocID 和SC-ID-B 等參數(shù),通過ASSC 合約檢查共享記錄的真實性,并從DIMC 合約中獲取SC-ID-B 對應的PKB,然后使用PKB對解密密鑰edk進行非對稱加密,并返回給DA-B,見公式(1).
步驟5:DA-B 收到DA-A 的返回數(shù)據(jù)后,使用私鑰SKB進行解密得到原始的edk〈key,iv〉,然后使用edk對DocJSONciphertext進行解密,得到原始的檔案對象DocJSONplaintext;還可以根據(jù)JSON 結(jié)構(gòu)中的檔案附件指紋從IPFS 中獲取附件密文,并通過edk進行解密查看,見公式(2)~公式(4).
基于本文提出的數(shù)據(jù)檔案保護和共享方法研發(fā)了檔案數(shù)據(jù)保護與共享系統(tǒng),其實現(xiàn)主要分為區(qū)塊鏈智能合約開發(fā)、私有IPFS 集群搭建、RESTful Service(DApp)開發(fā)、數(shù)字檔案系統(tǒng)研發(fā)這4 部分.其中,
· 智能合約部分,首先使用puppeth 程序生成創(chuàng)世區(qū)塊的相關信息Creation.json,并為數(shù)字檔案館聯(lián)盟鏈中的初始檔案館分配權(quán)威節(jié)點;然后使用go-ethereum[44]客戶端,基于Creation.json 創(chuàng)建聯(lián)盟鏈中的節(jié)點;最后,使用go-ethereum 客戶端進行以太坊公有鏈的同步,以便實現(xiàn)進行公有鏈BAPC 合約的調(diào)用.本文使用Solidity 語言進行BAPC,DICC 等合約的開發(fā),并使用truffle 框架進行合約的管理、編譯、調(diào)試和部署;
· 對于IPFS 部分,本文使用了go-ipfs[45]客戶端進行本地私有IPFS 集群的搭建,通過環(huán)境變量LIBP2P_FORCE_PNET 的配置啟用私有集群模式,限制僅具有相同swarm.key 文件的節(jié)點可進行訪問;
· 對于RESTful Service(DApp),本文采用基于Node.js 的Web 框架Express 進行開發(fā),并通過web3.js 實現(xiàn)了對智能合約的調(diào)用,通過js-ipfs-api 實現(xiàn)了對私有IPFS 的接口調(diào)用.
本系統(tǒng)已在中國科學院合肥物質(zhì)科學研究院檔案館(下屬多個研究所,形成聯(lián)盟)進行初步試用,對研究院的基建檔案和大科學工程等檔案進行保護,在現(xiàn)有的傳統(tǒng)檔案管理系統(tǒng)的基礎上,將錄入和更新操作的檔案信息通過RESTful Service 接口同步到區(qū)塊鏈上,并為傳統(tǒng)檔案管理系統(tǒng)增加了檔案的驗證、共享和恢復功能.
數(shù)字檔案驗證操作的界面如圖6 所示,檔案的修改歷史追溯和分享界面如圖7 所示;每個檔案館運行了一個權(quán)威節(jié)點和多個數(shù)據(jù)同步節(jié)點,自2018 年5 月至今檔案聯(lián)盟鏈已創(chuàng)建1 057 459 區(qū)塊,保護了10 342 條檔案信息.
Fig.6 Interface of verification results of digital archives圖6 數(shù)字檔案驗證界面
Fig.7 Interface of digital archives history and sharing圖7 數(shù)字檔案歷史和分享界面
假設系統(tǒng)中每月需進行檔案保護操作的次數(shù)為α,檔案分享操作次數(shù)為β,身份管理操作次數(shù)為γ,則在以太坊公有鏈上部署智能合約的每月成本為Costethereum,見公式(5).
本文提出的聯(lián)盟鏈與公有鏈相結(jié)合的方案,可以將大多數(shù)智能合約部署于聯(lián)盟鏈中,在聯(lián)盟鏈中部署和調(diào)用合約的成本可以忽略不計,僅需考慮聯(lián)盟鏈網(wǎng)絡每月的運行成本記為ω.聯(lián)盟鏈每進行μ次數(shù)據(jù)存儲操作時調(diào)用公有鏈BDPC 合約錨定聯(lián)盟鏈中當前的區(qū)塊快照信息,錨定頻率可以動態(tài)調(diào)整,見公式(6).
在聯(lián)盟鏈規(guī)模較小時,可以頻繁錨定;隨著聯(lián)盟鏈的規(guī)模不斷擴大,系統(tǒng)的安全性、穩(wěn)定性隨之提升,錨定頻率也可以逐漸減小.μ參數(shù)的值越大,該方案的經(jīng)濟成本越低,BDPC 合約存儲的區(qū)塊高度間隔越大,對聯(lián)盟區(qū)塊鏈的保護和數(shù)據(jù)可恢復程度也會降低(如圖8 所示)[1].
Fig.8 Relations diagram between parameter μ and systemative cost and security圖8 參數(shù)μ與系統(tǒng)成本和安全性關系圖
根據(jù)EthGasStation 的數(shù)據(jù)統(tǒng)計[46],在撰寫本文時(2018 年5 月),以太坊調(diào)用智能合約的平均交易費用為8Gwei,折合成人民幣約為0.7 元.調(diào)用智能合約的交易費用與存儲數(shù)據(jù)的字節(jié)數(shù)的有關,為簡化計算,我們忽略該差異,統(tǒng)一使用平均交易費用.當聯(lián)盟鏈的運行成本ω(電力成本)忽略不計時,公有鏈和聯(lián)盟鏈結(jié)合的方案可以將經(jīng)濟成本大約縮減為原來的1/μ,見公式(7).
假設聯(lián)盟鏈中的區(qū)塊高度為α的快照信息存儲在公有鏈中高度為β的區(qū)塊中,距離當前區(qū)塊的高度差為h,若攻擊者想要通過分叉的方式替代該區(qū)塊,則需要重新計算并生成從第β個區(qū)塊到當前區(qū)塊高度的所有區(qū)塊,并通過全網(wǎng)節(jié)點的驗證.假設當前公有區(qū)塊鏈中誠實節(jié)點的算力為p次哈希每秒,攻擊者控制的節(jié)點算力為q次哈希每秒.只要沒有大量節(jié)點的加入或退出,新區(qū)塊的計算難度不會有明顯增加.為了方便計算,假設沒有新節(jié)點的加入,且每秒中誠實節(jié)點產(chǎn)生新區(qū)塊的概率為w,攻擊節(jié)點獲得新區(qū)塊的概率為u.假設h表示誠實節(jié)點與攻擊節(jié)點區(qū)塊高度差,則每秒高度差h有3 種可能的結(jié)果[28],即高度差縮小、高度差變大和高度差不變,每個結(jié)果出現(xiàn)的概率分別為P1,P2,P3.假設在t秒內(nèi)會出現(xiàn)t種結(jié)果,每個結(jié)果出現(xiàn)的次數(shù)用隨機變量X1,X2,X3表示,其中,X1表示發(fā)生的次數(shù)為n,X2表示發(fā)生的次數(shù)為m,X3表示發(fā)生的次數(shù)為t-m-n.誠實節(jié)點與攻擊節(jié)點的高度差h的變化概率符合多項分布[28].
如在t秒內(nèi),攻擊節(jié)點想要追上誠實節(jié)點,則需要滿足n∈[0,(t-h-1)/2].m=n+h+k,且1≤k≤t-2n-h,其概率見公式(8).
其中,P1=w(1-u)表示誠實節(jié)點產(chǎn)生新區(qū)塊,而攻擊節(jié)點沒有,即高度差變大的概率;P2=u(1-w)表示攻擊節(jié)點產(chǎn)生新區(qū)塊,而誠實節(jié)點沒有,即高度差縮小的概率;P3=1-P1-P2表示兩者都產(chǎn)生或都沒有產(chǎn)生新區(qū)塊的概率,即高度差不變的概率.
根據(jù)公式(8)得到攻擊節(jié)點成功篡改區(qū)塊數(shù)據(jù)的概率.如圖9 所示,h為攻擊者實現(xiàn)數(shù)據(jù)篡改需要替代的區(qū)塊數(shù)量,橫坐標T 為時間(單位:誠實節(jié)點發(fā)現(xiàn)一個區(qū)塊的平均時間),縱坐標P 為攻擊者篡改數(shù)據(jù)成功的概率.
Fig.9 Probability distribution when attackers successfully tampered with block data圖9 攻擊者成功篡改區(qū)塊數(shù)據(jù)的概率分布圖
由圖可知:攻擊者成功篡改區(qū)塊數(shù)據(jù)的概率會隨著區(qū)塊高度差h的增大而減小.當攻擊節(jié)點的算力小于誠實節(jié)點時,由于攻擊節(jié)點需要預先生成新的h個區(qū)塊,然后再與誠實節(jié)點競爭產(chǎn)生區(qū)塊,在剛開始的一段時間內(nèi),P會先上升,然后逐漸減小并最終趨于0;當攻擊節(jié)點算力為誠實節(jié)點的25%、高度差h=4 時,攻擊成功的最高概率不到0.01%,高度差為6 和10 時,攻擊者成功的概率基本為0;當攻擊節(jié)點算力為誠實節(jié)點的50%、區(qū)塊高度差h=4 時,攻擊者成功的最高概率不到0.05%;當攻擊節(jié)點算力與誠實節(jié)點相當,在一段時間后,成功概率逼近35%[28].
在數(shù)字檔案保護的應用場景中,篡改檔案的操作往往是發(fā)生在與利益相關的一些考核過程中,往往距離檔案錄入日期較為久遠,因此區(qū)塊高度差x會為千或萬的數(shù)量級,即使攻擊節(jié)點與誠實節(jié)點相當時,完成這種規(guī)模的區(qū)塊替換操作也是幾乎不可能的.由于以太坊激勵機制的存在,假如攻擊者擁有如此巨大的算力,其作為誠實節(jié)點所產(chǎn)生區(qū)塊的獎勵也遠遠大于數(shù)據(jù)篡改的收益[47].
本方法通過公有鏈與聯(lián)盟鏈的結(jié)合實現(xiàn)了一種鏈式保護機制,通過公有鏈BDPC 合約錨定聯(lián)盟鏈的區(qū)塊快照信息,實現(xiàn)對聯(lián)盟鏈上數(shù)據(jù)的保護與驗證;通過聯(lián)盟鏈AISC 合約存儲檔案指紋和哈希值的方式,實現(xiàn)對IPFS 中檔案對象的保護與驗證;通過IPFS 存儲加密的原始檔案對象,實現(xiàn)對本地數(shù)據(jù)庫中的檔案信息的保護與驗證.但若僅采用以太坊公有鏈的方案,誠然此方案安全性最高,但是檔案的操作成本也隨之變高,并且操作效率較低(尤其是改變合約狀態(tài)等操作,需要公有鏈的礦工打包數(shù)據(jù)).此外,一旦公有鏈被攻擊(雖然概率很低),檔案系統(tǒng)也會受影響;若僅采用聯(lián)盟鏈的方案,運行的節(jié)點相對較少(尤其在運行初期),系統(tǒng)的安全性和穩(wěn)定性不如公有鏈,還會出現(xiàn)聯(lián)盟中部分成員共謀造假的風險;而采用基于聯(lián)盟鏈和公有鏈的方式,通過第6.1 節(jié)和第6.2節(jié)的分析可以看出:運行PoA 共識算法的以太坊聯(lián)盟鏈,本身具備較強的防篡改能力,此外,使用高安全性公有鏈進行額外保護,還能夠防范部分成員共謀造假對聯(lián)盟鏈進行攻擊的風險,并且不僅限于單一公有鏈,還可以拓展為多條公有鏈進行協(xié)同保護.3 種方案相互對比結(jié)果見表3.
Table 3 Comparision between different protection schemes表3 不同保護方案對比
本文基于智能合約、IPFS、數(shù)字簽名和混合加密等技術(shù)設計了一種基于區(qū)塊鏈的檔案數(shù)據(jù)保護與共享方法,并以此為基礎研發(fā)了檔案數(shù)據(jù)保護與共享系統(tǒng).該方法通過智能合約和數(shù)字簽名技術(shù)實現(xiàn)了檔案館聯(lián)盟的內(nèi)部自治;通過公有鏈與聯(lián)盟鏈的結(jié)合,實現(xiàn)了檔案數(shù)據(jù)的保護、驗證與恢復;利用智能合約和IPFS 技術(shù)實現(xiàn)了檔案數(shù)據(jù)的共享與獲取.未來工作中,我們將就檔案數(shù)據(jù)管理的區(qū)塊鏈共識機制開展進一步深入研究.總的來說,本文中的方案綜合考慮了經(jīng)濟成本、安全性、易用性和擴展性等問題,系統(tǒng)能以較低的經(jīng)濟開銷和較少的系統(tǒng)修改,實現(xiàn)對現(xiàn)有檔案管理系統(tǒng)中的檔案數(shù)據(jù)進行高效安全的保護與共享,為數(shù)字檔案館的建設和數(shù)字資源的保護提供一些有益的啟發(fā).