基于区块链的安全电子商务系统的研究与实现*

2021-01-19 11:00范吉立李晓华聂铁铮张岩峰
计算机与数字工程 2020年12期
关键词:以太合约区块

范吉立 张 昀 李晓华 聂铁铮 张岩峰 于 戈

(1.东北大学计算机科学与工程学院 沈阳 110169)(2.东北大学信息化建设与网络安全办公室 沈阳 110004)

1 引言

电子商务成为互联网发展的重要产物,支付宝采用蚂蚁金服自主研发的通用关系型数据库OceanBase,支撑了巨大的交易量,其交易是基于电子商务集权化中心平台进行的,在集权化平台上运行的交易有很多弊端,例如用户的交易资金会有一段时间存储在平台上,业务的运转基于用户对集权中心的信任,如果第三方不可信,那么用户资金面临丢失的风险[1]。

去中心化的电子商务系统具有成本低、速度快的优势。近几年,随着分布式的公共账本区块链技术的发展,其存储层分布式结构、交易时的共识机制、加密算法等特性实现了在没有第三方监督情况下交易的可靠互信,推动了去中心化电子商务交易市场的发展[2~3]。2016年4月,使用比特币进行交易的去中心化市场OpenBazaar1.0正式启动运行,对传统电子商务平台带来很大的挑战。OpenBazaar使用多重签名技术(multisig)[4],是区块链领域非常可靠的安全保障技术。OpenBazaar的成功为开发安全的电子商务交易系统提供了思路。

以太坊(Ethereum)是继比特币之后的第二代区块链平台,图灵完备的智能合约使以太坊具有可编程性。通过部署在以太坊上的智能合约代替当前的可信中间方完成交易工作,避免了中间方不可信的问题。以太坊采用POW[5](Proof of Work)共识机制和POA(Proof of Authority)共识机制[6],同时GHOST协议解决了快速生成区块时区块链安全问题,保障交易的安全性。整个交易过程透明,区块链不可篡改的特性保障了交易记录有证可查。

当下还没有基于以太坊平台的成熟电子商务交易系统。本文设计基于区块链的电子商务安全交易系统,主要工作如下:1)安全性设计,从三个层面提高系统安全性,应用层登录时设计附加验证机制,有效防止DDoS攻击;数据存储层面,设计基于区块链和链下数据库结合的存储机制,用户隐私信息存储在链下,并对密码信息进行Hash加盐处理,防止暴库攻击及账号信息泄露;交易处理层面,商品交易操作由智能合约完成,交易信息存储在区块链,实现安全可信交易。2)查询优化设计,为链下数据库中存储的用户信息和商品信息建立索引,设计智能合约中商品信息及交易存储结构,建立用户和商品交易的映射关系,提高商品信息及交易状态的查询效率。本文基于以太坊平台完成了基于区块链的交易处理。

图1 系统体系结构设计

2 关键技术

系统采取B/S架构与分布式相结合。体系结构参考图1,主要分三层设计:应用层、中间层和数据层。应用层通过Web界面为用户提供可视化操作接口,使用户能够与系统进行交互,应用层划分为三个功能模块:账户管理模块,交易模块,信息查询模块,部署在中心化服务上。中间层部分,Java的web3j类库实现了Maven框架[7]下,通过java语言编写部署并调用合约的功能。应用层通过JDBC driver连接MySQL数据库,Web3j连接智能合约。数据层由区块链及MySQL数据库组成存储设施。本系统将敏感和非重要数据存储于默认innodb引擎的MySQL数据库。应用层为了保障用户安全性,客户端登录时设计了附加验证机制,利用验证码防止DDoS攻击。

2.1 数据存储

2.1.1 SQL数据库上的数据存储

关系数据库服务器存储三种信息,分为三个表:用于记录用户详细信息的表user,用于记录商品详细信息的表goods以及用于记录交易详细信息的表transporting。表中存储用户以及商品对应智能合约地址,方便交易的检索。

2.1.2 智能合约数据存储

智能合约及其相关的数据存储在区块链上。数据类型分为memory,storage和calldata三种[8],其中需要永久保存的数据被智能合约设置为storage类型,持久化存储到磁盘上的数据库LevelDB中。本系统中,新的合约随着新商品的创建被部署到区块链上,合约商品信息记录如表1所示。good_trade_info记录每一个商品的当前状态,有资格拥有商品所有权的实体包括卖家,买家以及智能合约,当一件商品处于被交易状态的时候,为了保障交易的可靠和公平公正,此时商品应该归智能合约所有,这时智能合约扮演了可信第三方。具体信息如表2所示。

