国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于以太坊私有鏈的數(shù)據(jù)存證與驗證服務(wù)

2021-11-13 06:10楊春節(jié)高琪娟徐光翔
關(guān)鍵詞:以太哈希合約

楊春節(jié),朱 軍,高琪娟,徐光翔

(安徽農(nóng)業(yè)大學(xué) a.信息化辦公室;b.信息與計算機(jī)學(xué)院,合肥 230036)

0 引 言

區(qū)塊鏈技術(shù)被視為繼云計算、物聯(lián)網(wǎng)、大數(shù)據(jù)之后的又一項顛覆性技術(shù),在本質(zhì)上是一種安全可靠的數(shù)據(jù)庫技術(shù)方案,區(qū)塊數(shù)據(jù)無法修改,所有歷史記錄數(shù)據(jù)永久保留是其重要特性。[1,2]當(dāng)前主流的數(shù)據(jù)庫Oracle、SQL Server、Mysql等數(shù)據(jù)庫技術(shù)是信息系統(tǒng)的核心,解決了計算機(jī)信息處理過程中大量數(shù)據(jù)有效地組織、存儲、檢索和處理等方面的問題,但信息系統(tǒng)及數(shù)據(jù)庫管理工具可以任意修改數(shù)據(jù)庫中的數(shù)據(jù),由此帶來的數(shù)據(jù)安全問題也比較突出,數(shù)據(jù)泄露、SQL注入攻擊、數(shù)據(jù)庫違規(guī)操作等數(shù)據(jù)安全事件屢屢出現(xiàn)。在信息系統(tǒng)開發(fā)及應(yīng)用中,融合區(qū)塊鏈技術(shù)是提升數(shù)據(jù)安全的又一重要途徑,在信息系統(tǒng)數(shù)據(jù)管理模塊增加數(shù)據(jù)上鏈及數(shù)據(jù)驗證功能可以加強(qiáng)信息系統(tǒng)數(shù)據(jù)的安全管理和監(jiān)測。

基于區(qū)塊鏈技術(shù)的數(shù)據(jù)存證與驗證公共服務(wù)鏈采用以太坊開源項目[3,4]進(jìn)行基礎(chǔ)平臺建設(shè),運(yùn)行具有普適性的數(shù)據(jù)存證與驗證智能合約[1,5,6,7],通過RPC服務(wù)[8]面向第三方信息系統(tǒng)提供數(shù)據(jù)上鏈及驗證接入服務(wù)。信息系統(tǒng)調(diào)用公共服務(wù)平臺的服務(wù)接口[9],實現(xiàn)應(yīng)用集成后即可擁有基于區(qū)塊鏈技術(shù)的數(shù)據(jù)存證與驗證能力。

1 區(qū)塊鏈相關(guān)技術(shù)及應(yīng)用簡介

1.1 區(qū)塊鏈

區(qū)塊鏈?zhǔn)且粋€信息技術(shù)領(lǐng)域的術(shù)語。區(qū)塊鏈把數(shù)據(jù)分成不同的區(qū)塊,每個區(qū)塊通過特定的信息鏈接到上一區(qū)塊的后面,前后順連,呈現(xiàn)一套完整的數(shù)據(jù)。每個區(qū)塊的塊頭包含前一個區(qū)塊的哈希值,該值是對前區(qū)塊的塊頭進(jìn)行哈希函數(shù)計算而得到。區(qū)塊之間都會由這樣的哈希值與先前的區(qū)塊環(huán)環(huán)相扣形成一個鏈條,存儲于其中的數(shù)據(jù)或信息,具有不可偽造、全程留痕、可以追溯、公開透明、集體維護(hù)等特征。[1]區(qū)塊鏈接示意如圖1。

圖1 區(qū)塊鏈接示意圖

