李晉
(國家開發(fā)銀行四川省分行客戶三處, 四川 成都 610041)
本文針對當(dāng)前數(shù)字金融存證問題(如證據(jù)效能薄弱、信息安全防護(hù)級別低),利用區(qū)塊鏈技術(shù)開發(fā)了數(shù)字金融資產(chǎn)存證系統(tǒng),該系統(tǒng)可通過動態(tài)加入、身份驗(yàn)證等操作使普通存證功能得到完善。具體實(shí)施主要是通過使用IPFS提取和掛載數(shù)據(jù)等來確保數(shù)字資產(chǎn)的安全性。通過運(yùn)用區(qū)塊鏈的鏈?zhǔn)降男螒B(tài)方式將存儲的安全級別大幅度提升,保護(hù)數(shù)據(jù)存儲安全[1]。這種方式也可借助web.js架構(gòu)起網(wǎng)絡(luò)客戶端與區(qū)塊鏈網(wǎng)絡(luò)之間的媒介平臺,使兩者能夠融合使用。智能合約能夠保障客戶端在業(yè)務(wù)操作中的邏輯,并能提供程序代碼的支持,有了它,一切事宜皆可形成自動化操作。當(dāng)結(jié)果返回時(shí)還可借助POA共識機(jī)制篩選出記賬節(jié)點(diǎn),然后打包入鏈。這些操作用戶必須通過身份驗(yàn)證或授權(quán)才能完成,很大程度上提升了數(shù)據(jù)的安全性[2]。
為了能夠清晰的了解該系統(tǒng)的運(yùn)作過程,采用網(wǎng)絡(luò)拓?fù)鋱D的形式,如圖1所示。
它是建立在區(qū)塊鏈基礎(chǔ)上的,通過這種方式將數(shù)字資產(chǎn)進(jìn)行存證。第一,將數(shù)字資產(chǎn)的哈希指紋保全到區(qū)塊鏈中,這項(xiàng)操作主要借助存證平臺進(jìn)行操作。與此同時(shí),區(qū)塊鏈網(wǎng)絡(luò)中的其它節(jié)點(diǎn)主要承擔(dān)起區(qū)塊數(shù)據(jù)同步的責(zé)任。當(dāng)存證用戶在存儲的過程中出現(xiàn)了問題,便可通過司法機(jī)構(gòu)的授權(quán)查看并下載原始文件,并且在司法機(jī)構(gòu)介入調(diào)查后會將此操作生成鑒定報(bào)告,也會將此鑒定報(bào)告提交給存證用戶一份。
圖1 系統(tǒng)網(wǎng)絡(luò)拓?fù)?/p>
區(qū)塊鏈作為現(xiàn)代存儲中所應(yīng)用的一種共享記賬方式,被應(yīng)用的同時(shí)也在不斷的改善[3]。它的弊端性主要顯現(xiàn)在存儲空間局限性方面,不僅空間容量低,存儲形式更是單一,存儲空間過小,僅有1MB,這在實(shí)際應(yīng)用中極為不便[4]。在了解它的優(yōu)劣性后,就要結(jié)合運(yùn)用IPFS,將它們兩者結(jié)合運(yùn)用,如圖2所示。
圖2 改進(jìn)的區(qū)塊鏈框圖
經(jīng)過改進(jìn)的區(qū)塊鏈框圖。該框圖的優(yōu)越性能在于,它能將占據(jù)存儲空間容量大的文件轉(zhuǎn)化為哈希指紋的形式,將原本占據(jù)較大空間的文件壓縮為占據(jù)空間小的文件,適合上鏈存儲的哈希指紋值這樣一種充滿技術(shù)含量的形式。
通過分析區(qū)塊鏈的可信數(shù)字資產(chǎn)存證系統(tǒng)的結(jié)構(gòu)形態(tài),可以看出,它主要分為六層架構(gòu)模式,如圖3所示。
圖3 系統(tǒng)底層架構(gòu)
(1) 數(shù)據(jù)層。用來存儲各種有關(guān)可信數(shù)字資產(chǎn)存證信息的地方。包括用戶的賬戶、用戶的數(shù)據(jù)指紋等。
(2) 網(wǎng)絡(luò)層。用來封裝與存儲相關(guān)的各種網(wǎng)絡(luò)機(jī)制,包括P2P組網(wǎng)機(jī)制以及與數(shù)據(jù)保存、驗(yàn)證相關(guān)的內(nèi)容等。這些機(jī)制也可掌控節(jié)點(diǎn)之間的區(qū)塊數(shù)據(jù)的相關(guān)操作,如數(shù)據(jù)同步或數(shù)據(jù)驗(yàn)證。
(3) 共識層。將所在區(qū)塊鏈的應(yīng)用內(nèi)容通過篩選,找出各個(gè)節(jié)點(diǎn)間的同質(zhì)部分然后進(jìn)行去中心化操作,這種操作目的是將各節(jié)點(diǎn)并置到一起,如果是單個(gè)節(jié)點(diǎn),就需經(jīng)過去中心化操作后使其融入到全網(wǎng)節(jié)點(diǎn)中,方可打包進(jìn)鏈。這種特性與POA機(jī)制極為相似,因此可作為共識標(biāo)準(zhǔn)。
(4) 激勵(lì)層。為了能夠使網(wǎng)絡(luò)運(yùn)行順暢,該層通過經(jīng)濟(jì)學(xué)方式,以代幣發(fā)行機(jī)制和代幣分配機(jī)制作為它的主要組成部分,控制記賬的節(jié)點(diǎn)給予獎(jiǎng)勵(lì),目的就是要保證網(wǎng)絡(luò)的良好運(yùn)行。
(5) 合約層。該層作為重點(diǎn)保護(hù)層,涉及到與機(jī)密相關(guān)的重要內(nèi)容,如身份認(rèn)證、審計(jì)追蹤等,都是為了保護(hù)客戶的利益而特別設(shè)定的。
(6) 應(yīng)用層。這一層是基礎(chǔ)操作層,如賬戶登錄、注冊等。
系統(tǒng)總體架構(gòu),如圖4所示。
圖4 系統(tǒng)總體架構(gòu)
數(shù)字資產(chǎn)存證應(yīng)用的整體運(yùn)行形態(tài),最上層所展示的主要有企業(yè)或個(gè)人等所有相關(guān)的信息內(nèi)容。在網(wǎng)絡(luò)化時(shí)代各種企業(yè)不論大小都預(yù)借助數(shù)字網(wǎng)絡(luò)進(jìn)行信息傳播,也因此更加注重?cái)?shù)字資產(chǎn)的存證。
存證對象包括方方面面,凡是涉及到數(shù)字資產(chǎn)的內(nèi)容都涵蓋在內(nèi),不論是圖像的,還是音頻的。之所以如此,也是為了最大程度的確保所用信息的安全性,畢竟數(shù)據(jù)信息的安全隱患會導(dǎo)致巨大的經(jīng)濟(jì)損失。
IPFS作為一種全新的網(wǎng)絡(luò)協(xié)議,與傳統(tǒng)的HTTP協(xié)議相比,它具有顯著的優(yōu)勢。它不僅存儲空間容量大,傳輸速度快,并且在存證用戶將所要保存的文件進(jìn)行加密后可以通過IPFS系統(tǒng)進(jìn)行生成,也就是哈希指紋值。該數(shù)據(jù)具有穩(wěn)定性、唯一性,并且它不能任意的進(jìn)行篡改[5]。這些重要部分可以通過區(qū)塊鏈中的去中心化操作,將使信息數(shù)據(jù)的安全級別大大提升。并且這層區(qū)塊鏈在進(jìn)行轉(zhuǎn)化的過程中,也需經(jīng)過授權(quán)的驗(yàn)證,方可進(jìn)行進(jìn)一步的操作。這些授權(quán)可通過憑證管理中心(CA)或司法鑒定機(jī)構(gòu)等來完成,這些內(nèi)容均是其重要組成部分。POA被稱為共識算法,屬于授權(quán)類共識機(jī)制的范疇。這些鏈條節(jié)點(diǎn)需要投票來選擇,這為挖礦環(huán)節(jié)節(jié)省了大量的時(shí)算力。當(dāng)所有相關(guān)的區(qū)塊環(huán)節(jié)完全被確定后,在主鏈的位置上便會又多了一項(xiàng)內(nèi)容,而其它參與的節(jié)點(diǎn)也會進(jìn)行同樣的操作來完成。
最底層是基礎(chǔ)服務(wù)層,關(guān)于文件的一些相關(guān)內(nèi)容的操作如證據(jù)保全等。
數(shù)字資產(chǎn)存證系統(tǒng)的總體功能模塊,如圖5所示。
圖5 系統(tǒng)總體功能
當(dāng)關(guān)注點(diǎn)落實(shí)到用戶管理模塊中時(shí),會發(fā)現(xiàn)它的功能很簡單,就是用戶登錄與注冊兩個(gè)部分。做進(jìn)行登錄與注冊的用戶多是存證用戶和聯(lián)盟用戶,他們中的存證用戶作為低級別的用戶,只涉及到存證的內(nèi)容,與聯(lián)盟用戶不同的是,聯(lián)盟用戶作為高級別用戶,所肩負(fù)的職責(zé)主要包括區(qū)塊的產(chǎn)生和驗(yàn)證,也要為普通用戶中的一些需求進(jìn)行回復(fù)操作,如可以借助聯(lián)盟用戶來幫助普通用戶開具司法鑒定報(bào)告。在節(jié)點(diǎn)管理模塊中主要包括節(jié)點(diǎn)的刪除或添加兩個(gè)部分。本存證應(yīng)用使用的聯(lián)盟鏈?zhǔn)且环N授權(quán)區(qū)塊鏈,因此在進(jìn)行節(jié)點(diǎn)內(nèi)容的刪減內(nèi)容操作過程中也要經(jīng)過授權(quán)的環(huán)節(jié)方可進(jìn)行,而這種授權(quán)的方式是以授權(quán)節(jié)點(diǎn)的投票來完成。在進(jìn)行存儲或加密的操作中,只有作為授權(quán)用戶才有權(quán)限進(jìn)行查看,這也是為了能夠保障系統(tǒng)的安全性。而文件管理的內(nèi)容主要涉及到文件的下載、查看等相關(guān)內(nèi)容的功能模塊操作。
(1) 用戶管理子系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
用戶管理子系統(tǒng)主要負(fù)責(zé)驗(yàn)證用戶的身份,只有這樣系統(tǒng)方可進(jìn)行下一步的存證操作。本文在實(shí)施操作中用戶的注冊信息并未和帶有身份標(biāo)簽的DID分離,它們一并被放置到區(qū)塊鏈這塊封閉系統(tǒng)中,在這塊區(qū)域中用戶的身份能夠?qū)崿F(xiàn)自行驗(yàn)證,這也是它優(yōu)越性體現(xiàn),如圖6所示。
圖6 用戶注冊流程圖
(2) 文件加密功能模塊的設(shè)計(jì)與實(shí)現(xiàn)
作為普通用戶如果想要完成存證的操作就必須要對文件進(jìn)行處理,如設(shè)置加密這樣的操作,加密的方法可以選擇RSA公開密鑰算法。該方法應(yīng)用較廣泛。該方法并不屬于對稱加密的范疇,而屬于非對稱加密,它會借助所生成的公鑰和私鑰之間的制約性來確保數(shù)據(jù)的安全性。作為用戶在存證的過程中可以選擇加密或是不加密。該系統(tǒng)的默認(rèn)操作是加密,如若更改則可通過手動修改來完成。具體流程,如圖7所示。
圖7 文件加密流程
作為存證用戶可對加密操作進(jìn)行自主選擇。如果選擇不加密,則可將原文件中的哈希值記入到賬本中;在進(jìn)行加密的過程中,需要通過GPG提供的RSA公開密鑰加密算法來實(shí)現(xiàn)對數(shù)字資產(chǎn)的加密;加密完成后系統(tǒng)會將文件傳輸?shù)絀PFS系統(tǒng)中,再由它分配存放到多個(gè)節(jié)點(diǎn)中,以生成哈希值;并將這些哈希值直接保全在區(qū)塊鏈上的記賬本中,也就是文檔。
(3) 智能合約的設(shè)計(jì)與實(shí)現(xiàn)
運(yùn)行在EVM中的智能合約是實(shí)現(xiàn)數(shù)據(jù)資產(chǎn)上鏈保全的首要滿足條件,利用它可有效規(guī)避人為性干擾因素的出現(xiàn),能讓信息保全的安全性更強(qiáng)。WEB前端通過Web3.js調(diào)用預(yù)先部署在區(qū)塊鏈網(wǎng)絡(luò)上的存儲合約,能夠?qū)⑺H臄?shù)字資產(chǎn)的哈希值放置到區(qū)塊鏈上進(jìn)行固定,這樣便不可進(jìn)行篡改的操作,以此來保證司法鑒定的權(quán)威性或?yàn)榇颂峁┫鄳?yīng)的鑒權(quán)依據(jù)。作為EVM,Solidity被普遍運(yùn)用。除此之外,還有LLL、Serpent等同樣被運(yùn)用,但相比Solidity,其普及性并不高。在本文中通過兩種智能合約的形式實(shí)現(xiàn)資產(chǎn)數(shù)據(jù)的相關(guān)操作。第一種是用于資產(chǎn)數(shù)據(jù)登記,就是要將有關(guān)資產(chǎn)的文件轉(zhuǎn)換為數(shù)據(jù)中的哈希指紋,然后在配送到特殊區(qū)域區(qū)塊鏈系統(tǒng)中,第二種是用于數(shù)據(jù)確權(quán),以此來證明資產(chǎn)數(shù)據(jù)的存在。在誤差向量幅度中存在的智能合約,它的整個(gè)運(yùn)行,如圖8所示。
圖8 智能合約程序流程
首先,通過加載Web3,為Web前端與區(qū)塊鏈網(wǎng)絡(luò)的交互提供JSON.RPCAPI;用Solidity這種高級編程語言來完成相應(yīng)的操作,這是將需要存儲的文件轉(zhuǎn)換為哈希指紋上鏈的形式來完成,這項(xiàng)功能的實(shí)現(xiàn)需要借助智能合約配合完成。因?yàn)樵摬僮餍枰M(jìn)行編程,變成的方式可以選擇線上來完成,也就是說既可使用Remixide提供的在線編譯,也可利用Geth客戶端中安裝Sole編譯器來完成。編譯的過程就是不斷輸出的過程,里邊所經(jīng)編譯的字節(jié)碼會作為數(shù)據(jù)源被發(fā)送,發(fā)送的地址是空的。而智能合約需要綁定于區(qū)塊鏈上的EVM中,形成合約地址,以便有相關(guān)事務(wù)出現(xiàn)時(shí)進(jìn)行調(diào)用。存儲合約的源代碼如下所示。
pragma solidity ^0.4.17; //^0.4.17表示所用solidity語言的版本號
contract StoreHash {//合約名為StoreHash.sol
string ipfsHash;
//將經(jīng)由IPFS系統(tǒng)返回的哈希指紋記錄到區(qū)塊鏈中
function sendHash(string x) public {//檢索保全在區(qū)塊鏈中的哈希指紋
ipfsHash=x;
}
function getHash() public view returns (string x) {
return ipfsHash;
}
}
在智能合約完成編寫操作后就可通過Remix進(jìn)行編譯了,在這里編譯只是作為轉(zhuǎn)化語言的一種智能化手段,也就是說,通過該手段智能合約轉(zhuǎn)化為EVM可以識別的字節(jié)碼,進(jìn)而生成一個(gè)ABI(應(yīng)用系統(tǒng)二進(jìn)制接口)。以便將帶有賬戶余額的Metamask錢包會攜帶有關(guān)于編譯的內(nèi)容經(jīng)過智能合約被覆蓋在Kovan上,這種反饋地址的方式便于開發(fā)人員調(diào)用。
(4) 區(qū)塊生成的設(shè)計(jì)與實(shí)現(xiàn)
區(qū)塊是所有重要資產(chǎn)數(shù)據(jù)存放的地方,涵蓋了區(qū)塊頭和區(qū)塊體兩部分。如果資產(chǎn)數(shù)據(jù)在處理之前就要被默認(rèn)進(jìn)行哈希指紋化操作,然后會自動放置到區(qū)塊中,這樣的自動化操作不但能夠節(jié)省時(shí)間的成本,對空間的存儲量而言無疑也會增加,在足夠多的存儲空間范圍內(nèi)能夠更好的保存資產(chǎn)數(shù)據(jù)的完整。區(qū)塊生成的整個(gè)流程,如圖9所示。
圖9 區(qū)塊生成流程
詳細(xì)執(zhí)行步驟為:用戶從客戶端發(fā)起一筆交易,該交易就會通過網(wǎng)絡(luò)遍布到其它參與節(jié)點(diǎn),最后被暫存到各自的交易池(TxPool)中;各個(gè)節(jié)點(diǎn)都會將這些交易池中交易數(shù)據(jù)進(jìn)行簽名驗(yàn)證,這樣數(shù)據(jù)會被完整保存且?guī)в屑用苄?。在系統(tǒng)運(yùn)行此程序中虛擬機(jī)會派上用場,與交易相關(guān)的列表和回執(zhí)隨著程序的完成也會自動生成,一旦簽名無效,則這筆交易也隨之取消;在組裝區(qū)塊操作中,首先要由POA共識機(jī)制篩選出的主節(jié)點(diǎn)來參與所進(jìn)行交易的排序和打包,在排序與打包的過程中當(dāng)有無記賬權(quán)的提示出現(xiàn)時(shí),則要等待下一輪的挖礦才能開啟;區(qū)塊在被挖到后,即可將所進(jìn)行的交易打包,而主節(jié)點(diǎn)就會將該事件進(jìn)行廣播;當(dāng)節(jié)點(diǎn)接收到廣播后,其它的節(jié)點(diǎn)數(shù)據(jù)會進(jìn)行同步操作;把前邊的區(qū)塊Hash值放到本區(qū)塊頭中,形成一條如鏈?zhǔn)浇Y(jié)構(gòu)的數(shù)據(jù)區(qū)域,該區(qū)域就是區(qū)塊鏈。
綜上所述,該系統(tǒng)能夠?qū)崿F(xiàn)對文件的各種操作,從文件上傳、下載、查看等基礎(chǔ)性操作,到為文件進(jìn)行加密、授權(quán)等更多的功能需求均可滿足,它在滿足上述需求的操作過程中智能合約完成相關(guān)文件的數(shù)據(jù)轉(zhuǎn)換及編譯,在用戶進(jìn)行數(shù)據(jù)調(diào)用的操作中,存證用戶需要完成Web前端的相關(guān)操作,如通過Web3.js封裝的JSON-RPCAPI與Kovan測試網(wǎng)絡(luò)進(jìn)行交互,有了程序的執(zhí)行后,作為司法鑒定機(jī)構(gòu)就有獲取授權(quán)的條件了,它能夠以此來獲取區(qū)塊鏈上的存證數(shù)據(jù)了,經(jīng)過程序的進(jìn)一步的驗(yàn)證操作,如與原始文件的比對,這樣一份具有科學(xué)效應(yīng)的司法鑒定報(bào)告便可生成。本文對企業(yè)數(shù)字資產(chǎn)的存證和保全有著非常重要的意義,值得推廣。