表1 合约商品信息

表2 商品交易信息good_trade

buyer_record_info记录用户购买当前合约商品的一笔订单详细情况,给定用户和商品合约地址后可以跟踪他购买该商品状态信息,buyer_record结构体的详细定义见表3。balanceOf变量记录某用户总共购买的商品量,buy_good_No数组依次记录用户的购买商品编号,if_sign记录每笔订单的签收情况以及buy_good_No中每笔订单商品编号记录的起始位置以及结束位置。

表3 买家信息buyer_record

2.1.3 数据安全保障

存储在数据库的信息(主要是用户密码以及隐私信息)会被加盐处理,通过MD5摘要算法对关键内容加盐hash后存入数据库,以上设计能够防止暴库攻击。MySQL数据库中不保存与用户实际资产相关的信息,即使MySQL中数据被恶意篡改,用户实际资产也不受影响。

2.2 交易

本节介绍系统的交易执行流程,及不同种类交易的具体过程。

2.2.1 系统交易执行流程

用户请求的交易经过web服务器前端发送给web3j,与智能合约的交互通过web3j类库实现,具体执行时序如图2所示。为保障交易有序,以太坊要求一个账户每笔交易有一个连续的计数nonce[9],同一账户交易的提交严格按照nonce顺序执行,避免了双花问题。

图2 系统交互时序图

2.2.2 智能合约功能

为了记录卖家身份,设计商品拥有者的智能合约owned,同时利用modifier验证当前用户,确保后续操作该商品的用户为卖家。每个商品用一个合约表示,通过其部署的地址可以对这个商品进行操作。以下为系统的交易功能:

1)创建商品。部署智能合约时,将智能合约编译为java类。调用构造函数将商品合约部署到以太坊网络上,同时得到合约地址。

2)增加商品。由于具有添加商品功能的用户应该只有创建当前合约的人(即卖家),因此使用modifier来限制调用此功能的消息发起者只能为这个商品合约的owner。

3)购买商品。以太坊的交易执行保障了原子性,若交易执行条件不满足则合约不会执行输出。当系统执行购买操作时,首先确认商品余额足够,之后再进行交易的核心操作。

执行交易的关键操作是智能合约buyer_record结构体状态的改变,如图3所示。一笔新的购买交易产生后,首先good_trade_info中被选中出售的1(或n)个商品的状态会更新,buy_good_No向后追加当前交易商品的id,对应的,if_sign中追加buy_good_No队列的元数据信息,用于索引buy_good_No的交易记录和交易状态,包括当前交易在buy_good_No中起始记录位置(sp),结束记录位置(ep),以及当前订单状态(state)。

图3 buyer_record结构体存储机制

购买商品函数执行后签收状态记为“未签收”,具体算法如下面伪代码所示。

算法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)签收商品。一笔交易记录在合约购买功能执行时产生,if_sign数组追加一组包含三个元素的记录。在执行签收操作前验证签收条件是否满足,验证后将交易k购买的所有商品的拥有者更新为买家,并执行转账。最后将if_sign数组中交易k的交易状态信息更新为已签收。操作完成后,智能合约输出结果,否则合约执行失败并回滚。

5)退款。退款函数程序流程与签收类似,区别在于退款不需要用户支付以太币,不验证支付信息;商品状态重置为初始状态,if_sign数组中交易状态更新为已退款。

2.2.3 交易安全保障

执行交易时,商品合约状态发生改变,利用Ethereum中椭圆曲线ECDSA签名算法[10],保证交易发送方msg.sender不可伪造[11],实现商品交易信息不可抵赖。

执行查询时,通过eth_call调用智能合约,eth_call不改变合约状态,调用者用自己的私钥对查询函数进行签名来实现查询可信性。

在智能合约代码层面,为保障代码执行过程中的安全性,防止数学运算越界溢出,引入SafeMath库,该函数库为uint类型变量运算溢出和下溢提供了检测机制[13],能够加强Solidity在转账运算上的安全性。在执行商品交易操作时,都严格检查先决条件,如限定增加商品的发起人必须是卖家,签收操作发起人必须是买家等,避免智能合约的逻辑漏洞。

2.3 查询优化

用户登陆时,用户表user中以用户名作为主键,采用MySQL的默认innodb引擎,用户数据由用户名作为关键字建立B+树索引。