根據(jù)應(yīng)用場景不同,區(qū)塊鏈可以分為公有鏈(Public Blockchain)、聯(lián)盟鏈(Consortium Blockchain)和私有鏈(Private Blockchain)。公有鏈?zhǔn)侵溉澜缛魏稳硕伎梢噪S時進(jìn)入系統(tǒng)中讀取數(shù)據(jù)、發(fā)送可確認(rèn)交易、競爭記賬的區(qū)塊鏈。公有鏈通常被認(rèn)為是完全去中心化的,沒有任何人或機(jī)構(gòu)可以控制或者篡改其中數(shù)據(jù)的讀寫。聯(lián)盟鏈?zhǔn)侵赣扇舾蓚€機(jī)構(gòu)共同參與管理的區(qū)塊鏈,每個機(jī)構(gòu)都運(yùn)行著一個或多個節(jié)點,其中的數(shù)據(jù)只允許系統(tǒng)內(nèi)不同的機(jī)構(gòu)進(jìn)行讀寫和發(fā)送交易,并且共同來記錄交易數(shù)據(jù)。私有鏈?zhǔn)侵钙鋵懭霗?quán)限是由某個組織和機(jī)構(gòu)控制的區(qū)塊鏈,參與的節(jié)點是有限和可控的,具有極快的交易速度、更好的隱私保護(hù)、更低的交易成本、不容易被惡意攻擊等優(yōu)點。

1.2 智能合約

智能合約是一種模塊化、可重用的自動執(zhí)行腳本,可替代第三方信任平臺實現(xiàn)交易雙方直接進(jìn)行可信交易,這些交易可追溯且無法發(fā)生回滾。智能合約根據(jù)按照實際業(yè)務(wù)邏輯定義相應(yīng)規(guī)則,調(diào)用智能合約將會按照合約定義的交易規(guī)則來實現(xiàn)鏈上的交易,訪問鏈上信息。

1.3 以太坊

以太坊(Ethereum)是一個開源的有智能合約功能的公共區(qū)塊鏈平臺。依托以太坊開源項目可以很方便地搭建公有鏈、聯(lián)盟鏈和私有鏈,發(fā)布智能合約等。在以太坊平臺上可以使用Solidity語言作為智能合約開發(fā)語言[10],Remix在線開發(fā)平臺為開發(fā)工具。[10]

1.4 Web3j

web3j是一個輕量級、高度模塊化、響應(yīng)式、類型安全的 Java 和 Android 庫,用于與智能合約以及與以太坊網(wǎng)絡(luò)上的客戶端(節(jié)點)進(jìn)行集成。[12]

1.5 哈希算法(HASH)

哈希算法將任意長度的二進(jìn)制值映射為較短的固定長度的二進(jìn)制值,這個二進(jìn)制值稱為哈希值。哈希值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式,可以檢驗數(shù)據(jù)的完整性。[13]散列明文中任何改動都會產(chǎn)生不同的哈希值,要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的。

2 系統(tǒng)設(shè)計與開發(fā)

2.1 系統(tǒng)模型

本系統(tǒng)依托以太坊開源項目搭建私有鏈,作為區(qū)塊鏈技術(shù)具體實現(xiàn)和應(yīng)用平臺,基于該平臺開發(fā)智能合約,實現(xiàn)數(shù)據(jù)存證與驗證功能,面向第三方信息系統(tǒng)提供數(shù)據(jù)存證與驗證服務(wù)。信息系統(tǒng)服務(wù)器端通過區(qū)塊鏈接口層調(diào)用智能合約,實現(xiàn)數(shù)據(jù)上鏈與驗證。整個系統(tǒng)由區(qū)塊鏈層、信息系統(tǒng)層、區(qū)塊鏈層組成。系統(tǒng)模型見圖2。

圖2 系統(tǒng)架構(gòu)圖

區(qū)塊鏈層使用以太坊開源項目實現(xiàn),鑒于區(qū)塊鏈技術(shù)的特性,可以確保鏈上數(shù)據(jù)的安全性和不可篡改性。

