孟彩霞
鐵道警察學(xué)院 圖像與網(wǎng)絡(luò)偵查系,河南 鄭州 450053
區(qū)塊鏈技術(shù)與密碼算法是信息通信領(lǐng)域的重要研究方向,由于區(qū)塊鏈具有去中心化、不可篡改等特點(diǎn),在電子數(shù)據(jù)取證方面有著獨(dú)特優(yōu)勢(shì)[1]。在司法認(rèn)證制度改革、利用計(jì)算機(jī)犯罪案件日益增多的背景下,利用區(qū)塊鏈技術(shù)實(shí)現(xiàn)電子數(shù)據(jù)取證有望得到更廣泛的應(yīng)用。電子數(shù)據(jù)儲(chǔ)存于載體內(nèi),它是無(wú)形的,其內(nèi)容具有關(guān)聯(lián)性,可以用作量刑證據(jù)。然而,電子數(shù)據(jù)在正常情況下無(wú)法直接閱讀,如果沒(méi)有可以查看電子數(shù)據(jù)的載體,就難以關(guān)聯(lián)出案件情況,提取電子數(shù)據(jù)的難度很高[2]。目前,國(guó)內(nèi)對(duì)數(shù)據(jù)溯源的研究大多在理論層面和審查數(shù)據(jù)層面,國(guó)外對(duì)數(shù)據(jù)可追溯性的研究主要集中在可追溯性模型、可追溯性存儲(chǔ)、可追溯性應(yīng)用以及可追溯性數(shù)據(jù)的安全性等方面[3]。何蒲等[4]提出將具有唯一標(biāo)識(shí)的數(shù)據(jù)添加到區(qū)塊鏈中,解決現(xiàn)有數(shù)據(jù)溯源的難題,但并沒(méi)有實(shí)現(xiàn)最終方案?,F(xiàn)在較為流行的數(shù)據(jù)溯源模型是OPM 和PROV 模型,這些模型可移植性強(qiáng),可以在不同場(chǎng)景下實(shí)現(xiàn)數(shù)據(jù)溯源[1,4]。針對(duì)傳統(tǒng)電子數(shù)據(jù)存在集中存儲(chǔ)、易被修改等問(wèn)題,使用PROV 數(shù)據(jù)溯源模型,利用區(qū)塊鏈去中心化的特點(diǎn)與電子數(shù)據(jù)取證相結(jié)合,研究區(qū)塊鏈監(jiān)測(cè)和溯源取證的關(guān)鍵技術(shù)。
區(qū)塊鏈基于密碼學(xué)建立多方間的信任,區(qū)塊鏈的可信正是因?yàn)橛忻艽a學(xué)技術(shù)作支持。在區(qū)塊鏈技術(shù)中涉及很多加密算法,包括哈希算法、對(duì)稱(chēng)加密算法、非對(duì)稱(chēng)加密算法等。哈希算法是一種常見(jiàn)的單向加密算法,其功能是提取數(shù)據(jù)的指紋信息作為數(shù)據(jù)內(nèi)容的唯一標(biāo)識(shí)符對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)[5]。對(duì)稱(chēng)加密技術(shù)是采用同一個(gè)混淆因子,然后使用混淆算法對(duì)輸入數(shù)據(jù)進(jìn)行混淆,得到加密后的數(shù)據(jù),之后采用相同的混淆因子進(jìn)行逆運(yùn)算,可以得到原始輸入值。非對(duì)稱(chēng)密碼技術(shù)[6]是利用一對(duì)公鑰和私鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密。公鑰與私鑰一起出現(xiàn),數(shù)據(jù)擁有者可以利用公鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有使用與公鑰相對(duì)應(yīng)的私鑰才能成功解密。
在區(qū)塊鏈中,區(qū)塊不直接保存節(jié)點(diǎn)的交易信息,只保存交易的哈希值,如果有節(jié)點(diǎn)想要驗(yàn)證某個(gè)交易是否合法,可以驗(yàn)證區(qū)塊中存儲(chǔ)的哈希值,使區(qū)塊鏈具有防篡改的特性。時(shí)間戳是對(duì)文件創(chuàng)建、修改的時(shí)間進(jìn)行記錄,能夠證明一份文件的存儲(chǔ)、創(chuàng)建、修改發(fā)生于哪個(gè)時(shí)間點(diǎn)[7]。在生成區(qū)塊的過(guò)程中形成時(shí)間戳并寫(xiě)入?yún)^(qū)塊頭中,可以讓其他節(jié)點(diǎn)對(duì)交易進(jìn)行驗(yàn)證,實(shí)現(xiàn)整個(gè)區(qū)塊鏈的可信,保證區(qū)塊鏈數(shù)據(jù)的不可篡改和不可偽造。
在分布式系統(tǒng)中經(jīng)常使用一種數(shù)據(jù)結(jié)構(gòu)Merkle Tree(默克爾樹(shù)),這是一種哈希二叉樹(shù),能校驗(yàn)數(shù)據(jù)的完整性[8]。Merkle Tree 由一個(gè)根節(jié)點(diǎn)、若干子節(jié)點(diǎn)倒置組成,可用于驗(yàn)證區(qū)塊鏈中存儲(chǔ)、處理數(shù)據(jù)的真實(shí)性和可靠性。在構(gòu)造Merkle Tree 時(shí),首先要計(jì)算寫(xiě)入?yún)^(qū)塊鏈交易的哈希值,通常選用SHA-256 等哈希算法傳遞到根哈希值。將計(jì)算的交易哈希值進(jìn)行兩兩組合,由此計(jì)算出上一層哈希值,然后不斷重復(fù)組合計(jì)算,直到算出根哈希值。這種結(jié)構(gòu)使得產(chǎn)生的區(qū)塊頭部中只包含根哈希值,不需要把區(qū)塊下所有交易的哈希值寫(xiě)入?yún)^(qū)塊中,提高了區(qū)塊鏈的效率。在樹(shù)上交易產(chǎn)生的任何變動(dòng),都會(huì)傳遞到根節(jié)點(diǎn),根節(jié)點(diǎn)的哈希值驗(yàn)證了底層所有數(shù)據(jù)的完整性和一致性。因此,一旦發(fā)現(xiàn)交易數(shù)據(jù)被篡改,沿著Merkle Tree 節(jié)點(diǎn)哈希值的傳遞,最多通過(guò)運(yùn)行時(shí)間O(lgn)即可快速定位實(shí)際發(fā)生改變的數(shù)據(jù)。Merkle Tree能快速比對(duì)大量數(shù)據(jù),快速定位篡改位置。
共識(shí)機(jī)制是區(qū)塊鏈的核心組成要素,定義了區(qū)塊鏈如何工作。目前常用的共識(shí)機(jī)制包括工作量證明、權(quán)益證明、委托權(quán)益證明等[9]。工作量證明(PoW共識(shí)機(jī)制)是指通過(guò)完成一定計(jì)算量工作來(lái)證明某個(gè)節(jié)點(diǎn)不是惡意節(jié)點(diǎn),從而起到維護(hù)區(qū)塊鏈的作用。PoW 機(jī)制每次交易都能被快速驗(yàn)證,系統(tǒng)承擔(dān)了大量的節(jié)點(diǎn),導(dǎo)致用戶不能私自篡改交易記錄,從而自覺(jué)遵守規(guī)則。權(quán)益證明(PoS 共識(shí)機(jī)制)是指持有權(quán)益多者才有資格去證明,也就是賬本是由持幣最多者去記錄。與PoW 共識(shí)機(jī)制相比,PoS 的出塊速度更快,從根本上解決了大量運(yùn)算帶來(lái)的資源耗費(fèi)問(wèn)題,并且PoS 共識(shí)機(jī)制還排除了利益無(wú)關(guān)者對(duì)賬本的干擾,使整個(gè)系統(tǒng)更加安全[10]。委托權(quán)益證明(DPoS 共識(shí)機(jī)制)是一種基于投票選舉的共識(shí)算法,每個(gè)持有權(quán)益者都可以為其信任的代理人投票,代理人負(fù)責(zé)驗(yàn)證交易并為這些交易創(chuàng)建區(qū)塊,在完成職責(zé)的同時(shí)可以獲得一定收益。
一般情況下區(qū)塊鏈架構(gòu)有六層,其架構(gòu)模型如圖1 所示。區(qū)塊鏈中各個(gè)層都有不同的功能,任何一個(gè)區(qū)塊鏈都必須包含共識(shí)層、網(wǎng)絡(luò)層、數(shù)據(jù)層,而另外三層開(kāi)發(fā)者可以根據(jù)需求進(jìn)行開(kāi)發(fā),但區(qū)塊鏈的整個(gè)架構(gòu)都依照這個(gè)結(jié)構(gòu)進(jìn)行開(kāi)發(fā)。數(shù)據(jù)層負(fù)責(zé)封裝區(qū)塊,生成鏈結(jié)構(gòu);網(wǎng)絡(luò)層主要負(fù)責(zé)區(qū)塊鏈的P2P 網(wǎng)絡(luò)以及不同區(qū)塊鏈的傳播驗(yàn)證機(jī)制;共識(shí)層則封裝節(jié)點(diǎn)之間的各類(lèi)共識(shí)機(jī)制,保證數(shù)據(jù)進(jìn)入?yún)^(qū)塊鏈后的一致性,防止惡意節(jié)點(diǎn)摧毀區(qū)塊鏈。
圖1 區(qū)塊鏈基礎(chǔ)架構(gòu)
開(kāi)放溯源模型OPM 是在首屆國(guó)際來(lái)源與注釋研討會(huì)上提出的[11],目的是提供可用來(lái)交換的溯源信息,該模型支持的范圍很廣,可以應(yīng)用到任何需要數(shù)據(jù)溯源的地方。在這個(gè)模型中,溯源記錄是一個(gè)有方向但是不會(huì)形成環(huán)狀的圖形,代理、過(guò)程和工件是模型的節(jié)點(diǎn)。雖然OPM 可以應(yīng)用于很多場(chǎng)景,但在實(shí)際操作中,實(shí)現(xiàn)OPM 的過(guò)程有一定難度,主要表現(xiàn)為一些專(zhuān)業(yè)術(shù)語(yǔ)和用法介紹得比較模糊,并且一些概念設(shè)計(jì)不恰當(dāng)。
PROV 模型融合了國(guó)內(nèi)外各個(gè)領(lǐng)域數(shù)據(jù)溯源描述模型的共性描述方法,具有較好的通用性和靈活性。PROV 模型中包含類(lèi)型和關(guān)系兩個(gè)組件。類(lèi)型是由實(shí)體、活動(dòng)和代理構(gòu)成:實(shí)體主要記錄溯源信息的數(shù)據(jù)描述;活動(dòng)是作用在實(shí)體的某種操作,例如實(shí)體的產(chǎn)生、轉(zhuǎn)換或修改;代理是溯源所關(guān)注的實(shí)體質(zhì)量及可信度等特性。關(guān)系是連接各個(gè)構(gòu)件的紐帶,構(gòu)件與構(gòu)件之間需要通過(guò)關(guān)系產(chǎn)生關(guān)聯(lián),PROV模型中通過(guò)引入上位構(gòu)件和下位構(gòu)件這兩個(gè)概念來(lái)描述構(gòu)件的主客體關(guān)系。
本文選擇PROV 溯源模型,可以保證溯源數(shù)據(jù)一旦上傳到區(qū)塊鏈中就不能被修改,實(shí)現(xiàn)對(duì)數(shù)據(jù)的溯源,主要原因有兩點(diǎn):一是PROV 溯源模型與OPM模型相同,適用于不同的場(chǎng)景,可移植性強(qiáng),可以根據(jù)需求使用該模型;二是PROV 溯源模型具有較完善的參考文檔和開(kāi)源代碼,對(duì)新手比較友好,方便使用與借鑒。
3.1.1 數(shù)據(jù)溯源模型構(gòu)建
數(shù)據(jù)溯源模型的核心是保證數(shù)據(jù)在傳輸過(guò)程中不被篡改,要實(shí)現(xiàn)可靠的數(shù)據(jù)溯源,可信任的存儲(chǔ)方式十分關(guān)鍵,應(yīng)確保存儲(chǔ)的數(shù)據(jù)不會(huì)發(fā)生任何問(wèn)題以及數(shù)據(jù)校驗(yàn)不會(huì)被惡意控制?;趨^(qū)塊鏈監(jiān)測(cè)的溯源取證技術(shù)主要是解決原始電子證據(jù)的中心化存儲(chǔ)、易被篡改等問(wèn)題。本文采用PROV 數(shù)據(jù)溯源模型實(shí)現(xiàn)數(shù)據(jù)溯源,該模型不僅能讓溯源數(shù)據(jù)不被隨意篡改,保證數(shù)據(jù)可靠性,還能提供數(shù)據(jù)的校驗(yàn)功能,讓各個(gè)節(jié)點(diǎn)向區(qū)塊鏈發(fā)送需要查詢(xún)的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。這些功能主要通過(guò)輕節(jié)點(diǎn)和全節(jié)點(diǎn)來(lái)實(shí)現(xiàn)。從功能實(shí)現(xiàn)角度,該模型的功能模塊劃分如圖2 所示。根據(jù)上述功能模塊建立的溯源數(shù)據(jù)模型如圖3所示。
圖2 溯源模型功能模塊
圖3 溯源數(shù)據(jù)模型
在該數(shù)據(jù)模型中,所有節(jié)點(diǎn)對(duì)數(shù)據(jù)進(jìn)行的增、刪、查、改都會(huì)記錄到區(qū)塊鏈中,而其他節(jié)點(diǎn)在對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)時(shí),可以向區(qū)塊鏈發(fā)送請(qǐng)求來(lái)驗(yàn)證數(shù)據(jù),從而形成溯源鏈,如圖4 所示。隨著區(qū)塊鏈的不斷擴(kuò)展增長(zhǎng),數(shù)據(jù)在校驗(yàn)后存儲(chǔ)到區(qū)塊鏈上,所有節(jié)點(diǎn)可以隨時(shí)校驗(yàn)數(shù)據(jù),驗(yàn)證數(shù)據(jù)的完整性,便于溯源。
3.1.2 基于數(shù)據(jù)溯源的智能合約
智能合約是存儲(chǔ)在區(qū)塊鏈上的代碼,當(dāng)區(qū)塊鏈發(fā)生交易時(shí),就會(huì)觸發(fā)智能合約,合約對(duì)交易進(jìn)行安全檢查,防止惡意節(jié)點(diǎn)的存在,智能合約為數(shù)據(jù)的傳輸和存儲(chǔ)提供了一種安全可靠的機(jī)制。開(kāi)發(fā)人員編寫(xiě)的代碼程序都是應(yīng)用在合約層,通過(guò)將PROV 數(shù)據(jù)溯源模型搭建好的溯源鏈加入智能合約中,進(jìn)而運(yùn)行到區(qū)塊鏈上。本文將區(qū)塊鏈上數(shù)據(jù)的溯源操作通過(guò)智能合約的方式進(jìn)行編碼,將其放入?yún)^(qū)塊鏈中進(jìn)行編譯及部署應(yīng)用,當(dāng)溯源數(shù)據(jù)時(shí)會(huì)自動(dòng)觸發(fā)智能合約的功能。
智能合約的構(gòu)建和執(zhí)行可分為三步:(1)區(qū)塊鏈的各個(gè)節(jié)點(diǎn)根據(jù)要求以及網(wǎng)絡(luò)自身的需求設(shè)定一份標(biāo)準(zhǔn)化、可信任的智能合約;(2)將智能合約部署到區(qū)塊鏈中,智能合約通過(guò)區(qū)塊鏈的P2P 網(wǎng)絡(luò)進(jìn)行傳播;(3)區(qū)塊鏈中發(fā)生交易時(shí),就會(huì)自動(dòng)觸發(fā)部署好的智能合約,從而實(shí)現(xiàn)制定智能合約時(shí)的需求。由于智能合約的可編程性,它可以封裝區(qū)塊鏈各個(gè)節(jié)點(diǎn)用戶的復(fù)雜行為。所有操作都由區(qū)塊鏈底層內(nèi)置的智能合約系統(tǒng)自動(dòng)完成,減少了人為干預(yù),實(shí)現(xiàn)了數(shù)字自動(dòng)化管理。
3.2.1 模型設(shè)計(jì)
電子證據(jù)的不可篡改性包括數(shù)據(jù)的完整和保全,電子數(shù)據(jù)具有易篡改、可復(fù)制等性質(zhì),易被高技術(shù)犯罪分子篡改和偽造,難以成為量罪證據(jù)。電子證據(jù)若要成為量罪證據(jù),須保證其可靠性。因此,需要在電子數(shù)據(jù)轉(zhuǎn)移或修改的每個(gè)環(huán)節(jié)制作輔助證據(jù),證明其可靠性。區(qū)塊鏈技術(shù)通過(guò)對(duì)原始數(shù)據(jù)文件的哈希值在節(jié)點(diǎn)間的分布式記賬,結(jié)合密碼學(xué)技術(shù),實(shí)現(xiàn)對(duì)原始電子證據(jù)的存證,降低了建立多方信任的成本[12]。據(jù)此構(gòu)建了一種基于區(qū)塊鏈的溯源取證模型,如圖5所示。
圖5 基于區(qū)塊鏈的溯源取證模型
由于區(qū)塊鏈技術(shù)的自身限制,如果上傳的證據(jù)文件過(guò)大,可能導(dǎo)致無(wú)法有效將其存儲(chǔ)在區(qū)塊鏈中。因此,該模型將原始證據(jù)保存于數(shù)據(jù)庫(kù)中,僅在區(qū)塊鏈中存儲(chǔ)證據(jù)的哈希值。同時(shí),對(duì)訪問(wèn)者的身份進(jìn)行限制,只允許那些經(jīng)過(guò)授權(quán)的節(jié)點(diǎn)獲取證據(jù)。該模型具體操作主要步驟如下:(1)利用取證技術(shù)固定電子證據(jù)并記入時(shí)間戳以及地理位置等信息;(2)對(duì)固定下來(lái)的電子證據(jù)使用公鑰產(chǎn)生哈希摘要;(3)使用私鑰進(jìn)行簽名;(4)利用共識(shí)機(jī)制選出記賬節(jié)點(diǎn);(5)記賬節(jié)點(diǎn)對(duì)數(shù)據(jù)進(jìn)行綜合排序;(6)記賬節(jié)點(diǎn)將排序后的數(shù)據(jù)打包到新區(qū)塊中;(7)記賬節(jié)點(diǎn)進(jìn)行廣播;(8)代表節(jié)點(diǎn)對(duì)廣播區(qū)塊的數(shù)據(jù)進(jìn)行正確性驗(yàn)證,如果獲得多數(shù)認(rèn)可,則將新區(qū)塊添加到主鏈上。
3.2.2 模型特點(diǎn)
基于區(qū)塊鏈的取證模型不需要一個(gè)中心化的機(jī)構(gòu)進(jìn)行統(tǒng)一管理,不僅節(jié)省了大量人力物力,還具有更好的安全性和防篡改性。與此同時(shí),辦案人員不需要復(fù)雜的操作就能獲得數(shù)據(jù),并且這份數(shù)據(jù)安全性極高。當(dāng)電子數(shù)據(jù)上鏈后,還可以對(duì)其進(jìn)行溯源,檢查證據(jù)的完整性。
通過(guò)搭建區(qū)塊鏈平臺(tái)實(shí)現(xiàn)對(duì)電子數(shù)據(jù)溯源與取證的模型測(cè)試,采用sherrlock 0535 開(kāi)發(fā)的二手交易平臺(tái)的商品溯源智能合約來(lái)進(jìn)行智能合約的二次編譯,部署至本地已經(jīng)搭建的區(qū)塊鏈中,實(shí)現(xiàn)區(qū)塊鏈監(jiān)測(cè)與溯源取證。上傳區(qū)塊鏈前,需要對(duì)已經(jīng)固定好的電子證據(jù)進(jìn)行預(yù)處理,固定其哈希值、時(shí)間戳等信息。使用Python 的os、sys 等模塊編寫(xiě)數(shù)據(jù)預(yù)處理腳本,使用該腳本即可實(shí)現(xiàn)電子數(shù)據(jù)鏡像文件哈希值、時(shí)間戳等信息的自動(dòng)計(jì)算。
3.3.1 區(qū)塊鏈搭建
采用Python 語(yǔ)言搭建區(qū)塊鏈,利用Python 語(yǔ)言的第三方庫(kù),如hashlib、datetime 等,無(wú)需針對(duì)時(shí)間戳技術(shù)、哈希算法等內(nèi)容進(jìn)行編寫(xiě)。區(qū)塊鏈平臺(tái)的代碼架構(gòu)如圖6所示。
圖6 區(qū)塊鏈平臺(tái)的代碼架構(gòu)
3.3.2 溯源與取證
將二次編譯的智能合約放入搭建好的區(qū)塊鏈網(wǎng)絡(luò)中,并將電子數(shù)據(jù)取證模型應(yīng)用于區(qū)塊鏈中,實(shí)現(xiàn)區(qū)塊鏈監(jiān)測(cè)與溯源取證。本系統(tǒng)前端利用Web界面進(jìn)行展示,采用MONSTRA CMS 的前端界面進(jìn)行二次開(kāi)發(fā),系統(tǒng)內(nèi)的數(shù)據(jù)采用Merkle Tree 的形式進(jìn)行存儲(chǔ)。固定好的電子數(shù)據(jù)通過(guò)文件上傳頁(yè)面進(jìn)行上傳,實(shí)現(xiàn)對(duì)數(shù)據(jù)的預(yù)處理,如圖7所示。
圖7 文件上傳頁(yè)面
將數(shù)據(jù)上傳后可以瀏覽該文件的基本信息,結(jié)果如圖8所示。
文件上傳后,可以查看區(qū)塊鏈的詳情,發(fā)現(xiàn)新的區(qū)塊產(chǎn)生,并生成了哈希值,在對(duì)電子數(shù)據(jù)進(jìn)行溯源與取證時(shí),可以比對(duì)區(qū)塊鏈上的哈希值進(jìn)行同一性認(rèn)定,實(shí)現(xiàn)溯源與取證。區(qū)塊鏈詳情如圖9所示。
圖9 區(qū)塊鏈詳情
本文研究了基于區(qū)塊鏈技術(shù)的溯源與取證模型設(shè)計(jì)。首先,分析區(qū)塊鏈的核心架構(gòu),研究現(xiàn)有數(shù)據(jù)溯源與取證模型的特點(diǎn),基于PROV 數(shù)據(jù)溯源模型進(jìn)行優(yōu)化與改進(jìn),設(shè)計(jì)了基于區(qū)塊鏈的數(shù)據(jù)溯源模型。之后,根據(jù)電子數(shù)據(jù)取證的流程,設(shè)計(jì)了結(jié)合區(qū)塊鏈技術(shù)的電子數(shù)據(jù)取證模型,最后進(jìn)行了模型效果的驗(yàn)證與測(cè)試。結(jié)果表明,所有的運(yùn)行功能實(shí)現(xiàn)以前端Web 頁(yè)面的形式展示,可以比對(duì)區(qū)塊鏈上的哈希值進(jìn)行同一性認(rèn)定,實(shí)現(xiàn)溯源與取證,方便辦案人員使用。
中國(guó)人民警察大學(xué)學(xué)報(bào)2023年10期