当执行商品查询时,以商品id为主键建立主索引,为了提高商品的检索速度,对商品的多个属性建立辅助索引,包括商品名(state),卖家(seller_id),价格(price)等。通过商品智能合约地址查询商品信 息 时,首 先 利 用Bloom Filter[12]检 测 该 地 址 在goods表中是否存在,若存在,则通过该地址调用智能合约执行商品查询操作。用户表user中,对用户的账号可以执行同样操作以提升查询效率。

区块链数据查询中,设计商品交易信息存储结构buyer_record,建立元数据与商品信息的映射关系,提高查询效率,详细结构见前述小节2.1.2。

3 实验分析

3.1 环境设置

实验环境为Windows10和CentOS操作系统,硬件配置Intel i5双核CPU 2.50 GHz,Intel E7-4820,8vCPU 2.0GHz。智能合约使用Solidity编写,mist客户端。系统开发工具为MyEclipse,Solidity合约编译环境为solc。Javascript编写应用端测试脚本。

3.2 系统实现

交易详细信息的界面如图4所示,包括产品购买信息,签收状况和退款状况。数据库中存储的具体数据内容如表4所示,字段contract_address为商品对应的合约地址,可以索引到区块链网络中存储的商品。

表4 合约商品信息

图4 用户信息界面

3.3 实验结果

通过以下实验对系统在区块链上的写入和查询效率进行测试和分析,区块链节点环境为Geth,编写Javascript脚本,通过Web3接口调用智能合约方法发起交易及数据查询。Geth节点主要创世参数如下:

实验一 交易处理时间

对区块链上交易执行时间进行测试,图5为用户订单购买和签收不同数量商品的交易处理时间,平均处理时间在3600ms左右,处理每单交易的时间基本不受交易商品数量的影响。结果表明本系统智能合约核心逻辑设计合理,在私有链或联盟链环境下运行具有较高的实用性。

图5 购买和签收交易响应时间

与传统中心化电子商务交易系统相比,本系统交易订单处理效率偏低,主要受限于PoW共识机制,在今后实际应用中需要对区块链共识机制进行优化,在保证交易安全的前提下提高处理效率。

实验二 查询商品交易状态

测试查询区块链上商品交易状态的响应时间。商品总数量为500个,以商品id为参数,通过脚本调用智能合约查询方法,记录查询商品交易状态的响应时间,如图6所示,响应时间与查询的商品数量成正比,符合预期。平均响应时间在110ms左右,效率较高。

图6 查询商品交易状态

实验三 查询订单状态

测试查询订单状态的响应时间。结果显示平均每个订单查询响应时间为95.2ms,最快响应时间为80ms,如图7图表所示,查询速度较快。实验三和实验四的结果表明本系统所设计智能合约存储结构在数据查询上比较高效。区块链底层数据库LevelDB在查询性能上具有一定的局限性,今后优化查询效率可从两方面入手:一种方式为对底层LevelDB数据库进行改造优化,在区块链存储结构内部增加辅助索引;另一种方式为设置外联数据库,将区块链数据同步到外联数据库进行查询优化[14]。

图7 查询订单状态

实验四 多节点交易处理时间

基于多个区块链节点,测试节点数量对并发交易处理时间的影响。在不同节点数量的区块链网络中,分别并发发送100条商品购买交易,等待返回交易结果并记录处理时间。实验结果表明,节点数量对交易处理时间有一定影响,如图8所示,节点数量增加会适当缩短响应时间,说明以太坊在多节点网络环境执行效率较高。但与传统交易系统千万级并发相比,差距较大,当前比较主流的优化方案包括:闪电网络、分片、侧链等。

图8 多节点交易响应时间

4 结语

与传统交易系统比,基于区块链平台存储交易信息,实现了去集权化,由合约保障交易的正常运作。区块链数据只能追加不能修改,避免了传统交易系统存在的数据被篡改的风险。系统的敏感及非重要数据存储在链下数据库中,提供丰富的查询条件,保障用户信息的隐私性。随着以太坊2.0分片技术的提出,以太坊的交易吞吐量将会有很大的提升[15],使其能够承担电子商务系统的庞大交易量。本系统在未来研究中将进一步完善功能,比如需要增加物流信息,提高实用性。网上购物保障商品的发货、签收、退款功能的正常运作,物流方必不可少。

本文基于以太坊平台构建去集权化安全电子商务系统,探索了未来网上交易的新模式,对安全电子商务的发展具有一定的借鉴意义。

猜你喜欢
以太合约区块
基于活跃节点库的以太坊加密流量识别方法
以太万物理论概述
《红楼梦》的数字化述评——兼及区块链的启示
区块链助跑财资管理
一场区块链引发的全民狂欢
以太坊又爆漏洞黑客大战一触即发
区块链助力企业创新