信息系統(tǒng)層是信息系統(tǒng)的原有架構(gòu),需要實現(xiàn)關(guān)鍵數(shù)據(jù)存證與驗證服務(wù)時,需要通過改造相應(yīng)模塊,借助區(qū)塊鏈接口層與區(qū)塊鏈層進(jìn)行集成。信息系統(tǒng)與區(qū)塊鏈層集成時,信息系統(tǒng)的數(shù)據(jù)管理模塊在數(shù)據(jù)保存至數(shù)據(jù)庫的同時把該關(guān)鍵數(shù)據(jù)的HASH值、關(guān)鍵數(shù)據(jù)加密并轉(zhuǎn)換成十六進(jìn)制后,通過線程技術(shù)上傳數(shù)據(jù)HASH值及密文的十六進(jìn)制至區(qū)塊鏈,根據(jù)哈希算法的特性,可以實現(xiàn)可信數(shù)據(jù)存證;在數(shù)據(jù)查詢環(huán)節(jié),通過異步執(zhí)行的方式獲取區(qū)塊鏈中數(shù)據(jù)的HASH值,與信息系統(tǒng)數(shù)據(jù)庫中的數(shù)據(jù)HASH值進(jìn)行比對實現(xiàn)數(shù)據(jù)驗證,監(jiān)測數(shù)據(jù)是否發(fā)生篡改及非法修改情況。同時,使用區(qū)塊鏈所有歷史記錄數(shù)據(jù)永久保留的特性可以從區(qū)塊鏈獲取區(qū)塊鏈中相應(yīng)數(shù)據(jù)的十六進(jìn)制值,通過數(shù)據(jù)轉(zhuǎn)換及解密可以實現(xiàn)數(shù)據(jù)回溯。

區(qū)塊鏈接口層(Web3j)[12,14,15]是第三方信息系統(tǒng)(JAVA)與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行交互的“橋梁”,實現(xiàn)數(shù)據(jù)存證及驗證時請求及響應(yīng)數(shù)據(jù)的傳輸。

2.2 智能合約設(shè)計

智能合約是在區(qū)塊鏈網(wǎng)絡(luò)實現(xiàn)數(shù)據(jù)存證與驗證的關(guān)鍵,本文采用Solidity語言開發(fā)智能合約,主要涉及智能合約存證數(shù)據(jù)的結(jié)構(gòu)設(shè)計、存證函數(shù)與驗證函數(shù)的編寫。數(shù)據(jù)存證與驗證智能合約主要變量及函數(shù)、用于存證的自定義結(jié)構(gòu)類型(ProofContent)成員名稱及說明見表1、表2。

表1 數(shù)據(jù)存證與驗證智能合約主要變量及函數(shù)

表2 自定義結(jié)構(gòu)類型成員名稱及說明

智能合約代碼如下:

pragma solidity ^0.4.25;

