• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于區(qū)塊鏈的安全電子商務(wù)系統(tǒng)的研究與實現(xiàn)*

    2021-01-19 11:00:30范吉立李曉華聶鐵錚張巖峰
    計算機(jī)與數(shù)字工程 2020年12期
    關(guān)鍵詞:以太合約區(qū)塊

    范吉立 張 昀 李曉華 聶鐵錚 張巖峰 于 戈

    (1.東北大學(xué)計算機(jī)科學(xué)與工程學(xué)院 沈陽 110169)(2.東北大學(xué)信息化建設(shè)與網(wǎng)絡(luò)安全辦公室 沈陽 110004)

    1 引言

    電子商務(wù)成為互聯(lián)網(wǎng)發(fā)展的重要產(chǎn)物,支付寶采用螞蟻金服自主研發(fā)的通用關(guān)系型數(shù)據(jù)庫OceanBase,支撐了巨大的交易量,其交易是基于電子商務(wù)集權(quán)化中心平臺進(jìn)行的,在集權(quán)化平臺上運行的交易有很多弊端,例如用戶的交易資金會有一段時間存儲在平臺上,業(yè)務(wù)的運轉(zhuǎn)基于用戶對集權(quán)中心的信任,如果第三方不可信,那么用戶資金面臨丟失的風(fēng)險[1]。

    去中心化的電子商務(wù)系統(tǒng)具有成本低、速度快的優(yōu)勢。近幾年,隨著分布式的公共賬本區(qū)塊鏈技術(shù)的發(fā)展,其存儲層分布式結(jié)構(gòu)、交易時的共識機(jī)制、加密算法等特性實現(xiàn)了在沒有第三方監(jiān)督情況下交易的可靠互信,推動了去中心化電子商務(wù)交易市場的發(fā)展[2~3]。2016年4月,使用比特幣進(jìn)行交易的去中心化市場OpenBazaar1.0正式啟動運行,對傳統(tǒng)電子商務(wù)平臺帶來很大的挑戰(zhàn)。OpenBazaar使用多重簽名技術(shù)(multisig)[4],是區(qū)塊鏈領(lǐng)域非??煽康陌踩U霞夹g(shù)。OpenBazaar的成功為開發(fā)安全的電子商務(wù)交易系統(tǒng)提供了思路。

    以太坊(Ethereum)是繼比特幣之后的第二代區(qū)塊鏈平臺,圖靈完備的智能合約使以太坊具有可編程性。通過部署在以太坊上的智能合約代替當(dāng)前的可信中間方完成交易工作,避免了中間方不可信的問題。以太坊采用POW[5](Proof of Work)共識機(jī)制和POA(Proof of Authority)共識機(jī)制[6],同時GHOST協(xié)議解決了快速生成區(qū)塊時區(qū)塊鏈安全問題,保障交易的安全性。整個交易過程透明,區(qū)塊鏈不可篡改的特性保障了交易記錄有證可查。

    當(dāng)下還沒有基于以太坊平臺的成熟電子商務(wù)交易系統(tǒng)。本文設(shè)計基于區(qū)塊鏈的電子商務(wù)安全交易系統(tǒng),主要工作如下:1)安全性設(shè)計,從三個層面提高系統(tǒng)安全性,應(yīng)用層登錄時設(shè)計附加驗證機(jī)制,有效防止DDoS攻擊;數(shù)據(jù)存儲層面,設(shè)計基于區(qū)塊鏈和鏈下數(shù)據(jù)庫結(jié)合的存儲機(jī)制,用戶隱私信息存儲在鏈下,并對密碼信息進(jìn)行Hash加鹽處理,防止暴庫攻擊及賬號信息泄露;交易處理層面,商品交易操作由智能合約完成,交易信息存儲在區(qū)塊鏈,實現(xiàn)安全可信交易。2)查詢優(yōu)化設(shè)計,為鏈下數(shù)據(jù)庫中存儲的用戶信息和商品信息建立索引,設(shè)計智能合約中商品信息及交易存儲結(jié)構(gòu),建立用戶和商品交易的映射關(guān)系,提高商品信息及交易狀態(tài)的查詢效率。本文基于以太坊平臺完成了基于區(qū)塊鏈的交易處理。

    圖1 系統(tǒng)體系結(jié)構(gòu)設(shè)計

    2 關(guān)鍵技術(shù)

    系統(tǒng)采取B/S架構(gòu)與分布式相結(jié)合。體系結(jié)構(gòu)參考圖1,主要分三層設(shè)計:應(yīng)用層、中間層和數(shù)據(jù)層。應(yīng)用層通過Web界面為用戶提供可視化操作接口,使用戶能夠與系統(tǒng)進(jìn)行交互,應(yīng)用層劃分為三個功能模塊:賬戶管理模塊,交易模塊,信息查詢模塊,部署在中心化服務(wù)上。中間層部分,Java的web3j類庫實現(xiàn)了Maven框架[7]下,通過java語言編寫部署并調(diào)用合約的功能。應(yīng)用層通過JDBC driver連接MySQL數(shù)據(jù)庫,Web3j連接智能合約。數(shù)據(jù)層由區(qū)塊鏈及MySQL數(shù)據(jù)庫組成存儲設(shè)施。本系統(tǒng)將敏感和非重要數(shù)據(jù)存儲于默認(rèn)innodb引擎的MySQL數(shù)據(jù)庫。應(yīng)用層為了保障用戶安全性,客戶端登錄時設(shè)計了附加驗證機(jī)制,利用驗證碼防止DDoS攻擊。

    2.1 數(shù)據(jù)存儲

    2.1.1 SQL數(shù)據(jù)庫上的數(shù)據(jù)存儲

    關(guān)系數(shù)據(jù)庫服務(wù)器存儲三種信息,分為三個表:用于記錄用戶詳細(xì)信息的表user,用于記錄商品詳細(xì)信息的表goods以及用于記錄交易詳細(xì)信息的表transporting。表中存儲用戶以及商品對應(yīng)智能合約地址,方便交易的檢索。

    2.1.2 智能合約數(shù)據(jù)存儲

    智能合約及其相關(guān)的數(shù)據(jù)存儲在區(qū)塊鏈上。數(shù)據(jù)類型分為memory,storage和calldata三種[8],其中需要永久保存的數(shù)據(jù)被智能合約設(shè)置為storage類型,持久化存儲到磁盤上的數(shù)據(jù)庫LevelDB中。本系統(tǒng)中,新的合約隨著新商品的創(chuàng)建被部署到區(qū)塊鏈上,合約商品信息記錄如表1所示。good_trade_info記錄每一個商品的當(dāng)前狀態(tài),有資格擁有商品所有權(quán)的實體包括賣家,買家以及智能合約,當(dāng)一件商品處于被交易狀態(tài)的時候,為了保障交易的可靠和公平公正,此時商品應(yīng)該歸智能合約所有,這時智能合約扮演了可信第三方。具體信息如表2所示。

    表1 合約商品信息

    表2 商品交易信息good_trade

    buyer_record_info記錄用戶購買當(dāng)前合約商品的一筆訂單詳細(xì)情況,給定用戶和商品合約地址后可以跟蹤他購買該商品狀態(tài)信息,buyer_record結(jié)構(gòu)體的詳細(xì)定義見表3。balanceOf變量記錄某用戶總共購買的商品量,buy_good_No數(shù)組依次記錄用戶的購買商品編號,if_sign記錄每筆訂單的簽收情況以及buy_good_No中每筆訂單商品編號記錄的起始位置以及結(jié)束位置。

    表3 買家信息buyer_record

    2.1.3 數(shù)據(jù)安全保障

    存儲在數(shù)據(jù)庫的信息(主要是用戶密碼以及隱私信息)會被加鹽處理,通過MD5摘要算法對關(guān)鍵內(nèi)容加鹽hash后存入數(shù)據(jù)庫,以上設(shè)計能夠防止暴庫攻擊。MySQL數(shù)據(jù)庫中不保存與用戶實際資產(chǎn)相關(guān)的信息,即使MySQL中數(shù)據(jù)被惡意篡改,用戶實際資產(chǎn)也不受影響。

    2.2 交易

    本節(jié)介紹系統(tǒng)的交易執(zhí)行流程,及不同種類交易的具體過程。

    2.2.1 系統(tǒng)交易執(zhí)行流程

    用戶請求的交易經(jīng)過web服務(wù)器前端發(fā)送給web3j,與智能合約的交互通過web3j類庫實現(xiàn),具體執(zhí)行時序如圖2所示。為保障交易有序,以太坊要求一個賬戶每筆交易有一個連續(xù)的計數(shù)nonce[9],同一賬戶交易的提交嚴(yán)格按照nonce順序執(zhí)行,避免了雙花問題。

    圖2 系統(tǒng)交互時序圖

    2.2.2 智能合約功能

    為了記錄賣家身份,設(shè)計商品擁有者的智能合約owned,同時利用modifier驗證當(dāng)前用戶,確保后續(xù)操作該商品的用戶為賣家。每個商品用一個合約表示,通過其部署的地址可以對這個商品進(jìn)行操作。以下為系統(tǒng)的交易功能:

    1)創(chuàng)建商品。部署智能合約時,將智能合約編譯為java類。調(diào)用構(gòu)造函數(shù)將商品合約部署到以太坊網(wǎng)絡(luò)上,同時得到合約地址。

    2)增加商品。由于具有添加商品功能的用戶應(yīng)該只有創(chuàng)建當(dāng)前合約的人(即賣家),因此使用modifier來限制調(diào)用此功能的消息發(fā)起者只能為這個商品合約的owner。

    3)購買商品。以太坊的交易執(zhí)行保障了原子性,若交易執(zhí)行條件不滿足則合約不會執(zhí)行輸出。當(dāng)系統(tǒng)執(zhí)行購買操作時,首先確認(rèn)商品余額足夠,之后再進(jìn)行交易的核心操作。

    執(zhí)行交易的關(guān)鍵操作是智能合約buyer_record結(jié)構(gòu)體狀態(tài)的改變,如圖3所示。一筆新的購買交易產(chǎn)生后,首先good_trade_info中被選中出售的1(或n)個商品的狀態(tài)會更新,buy_good_No向后追加當(dāng)前交易商品的id,對應(yīng)的,if_sign中追加buy_good_No隊列的元數(shù)據(jù)信息,用于索引buy_good_No的交易記錄和交易狀態(tài),包括當(dāng)前交易在buy_good_No中起始記錄位置(sp),結(jié)束記錄位置(ep),以及當(dāng)前訂單狀態(tài)(state)。

    圖3 buyer_record結(jié)構(gòu)體存儲機(jī)制

    購買商品函數(shù)執(zhí)行后簽收狀態(tài)記為“未簽收”,具體算法如下面?zhèn)未a所示。

    算法1購買商品

    Input:good amount

    Output:good_trade_info,buyer_record_info

    1 check the balance of good

    2 change the balance of contract and seller

    3 add new purchase record to buyer_record_info.if_sign

    4 for i

    5 if good_trade_info[i].buyer==0x0

    6 then good_trade_info[i].buyer=msg.sender;

    7 good_trade_info.in_whose_hand=this;

    8 buyer_record_info.buy_good_No.push(i);

    4)簽收商品。一筆交易記錄在合約購買功能執(zhí)行時產(chǎn)生,if_sign數(shù)組追加一組包含三個元素的記錄。在執(zhí)行簽收操作前驗證簽收條件是否滿足,驗證后將交易k購買的所有商品的擁有者更新為買家,并執(zhí)行轉(zhuǎn)賬。最后將if_sign數(shù)組中交易k的交易狀態(tài)信息更新為已簽收。操作完成后,智能合約輸出結(jié)果,否則合約執(zhí)行失敗并回滾。

    5)退款。退款函數(shù)程序流程與簽收類似,區(qū)別在于退款不需要用戶支付以太幣,不驗證支付信息;商品狀態(tài)重置為初始狀態(tài),if_sign數(shù)組中交易狀態(tài)更新為已退款。

    2.2.3 交易安全保障

    執(zhí)行交易時,商品合約狀態(tài)發(fā)生改變,利用Ethereum中橢圓曲線ECDSA簽名算法[10],保證交易發(fā)送方msg.sender不可偽造[11],實現(xiàn)商品交易信息不可抵賴。

    執(zhí)行查詢時,通過eth_call調(diào)用智能合約,eth_call不改變合約狀態(tài),調(diào)用者用自己的私鑰對查詢函數(shù)進(jìn)行簽名來實現(xiàn)查詢可信性。

    在智能合約代碼層面,為保障代碼執(zhí)行過程中的安全性,防止數(shù)學(xué)運算越界溢出,引入SafeMath庫,該函數(shù)庫為uint類型變量運算溢出和下溢提供了檢測機(jī)制[13],能夠加強(qiáng)Solidity在轉(zhuǎn)賬運算上的安全性。在執(zhí)行商品交易操作時,都嚴(yán)格檢查先決條件,如限定增加商品的發(fā)起人必須是賣家,簽收操作發(fā)起人必須是買家等,避免智能合約的邏輯漏洞。

    2.3 查詢優(yōu)化

    用戶登陸時,用戶表user中以用戶名作為主鍵,采用MySQL的默認(rèn)innodb引擎,用戶數(shù)據(jù)由用戶名作為關(guān)鍵字建立B+樹索引。

    當(dāng)執(zhí)行商品查詢時,以商品id為主鍵建立主索引,為了提高商品的檢索速度,對商品的多個屬性建立輔助索引,包括商品名(state),賣家(seller_id),價格(price)等。通過商品智能合約地址查詢商品信 息 時,首 先 利 用Bloom Filter[12]檢 測 該 地 址 在goods表中是否存在,若存在,則通過該地址調(diào)用智能合約執(zhí)行商品查詢操作。用戶表user中,對用戶的賬號可以執(zhí)行同樣操作以提升查詢效率。

    區(qū)塊鏈數(shù)據(jù)查詢中,設(shè)計商品交易信息存儲結(jié)構(gòu)buyer_record,建立元數(shù)據(jù)與商品信息的映射關(guān)系,提高查詢效率,詳細(xì)結(jié)構(gòu)見前述小節(jié)2.1.2。

    3 實驗分析

    3.1 環(huán)境設(shè)置

    實驗環(huán)境為Windows10和CentOS操作系統(tǒng),硬件配置Intel i5雙核CPU 2.50 GHz,Intel E7-4820,8vCPU 2.0GHz。智能合約使用Solidity編寫,mist客戶端。系統(tǒng)開發(fā)工具為MyEclipse,Solidity合約編譯環(huán)境為solc。Javascript編寫應(yīng)用端測試腳本。

    3.2 系統(tǒng)實現(xiàn)

    交易詳細(xì)信息的界面如圖4所示,包括產(chǎn)品購買信息,簽收狀況和退款狀況。數(shù)據(jù)庫中存儲的具體數(shù)據(jù)內(nèi)容如表4所示,字段contract_address為商品對應(yīng)的合約地址,可以索引到區(qū)塊鏈網(wǎng)絡(luò)中存儲的商品。

    表4 合約商品信息

    圖4 用戶信息界面

    3.3 實驗結(jié)果

    通過以下實驗對系統(tǒng)在區(qū)塊鏈上的寫入和查詢效率進(jìn)行測試和分析,區(qū)塊鏈節(jié)點環(huán)境為Geth,編寫Javascript腳本,通過Web3接口調(diào)用智能合約方法發(fā)起交易及數(shù)據(jù)查詢。Geth節(jié)點主要創(chuàng)世參數(shù)如下:

    實驗一 交易處理時間

    對區(qū)塊鏈上交易執(zhí)行時間進(jìn)行測試,圖5為用戶訂單購買和簽收不同數(shù)量商品的交易處理時間,平均處理時間在3600ms左右,處理每單交易的時間基本不受交易商品數(shù)量的影響。結(jié)果表明本系統(tǒng)智能合約核心邏輯設(shè)計合理,在私有鏈或聯(lián)盟鏈環(huán)境下運行具有較高的實用性。

    圖5 購買和簽收交易響應(yīng)時間

    與傳統(tǒng)中心化電子商務(wù)交易系統(tǒng)相比,本系統(tǒng)交易訂單處理效率偏低,主要受限于PoW共識機(jī)制,在今后實際應(yīng)用中需要對區(qū)塊鏈共識機(jī)制進(jìn)行優(yōu)化,在保證交易安全的前提下提高處理效率。

    實驗二 查詢商品交易狀態(tài)

    測試查詢區(qū)塊鏈上商品交易狀態(tài)的響應(yīng)時間。商品總數(shù)量為500個,以商品id為參數(shù),通過腳本調(diào)用智能合約查詢方法,記錄查詢商品交易狀態(tài)的響應(yīng)時間,如圖6所示,響應(yīng)時間與查詢的商品數(shù)量成正比,符合預(yù)期。平均響應(yīng)時間在110ms左右,效率較高。

    圖6 查詢商品交易狀態(tài)

    實驗三 查詢訂單狀態(tài)

    測試查詢訂單狀態(tài)的響應(yīng)時間。結(jié)果顯示平均每個訂單查詢響應(yīng)時間為95.2ms,最快響應(yīng)時間為80ms,如圖7圖表所示,查詢速度較快。實驗三和實驗四的結(jié)果表明本系統(tǒng)所設(shè)計智能合約存儲結(jié)構(gòu)在數(shù)據(jù)查詢上比較高效。區(qū)塊鏈底層數(shù)據(jù)庫LevelDB在查詢性能上具有一定的局限性,今后優(yōu)化查詢效率可從兩方面入手:一種方式為對底層LevelDB數(shù)據(jù)庫進(jìn)行改造優(yōu)化,在區(qū)塊鏈存儲結(jié)構(gòu)內(nèi)部增加輔助索引;另一種方式為設(shè)置外聯(lián)數(shù)據(jù)庫,將區(qū)塊鏈數(shù)據(jù)同步到外聯(lián)數(shù)據(jù)庫進(jìn)行查詢優(yōu)化[14]。

    圖7 查詢訂單狀態(tài)

    實驗四 多節(jié)點交易處理時間

    基于多個區(qū)塊鏈節(jié)點,測試節(jié)點數(shù)量對并發(fā)交易處理時間的影響。在不同節(jié)點數(shù)量的區(qū)塊鏈網(wǎng)絡(luò)中,分別并發(fā)發(fā)送100條商品購買交易,等待返回交易結(jié)果并記錄處理時間。實驗結(jié)果表明,節(jié)點數(shù)量對交易處理時間有一定影響,如圖8所示,節(jié)點數(shù)量增加會適當(dāng)縮短響應(yīng)時間,說明以太坊在多節(jié)點網(wǎng)絡(luò)環(huán)境執(zhí)行效率較高。但與傳統(tǒng)交易系統(tǒng)千萬級并發(fā)相比,差距較大,當(dāng)前比較主流的優(yōu)化方案包括:閃電網(wǎng)絡(luò)、分片、側(cè)鏈等。

    圖8 多節(jié)點交易響應(yīng)時間

    4 結(jié)語

    與傳統(tǒng)交易系統(tǒng)比,基于區(qū)塊鏈平臺存儲交易信息,實現(xiàn)了去集權(quán)化,由合約保障交易的正常運作。區(qū)塊鏈數(shù)據(jù)只能追加不能修改,避免了傳統(tǒng)交易系統(tǒng)存在的數(shù)據(jù)被篡改的風(fēng)險。系統(tǒng)的敏感及非重要數(shù)據(jù)存儲在鏈下數(shù)據(jù)庫中,提供豐富的查詢條件,保障用戶信息的隱私性。隨著以太坊2.0分片技術(shù)的提出,以太坊的交易吞吐量將會有很大的提升[15],使其能夠承擔(dān)電子商務(wù)系統(tǒng)的龐大交易量。本系統(tǒng)在未來研究中將進(jìn)一步完善功能,比如需要增加物流信息,提高實用性。網(wǎng)上購物保障商品的發(fā)貨、簽收、退款功能的正常運作,物流方必不可少。

    本文基于以太坊平臺構(gòu)建去集權(quán)化安全電子商務(wù)系統(tǒng),探索了未來網(wǎng)上交易的新模式,對安全電子商務(wù)的發(fā)展具有一定的借鑒意義。

    猜你喜歡
    以太合約區(qū)塊
    以太極為旗,開啟新時代“黃河大合唱”
    少林與太極(2023年7期)2023-08-25 05:27:52
    區(qū)塊鏈:一個改變未來的幽靈
    科學(xué)(2020年5期)2020-11-26 08:19:12
    區(qū)塊鏈:主要角色和衍生應(yīng)用
    科學(xué)(2020年6期)2020-02-06 08:59:56
    車易鏈:做汽車業(yè)的“以太坊”
    汽車觀察(2018年9期)2018-10-23 05:46:24
    區(qū)塊鏈+媒體業(yè)的N種可能
    傳媒評論(2018年4期)2018-06-27 08:20:12
    讀懂區(qū)塊鏈
    百通推出入門級快速工業(yè)以太網(wǎng)絡(luò)交換器系列
    以太互聯(lián) 高效便捷 經(jīng)濟(jì)、可靠、易用的小型可編程控制器
    自動化博覽(2014年6期)2014-05-29 09:40:16
    合約必守,誰能例外!——對“情勢變更”制度不可寄于過高期望
    民勤县| 塘沽区| 定陶县| 德庆县| 香格里拉县| 同仁县| 开封市| 余干县| 壶关县| 玉环县| 大港区| 镇原县| 静安区| 华安县| 哈尔滨市| 定南县| 宁阳县| 东阿县| 肇东市| 朝阳县| 绍兴县| 静安区| 电白县| 读书| 黔江区| 茶陵县| 辉南县| 石景山区| 洛川县| 宁乡县| 延长县| 拜泉县| 集安市| 许昌市| 盐山县| 潮安县| 抚松县| 集贤县| 临海市| 嘉荫县| 闽清县|