賈朋飛,丁錳,張玉龍,王興
(中國人民公安大學(xué),北京100032)
隨著計算機(jī)技術(shù)的不斷發(fā)展,互聯(lián)網(wǎng)已經(jīng)滲透到生活中的各個領(lǐng)域。當(dāng)互聯(lián)網(wǎng)方便了我們生活的同時,各種各樣的依托于互聯(lián)網(wǎng)的犯罪也層出不窮,越來越多的證據(jù)以電子證據(jù)的形式出現(xiàn)在訴訟中。不同的電子證據(jù)有著不同的形成方式,但是普遍存在易篡改、易消失、技術(shù)依賴性強(qiáng)等特點(diǎn),與傳統(tǒng)的實(shí)物證據(jù)相比較,電子證據(jù)的合法性、真實(shí)性、關(guān)聯(lián)性的司法認(rèn)定難度更大[1]。傳統(tǒng)的電子證據(jù)存儲方式已經(jīng)不能適應(yīng)現(xiàn)代科技快速發(fā)展的節(jié)奏,區(qū)塊鏈的去中心化、高冗余存儲、隱私保護(hù)和高安全性等特點(diǎn)使其特別適合保護(hù)和存儲重要的隱私數(shù)據(jù),以避免因權(quán)限管理不當(dāng)或中心機(jī)構(gòu)遭受黑客攻擊而造成大規(guī)模的數(shù)據(jù)泄露或丟失[2]。
當(dāng)前社會上的電子證據(jù)保全主要采取公證的形式,保全的方式包括:打印、備份、拷貝、拍攝等[3],保全的主要流程如圖1 所示。
綜上可以看出傳統(tǒng)的電子證據(jù)公證的流程比較復(fù)雜而且證據(jù)保全的成本較高。由于電子證據(jù)存在易變更、易消失的特點(diǎn),傳統(tǒng)的電子證據(jù)保存程序需要復(fù)雜的流程、一定的時間,有可能在證據(jù)保存流程時間內(nèi),網(wǎng)絡(luò)上的證據(jù)已經(jīng)消失,所以迫切需要一種即時性的電子證據(jù)存儲方式來滿足當(dāng)前互聯(lián)網(wǎng)在線取證的需要。
圖1
區(qū)塊鏈(Block Chain)是一種使用密碼學(xué)方法來保證傳輸和訪問安全,由多方共同維護(hù)的采用分布式數(shù)據(jù)存儲、點(diǎn)對點(diǎn)傳輸、共識機(jī)制、加密算法等計算機(jī)技術(shù)的不可偽造、不可篡改的分布式數(shù)據(jù)存儲系統(tǒng)[4]。區(qū)塊鏈的關(guān)鍵技術(shù)主要包括以下四部分。
P2P(Peer-to-Peer)技術(shù)就是對等網(wǎng)絡(luò)技術(shù),又稱點(diǎn)對點(diǎn)技術(shù),是無中心化服務(wù)器并且依靠節(jié)點(diǎn)(Peers)傳遞信息的互聯(lián)網(wǎng)體系。與傳統(tǒng)的Server/Client 模式不同的是在P2P 網(wǎng)絡(luò)中各節(jié)點(diǎn)同時具備客戶端和服務(wù)器的雙重屬性,各個不同節(jié)點(diǎn)可以使用服務(wù)也可以對網(wǎng)絡(luò)中其他節(jié)點(diǎn)提供服務(wù)[5]。傳統(tǒng)模式下服務(wù)器的負(fù)載依靠P2P 技術(shù)能夠成功分配給網(wǎng)絡(luò)中所有節(jié)點(diǎn),是分布式理論的成功拓展。如圖2 所示,是一個完整的P2P 網(wǎng)絡(luò)結(jié)構(gòu)模型圖。
圖2
數(shù)字簽名(Digital Signature)技術(shù)是使用非對稱加密技術(shù)和數(shù)字摘要(Digital Digest)技術(shù)來鑒別數(shù)據(jù)來源的真實(shí)性和數(shù)據(jù)的完整性的方法[6]。
共識機(jī)制通過制定達(dá)成共識的規(guī)則實(shí)現(xiàn)節(jié)點(diǎn)選舉、數(shù)據(jù)一致性和數(shù)據(jù)同步控制等功能從而協(xié)調(diào)區(qū)塊鏈全網(wǎng)中各節(jié)點(diǎn)數(shù)據(jù)的一致性。當(dāng)前的共識機(jī)制有實(shí)用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)、權(quán)益證明(Proof of Stake,PoS)、工作量證明(Proof of Work,PoW)、授權(quán)權(quán)益證明(Delegated Proof of Stake,DPoS)等[7]。
在普通鏈表中的區(qū)塊包括要存儲的數(shù)據(jù)和一個可以指向上一個區(qū)塊的指針。而在區(qū)塊鏈當(dāng)中,指針被置換為哈希指針,在哈希指針中不僅存儲上一個數(shù)據(jù)塊的地址,也包括上一個數(shù)據(jù)塊中記錄數(shù)據(jù)的數(shù)字摘要[8]。區(qū)塊頭(Block Header)中包括上一個區(qū)塊哈希值、難度值、Merkle Tree 根節(jié)點(diǎn)、時間戳、版本號、隨機(jī)數(shù)而區(qū)塊體(Block Body)包括本區(qū)塊所記錄的所有的交易記錄。
本系統(tǒng)基礎(chǔ)架構(gòu)分為4 層,包括數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、應(yīng)用層。每層分別完成一項核心功能,各層之間互相配合構(gòu)建一個去中心化的信任機(jī)制,實(shí)現(xiàn)互聯(lián)網(wǎng)電子證據(jù)的在線實(shí)時、安全存儲。
網(wǎng)絡(luò)中的節(jié)點(diǎn)分為管理節(jié)點(diǎn)和普通節(jié)點(diǎn)。普通用戶可以通過節(jié)點(diǎn)認(rèn)證協(xié)議加入網(wǎng)絡(luò),即節(jié)點(diǎn)在加入網(wǎng)絡(luò)時先要向管理節(jié)點(diǎn)進(jìn)行實(shí)名制注冊成為本系統(tǒng)的普通節(jié)點(diǎn)。普通節(jié)點(diǎn)可以將自己認(rèn)為需要進(jìn)行存證的網(wǎng)頁上傳到系統(tǒng)進(jìn)行存證,但是不參與系統(tǒng)的維護(hù)和區(qū)塊數(shù)據(jù)的認(rèn)證。管理節(jié)點(diǎn)主要由公安機(jī)關(guān)、檢察院、法院等司法機(jī)關(guān)和公證機(jī)構(gòu)組成。管理節(jié)點(diǎn)主要負(fù)責(zé)網(wǎng)絡(luò)的維護(hù)以及對證據(jù)進(jìn)行認(rèn)證。在用戶注冊的過程中,系統(tǒng)會在用戶的本地產(chǎn)生一對公開密鑰和私有密鑰同時管理節(jié)點(diǎn)將注冊節(jié)點(diǎn)的相關(guān)認(rèn)證信息發(fā)布到全網(wǎng)絡(luò)中,以便其他節(jié)點(diǎn)在達(dá)成共識過程中對節(jié)點(diǎn)信息進(jìn)行驗(yàn)證。當(dāng)普通用戶需要上傳證據(jù)時,只需寫入需要存證的網(wǎng)頁的網(wǎng)址,系統(tǒng)會根據(jù)用戶提供的網(wǎng)址提取網(wǎng)頁的源代碼和服務(wù)器數(shù)據(jù)等相關(guān)內(nèi)容,并對網(wǎng)頁頁面進(jìn)行截屏和加蓋時間戳,然后利用哈希算法對數(shù)據(jù)提取數(shù)字摘要,最后將系統(tǒng)提取到的數(shù)據(jù)和數(shù)字摘要使用用戶的私有密鑰進(jìn)行加密形成數(shù)字簽名發(fā)送給系統(tǒng)的議長節(jié)點(diǎn)。議長節(jié)點(diǎn)是根據(jù)系統(tǒng)的共識機(jī)制從管理節(jié)點(diǎn)中選取出來,未被選中的節(jié)點(diǎn)稱為議員節(jié)點(diǎn)。議長節(jié)點(diǎn)在收到普通節(jié)點(diǎn)傳來的數(shù)據(jù)后會將該數(shù)據(jù)廣播給網(wǎng)絡(luò)中的議員節(jié)點(diǎn),議員節(jié)點(diǎn)會對議長節(jié)點(diǎn)發(fā)來的數(shù)據(jù)的真實(shí)性進(jìn)行驗(yàn)證并將驗(yàn)證結(jié)果反饋給議長節(jié)點(diǎn),當(dāng)議長節(jié)點(diǎn)收到的反饋數(shù)量滿足系統(tǒng)要求后,議長節(jié)點(diǎn)就將所有數(shù)據(jù)打包進(jìn)該區(qū)塊,并將該區(qū)塊加入到區(qū)塊鏈中。
系統(tǒng)首先建立的一個起始節(jié)點(diǎn)是“創(chuàng)世區(qū)塊”,之后在同樣規(guī)則下創(chuàng)建的規(guī)格相同的區(qū)塊通過一個鏈?zhǔn)降慕Y(jié)構(gòu)依次相連組成一條主鏈條。各數(shù)據(jù)區(qū)塊中包括區(qū)塊頭和區(qū)塊體,其中區(qū)塊頭中包括指向上一個區(qū)塊的哈希指針、時間戳、協(xié)議版本、本區(qū)塊體所包括數(shù)據(jù)的根哈希值等內(nèi)容,而區(qū)塊體中則包括一段時間內(nèi)所有節(jié)點(diǎn)提交的通過認(rèn)證的數(shù)據(jù)和這些數(shù)據(jù)的摘要信息。在區(qū)塊體中數(shù)據(jù)以Merkle Tree 的形式存儲普通節(jié)點(diǎn)只存儲區(qū)塊頭所包括的內(nèi)容,而管理節(jié)點(diǎn)即存儲區(qū)塊頭的數(shù)據(jù)又存儲區(qū)塊體中的數(shù)據(jù)。
在一段時間內(nèi)每一個用戶向管理節(jié)點(diǎn)發(fā)送的需要存證的數(shù)據(jù)都必須通過哈希函數(shù)計算其數(shù)字摘要,然后才會將其加入Merkle Tree 的數(shù)據(jù)結(jié)構(gòu)中。本系統(tǒng)的哈希函數(shù)采用SHA2-256 算法[9]。系統(tǒng)的根哈希值由該區(qū)塊內(nèi)存儲的所有用戶節(jié)點(diǎn)提交的存證文件共同決定。當(dāng)用戶需要驗(yàn)證自己提供的證據(jù)是否被區(qū)塊接納時,管理節(jié)點(diǎn)會根據(jù)用戶提供數(shù)據(jù)在Merkle Tree 中的位置,向用戶提供由用戶節(jié)點(diǎn)到根哈希值計算路徑中的其余哈希值,用戶根據(jù)系統(tǒng)提供的哈希值和自己要上傳到系統(tǒng)的文件的哈希值按照計算路徑,最終計算出該區(qū)塊的根哈希值,如果計算出的根哈希值與區(qū)塊頭中存儲的根哈希值一致,則證明用戶所提供數(shù)據(jù)已經(jīng)被區(qū)塊接受。
如果某個惡意用戶想要修改第N 個區(qū)塊的數(shù)據(jù),則第N+1 個區(qū)塊中所記錄的哈希指針便不能與第N個區(qū)塊中的數(shù)據(jù)相匹配,這樣系統(tǒng)便能檢測出第N 個區(qū)塊的數(shù)據(jù)已經(jīng)被篡改。當(dāng)然惡意用戶還可以繼續(xù)更改第N+1 個區(qū)塊的哈希指針來掩蓋這次篡改,但是它后面的區(qū)塊的哈希指針又無法與其相匹配,所以如果惡意用戶如果想篡改區(qū)塊鏈中某一區(qū)塊中存儲的數(shù)據(jù)而不被發(fā)現(xiàn)就必須將其后所有區(qū)塊的數(shù)據(jù)一起進(jìn)行更改,由于區(qū)塊鏈?zhǔn)欠植际降慕Y(jié)構(gòu),每一個節(jié)點(diǎn)對應(yīng)不同的用戶,所以說在區(qū)塊鏈當(dāng)中某個惡意用戶想要修改數(shù)據(jù)而不被發(fā)現(xiàn)幾乎是不可能的。
網(wǎng)絡(luò)層包括P2P 組網(wǎng)機(jī)制和數(shù)據(jù)傳播機(jī)制主要通過P2P 技術(shù)實(shí)現(xiàn)分布式網(wǎng)絡(luò)的機(jī)制。管理節(jié)點(diǎn)保存所有區(qū)塊中完整的區(qū)塊鏈數(shù)據(jù),并通過實(shí)時參與區(qū)塊數(shù)據(jù)的校驗(yàn)和增加新的區(qū)塊來動態(tài)更新主鏈實(shí)現(xiàn)對整個系統(tǒng)的監(jiān)督和管理。普通節(jié)點(diǎn)可以對互聯(lián)網(wǎng)中的非法信息進(jìn)行存證,并可以查詢和下載自己所上傳信息是否被系統(tǒng)所接受,但是不參與系統(tǒng)管理。普通用戶可以注冊成為普通節(jié)點(diǎn),而司法機(jī)關(guān)、公證機(jī)構(gòu)等可以注冊成為管理節(jié)點(diǎn)參與整個系統(tǒng)的管理和維護(hù),并通過系統(tǒng)中的數(shù)據(jù)驗(yàn)證機(jī)制實(shí)現(xiàn)證據(jù)在各部門之間的共享。網(wǎng)絡(luò)結(jié)構(gòu)如圖3 所示。
圖3
共識層主要利用共識算法讓高度分散的節(jié)點(diǎn)在去中心化的區(qū)塊鏈網(wǎng)絡(luò)中針對區(qū)塊數(shù)據(jù)的真實(shí)性達(dá)成共識。系統(tǒng)根據(jù)管理節(jié)點(diǎn)的內(nèi)存和計算狀態(tài),隨機(jī)選取議長節(jié)點(diǎn),未被選取的管理節(jié)點(diǎn)為議員節(jié)點(diǎn)。議長節(jié)點(diǎn)將需要寫入?yún)^(qū)塊的信息廣播給所有議員節(jié)點(diǎn),議員節(jié)點(diǎn)收到信息后會對信息進(jìn)行驗(yàn)證當(dāng)議長節(jié)點(diǎn)收到2/3 的議員節(jié)點(diǎn)的肯定反饋后,將信息寫入下一個區(qū)塊。當(dāng)議員節(jié)點(diǎn)收到議長節(jié)點(diǎn)發(fā)送的數(shù)據(jù)后,首先利用用戶的公開密鑰對用戶的數(shù)字簽名進(jìn)行解密,驗(yàn)證數(shù)據(jù)來源的真實(shí)性,并利用系統(tǒng)提供的SHA2-256 函數(shù)計算用戶提供數(shù)據(jù)的數(shù)字摘要與用戶提供的數(shù)字摘要是否一致從而判斷文件在傳輸過程中是否被篡改驗(yàn)證用戶所傳文件的真實(shí)性。
本系統(tǒng)的應(yīng)用層寫入基于Scrapy 框架編寫的網(wǎng)絡(luò)爬蟲,通過爬蟲腳本獲取用戶提供的非法網(wǎng)頁的源代碼和服務(wù)器相關(guān)信息并通過WebKit 對網(wǎng)頁進(jìn)行截屏然后加入系統(tǒng)時間戳(Time Stamp),系統(tǒng)會將將保存的內(nèi)容用SHA2-256 算法計算出文件的數(shù)字摘要,然后將此數(shù)字摘要和系統(tǒng)獲取的文件作為區(qū)塊鏈內(nèi)容發(fā)送給管理節(jié)點(diǎn)進(jìn)行審核。
安全存證和提高取證效率是區(qū)塊鏈技術(shù)應(yīng)用在電子證據(jù)領(lǐng)域的兩個主要優(yōu)勢。傳統(tǒng)的電子證據(jù)存儲方式會導(dǎo)致文件在傳輸或者備份等過程中存在被篡改或丟失的風(fēng)險。在電子證據(jù)生成時被賦予時間戳,同時采用非對稱加密算法對電子證據(jù)進(jìn)行加密保障傳輸安全,在電子證據(jù)上鏈時通過比對數(shù)據(jù)的哈希值來驗(yàn)證證據(jù)真實(shí)性,這些措施充分保障了證據(jù)真實(shí)性和安全性。在取證環(huán)節(jié)中,由于區(qū)塊鏈存證方式為分布式存儲,允許審計機(jī)構(gòu)、仲裁機(jī)構(gòu)、司法機(jī)構(gòu)等多個節(jié)點(diǎn)共享電子證據(jù),理論上可以實(shí)現(xiàn)數(shù)據(jù)的秒級傳輸,降低取證成本,簡化仲裁流程,提高效率。