contract AhauProof {

//合約功能:記錄數(shù)據(jù)憑證、檢驗數(shù)據(jù)修改情況

//自定義的結(jié)構(gòu)類型

struct ProofContent {

address _from;

string recordId; //系統(tǒng)名稱+表名+記錄ID

string hash; //關(guān)鍵數(shù)據(jù)hash

string data; //關(guān)鍵數(shù)據(jù)(json格式的加密數(shù)據(jù),支持驗證時解密)

}

//映射數(shù)據(jù)

mapping(string =>ProofContent)private proofContents;

string recordId;

function setRecordId(string memory _recordId)public{

recordId =_recordId;

}

function getRecordId()view public returns (string){

return recordId;

}

event InsertEvn(string recordId ,string hash ,string data);

//記錄上鏈

function insertProof(string memory _recordId,string memory hash,string memory data)public {

//recordId首次上鏈

if (isEqual(proofContents[_recordId].data,"")){

proofContents[_recordId].recordId =recordId;

proofContents[_recordId].hash =hash;

proofContents[_recordId].data =data;

} else {

//recordId再次上鏈時

proofContents[_recordId].recordId =recordId;

proofContents[_recordId].hash

string(constatString(proofContents[_recordId].hash,hash));

proofContents[_recordId].data

string(constatString(proofContents[_recordId].data,data));

}

emit InsertEvn(recordId,proofContents[_recordId].hash,proofContents[_recordId].data);

}

//查看鏈上記錄-hash數(shù)據(jù)

function viewHash()public view returns(string){

return proofContents[recordId].hash;

}

//查看鏈上記錄-data數(shù)據(jù)

function viewData()public view returns(string memory){

return proofContents[recordId].data;

}

//字符串比較

function isEqual(string memory a,string memory b)public pure returns (bool){

bytes32 hashA =keccak256(abi.encode(a));

bytes32 hashB =keccak256(abi.encode(b));

return hashA ==hashB;

}

//字符串連接

function constatString(string memory a,string memory b)private pure returns(bytes memory){

bytes memory str1 =bytes(a);

bytes memory str2 =bytes(b);

string memory ret =new string(str1.length+str2.length+1);

bytes memory bret =bytes(ret);

uint k =0;

for (uint i=0;i

bret[k++] =“&”;

for (i=0;i

return bret;

}

}

2.3 信息系統(tǒng)與區(qū)塊鏈集成

信息系統(tǒng)開發(fā)一般采用分層開發(fā)模式,如使用JAVA語言開發(fā)應(yīng)用程序時常用的SSH框架一般分為實體層、數(shù)據(jù)層、業(yè)務(wù)邏輯層、控制層。為了盡量減少信息系統(tǒng)與區(qū)塊鏈集成時對業(yè)務(wù)邏輯的影響,可以選擇在業(yè)務(wù)邏輯層或數(shù)據(jù)層的數(shù)據(jù)增刪改業(yè)務(wù)功能完成后,新開線程完成數(shù)據(jù)上鏈,以避免線程阻塞,影響程序運(yùn)行效率[16,17]。數(shù)據(jù)驗證及變動歷史查詢一般在業(yè)務(wù)邏輯層開發(fā),面向前端界面提供調(diào)用服務(wù),而在前端界面中則通過Ajax異步調(diào)用方式進(jìn)行集成,以避免調(diào)用區(qū)塊鏈的接口服務(wù)時影響網(wǎng)頁加載速度。JAVA應(yīng)用程序與區(qū)塊鏈集成后示意圖如圖3所示。

圖3 JAVA應(yīng)用程序與區(qū)塊鏈集成示意圖

2.4 功能測試

按照2.3所述思路進(jìn)行系統(tǒng)集成后,功能測試情況如下:

(1)數(shù)據(jù)上鏈存證:記錄新增及修改功能正常,數(shù)據(jù)保存的同時實現(xiàn)相關(guān)數(shù)據(jù)上鏈存證。

(2)數(shù)據(jù)驗證:在數(shù)據(jù)查詢界面中,鏈上驗證異步運(yùn)行,網(wǎng)頁加載速度正常。當(dāng)從數(shù)據(jù)庫中直接更改某一記錄值時,鏈上驗證則不通過,如圖4所示。

圖4 鏈上驗證示意圖

(3)數(shù)據(jù)歷史溯源:信息系統(tǒng)中數(shù)據(jù)的正常修改歷史可以從鏈上獲取。

3 總 結(jié)

通過信息系統(tǒng)與區(qū)塊鏈技術(shù)集成可以加強(qiáng)信息系統(tǒng)運(yùn)行過程中對數(shù)據(jù)非法篡改或者通過數(shù)據(jù)庫非正常修改數(shù)據(jù)行為的監(jiān)測,有效提升信息系統(tǒng)的數(shù)據(jù)安全能力。但在系統(tǒng)開發(fā)及測試的過程中,我們發(fā)現(xiàn)即使采用效率較高的私有鏈技術(shù),區(qū)塊鏈的數(shù)據(jù)存取效率與傳統(tǒng)數(shù)據(jù)庫系統(tǒng)仍存在著較大的差距,研究、完善區(qū)塊鏈的在信息系統(tǒng)高并發(fā)、大規(guī)模集群應(yīng)用需求下的技術(shù)顯得至關(guān)重要。

猜你喜歡
以太哈希合約
基于特征選擇的局部敏感哈希位選擇算法
哈希值處理 功能全面更易用
文件哈希值處理一條龍
基于活躍節(jié)點庫的以太坊加密流量識別方法
以太萬物理論概述
車易鏈:做汽車業(yè)的“以太坊”
巧用哈希數(shù)值傳遞文件
A Study on the Contract Research Organization
宁夏| 冕宁县| 长宁区| 浦江县| 徐水县| 平远县| 介休市| 团风县| 商都县| 阿坝县| 司法| 南阳市| 马关县| 阿拉善右旗| 乌鲁木齐县| 长春市| 凤凰县| 仁布县| 吉木萨尔县| 太原市| 永德县| 德兴市| 稷山县| 油尖旺区| 昭苏县| 文昌市| 额济纳旗| 若尔盖县| 耒阳市| 安泽县| 古丈县| 江华| 济南市| 东城区| 南平市| 靖西县| 香河县| 侯马市| 和林格尔县| 合肥市| 扬中市|