您好, 访客   登录/注册

基于区块链的数字资产安全发行及管理技术实现

来源:用户上传      作者:

  摘   要:区块链具有去中心化、全局账本、不可篡改和安全可信等特点,在数字资产发行和管理方面都具有极为独特的优势和特点。文章提出了基于以太坊区块链技术的数字资产发行及管理方法,设计实现了以太坊钱包为核心的关键技术,并基于ERC20实现了数字资产发行及资产管理的智能合约,通过上层应用调用智能合约实现了数字资产转账、分段锁仓及销毁等一系列的关键功能。最后,从账户安全和合约安全两个方面,全面分析了实现账户和智能合约的安全性,分析表明了文章所实现的以太坊数字资产发行及管理系统具有良好的功能和安全性能,能满足数字资产的安全发行和管理技术要求,可为基于以太坊区块链的数字资产发行提供了一个通用应用实现。
  关键词:区块链;以太坊;智能合约;数字资产发行及管理;安全性
  中图分类号:TP311;TP393          文献标识码:A
  Abstract: Blockchain has the characteristics of decentralization, global ledger, non tampering, security and credibility, and has unique advantages and characteristics in the issuance and management of digital assets. This paper puts forward the method of digital asset issuance and management based on Ethereum blockchain technology, designs and realizes the core key technology of Ethereum wallet, and realizes the smart contract of digital asset issuance and asset management based on erc20. Through the upper application, the smart contract is called to realize a series of key functions, such as digital asset transfer, phased locking and destruction. Finally, from two aspects of account security and contract security, comprehensive analysis of the implementation security of accounts and smart contract. The analysis shows that the Ethereum digital asset distribution and management system implemented in this paper has good function and security performance, can meet the technical requirements of digital asset security distribution and management, and can provide a general application implementation for digital asset distribution based on Ethereum blockchain.
  Key words: blockchain; ethereum; smart contract; digital asset issuance and management; security
  1 引言
  隨着科技的进步,互联网让人们的生活和工作变得更加便利、高效,同时数字资产也得到了很大的发展。现有的数字资产交易技术是把数据信息存储在一个中心化数据库中,因此很容易出现安全漏洞。
  数字资产(Digital assets)是指个人或企业拥有或控制,以电子数据的形式存在,在日常活动中持有以备出售或处于生产过程中的非货币性资产。数字资产具有强烈的金融属性,一直以来都备受大众和政府部门的重视和监督[1],数字资产一旦发生漏洞将会造成不可逆转的甚至灾难性的影响。因此营造安全、可靠的数字资产交易环境就显得尤为重要。
  2008年,中本聪(Satoshi Nakamoto)发表了《比特币:一种点对点的电子现金系统》一文[2],从此奠定了区块链技术和加密数字货币发明的基础。区块链技术具有去中心化、不易篡改和验证节点共同维护等特点,为数字资产创造了新的安全模式下的管理方式。随着区块链技术的不断发展,越来越多的人对区块链进行开发和研究,但这同时也暴露了区块链技术存在的弊端。2018损失六十亿的美链漏洞为全世界区块链的安全问题敲响了警钟。因此,采用合理的通用化技术来支撑基于区块链的数字资产有极其重要的意义。
  2 以太坊区块链体系架构
  以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供的去中心化以太坊虚拟机EVM(Ethereum Virtual Machine)来处理点对点合约。
  以太坊的架构可大致分为两层,分别是应用层和基础设施层,如图1所示。
  应用层有DApp(Decentralized Application,分布式应用)和以太坊钱包等多种衍生应用,是目前开发者最为活跃的一层。   基础设施层包含了区块链的基础功能如账户管理、区块链管理、智能合约等。它为访问应用层提供了接口,封装了区块链的操作细节。其中,智能合约运行在以太坊虚拟机EVM中。智能合约系统将合约代码化,由特定的事件驱动触发执行。以太坊系统中有PoW和PoS两种共识算法。HTTP、RPC、Whipser等协议为以太坊提供供系统各模块相互调用的协议支持。
  2.1 以太坊数字签名算法
  以太坊的数字签名算法采用的是椭圆曲线数字签名算法(ECDSA),它是利用椭圆曲线加密技术进行的数字签名方法。假设发送者需要发送消息给接收者,首先需要定义椭圆曲线加密所用的参数,将这组参数表示为()。其中,CURVE表示椭圆曲线点域和几何方程,G是所有点倍积运算的基点,n是该椭圆曲线的可倍积阶数,且。
  2.2 以太坊共识机制
  工作量证明机制PoW(Proof of Work)是以太坊目前的共识机制,PoW是对算力的证明,是产生新区块时必须满足的要求。在以太坊网络中,节点通过计算随机的哈希值来争夺记账权,求得正确解的能力既是节点算力的体现。PoW机制要求每个节点基于自身算力去求解SHA256计算难题,即寻找一个随机数Nonce,使得区块头部元数据的SHA256哈希值小于区块头中设定的目标难度[3]:
  其中,H为SHA256哈希函数;n为随机数Nonce;h为区块头部数据;t为目标难度最先求得正确解的节点即算力最强的节点,即可获得新区块的记账权。
  工作量证明机制的主要特性是计算的不对称性,即工作方需要消耗大量的算力来得到一个结果,而验证方却很容易通过结果来验证其准确性。
  2.3 以太坊智能合约
  20 世纪末,Nick Szabo将智能合约定义为:“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。”[4] 智能合约一旦部署成功便不可再更改。
  智能合约为数字资产提供了一种基础协议,使得所有加入到这个区块链的网络节点都被强制遵守此协议,因此可以有序的执行智能合约的规定从而完成数字资产的确权。
  2.3.1 P2P网络
  以太坊采用全分布式结构化的P2P网络,主要采用了Kademlia(简称Kad)算法实现,Kad是一种分布式哈希表(Distributed Hash Table, DHT)技术。在Kad网络中,各节点通过哈希算法散列为256位ID,任何接入P2P网络的节点都具有唯一的一个节点ID。
  2.3.2 EVM以太坊虚拟机
  EVM本质上是一个堆栈机器,它最直接的功能是執行智能合约。以太坊通过EVM支持智能合约的调用和执行,调用时根据合约地址获取代码,生成具体的执行环境,然后将代码加载到EVM虚拟机中运行。目前,开发智能合约最常用的高级语言为solidity[5],在使用solidity实现智能合约逻辑后,通过编译器编译成元数据,最后发布到以太坊上。
  2.4 以太坊数据结构
  2.4.1 Merkle树
  Merkle树是一种哈希二叉树,它是一种用作快速归纳和校验大规模数据完整性的数据结构。Merkle树的叶子节点代表区块的各个交易,每个叶子节点都有一个哈希值。
  2.4.2 以太坊区块结构
  以太坊的区块由一个包含元数据的区块头(Block Header)和紧跟其后构成区块主体(Block)的一长串交易组成。
  以太坊区块链中每个区块头都包含指向三个树的指针:状态树(Root)、交易(TxHash)、收据树(ReceiptHash)。状态树是系统状态的哈希值。系统状态是跨块存在的,交易数和收据树只存储本区块的交易和收据。以太坊区块头的结构如表1所示,以太坊的区块链的结构如图2所示。
  3 以太坊数字资产发行及管理技术
  3.1 ERC体系结构
  ERC(Ethereum Request for Comment)即以太坊通用征求意见协议。ERC是用来处理以太坊网络成员提出的请求和对请求的采纳,ERC为开发者提供了技术的指导,也对以太坊网络的发展提供了建议。
  开发者可以通过提交EIP(Ethereum Improvement Proposal,以太坊改进建议), 向以太坊社区提交新的ERC标准提案。提交内容包括协议规范和合约标准。
  3.1.1 ERC20
  ERC20旨在为以太坊上的token合约提供一个特征与接口的共同标准,让开发人员可以对新代币在以太坊生态系统中的作用进行编程。ERC20标准[6]如表2所示。
  3.2 账户管理
  以太坊的全局“共享状态”是由多个账户来组成的,这些账户可以通过消息传递架构来与其他账户进行交互。每个账户都有一个与之关联的状态和一个20字节的地址。以太坊的地址是一个160位的标识符,用于识别帐户。
  以太坊有两种类型的账户。
  (1)外部账户:外部账户没有代码,可以通过创建和签名一笔交易,从一个外部账户发送消息。
  (2)合约账户:合约账户不能自行发起新的交易,合约帐户只能触发交易以响应其他的交易。每当合约账户收到一条消息时,合约内部的代码就会被激活,允许它对内部存储进行读取、写入和发送其它消息或者创建合约。
  3.2.1 公钥、私钥及地址
  公钥(Public Key)与私钥(Private Key)是通过算法得到的一个密钥对,公钥是密钥对外公开的部分,任何人都可以获得,私钥则只有用户自己可以拥有,一旦泄露就会存在安全隐患。公钥通常用于加密会话密钥验证数字签名,或者加密只能用于对应的私钥解密的数据。
  私钥是一组64位的16进制字符,通过私钥可以访问一个账户。以太坊的私钥是通   过椭圆曲线算法secp256k1曲线生成的。
  公钥是由私钥通过 secp256k1曲线转化为的65字节非压缩格式。公钥进行Keccak-256哈希运算,取最后的40位16进制字符串,开头添加0x即生成了地址(Address)。
  3.2.2 助记词和Keystore文件
  在创建钱包的过程中会生成一个助记词,助记词一般由12个单词构成,2个单词之间由1个空格隔开,这些单词都来源于一个固定的词库,是由私钥经过一定算法得到的,所以私钥与助记词之间可以相互推导转化。助记词是私钥的另一种形式,其功能等同于私钥。
  Keystore文件是以太坊账户独有的,用于签署交易的以太坊私钥的加密文件,是以太坊账户的一种表现形式。它包含了以太坊账户的地址,账户密文的私钥和MAC地址等一系列的信息。
  3.2.3 钱包的实现
  钱包的本质是一个私钥,它是一个随机
  的哈希值字符串,拥有了私钥就拥有了该钱包的使用权。
  以太坊钱包的实现原理可以简要概括为钱包助记词生成的种子(Seed),种子生成私钥,私钥通过加密算法得到公钥,公钥经过哈希运算得到钱包地址。通过助记词生成钱包,同时显示其地址、私钥以及衍生路径。
  钱包实现的关键代码如表3所示。
  通过私钥或助记词可以恢复钱包,获得钱包地址,实现关键代码如表4所示。3.3 基于ECR20数字资产的安全发行及管理
  本文实现了基于ERC20技术标准的数字资产管理系统,该系统实现了数字资产的发行、数字资产的分配、数字资产的转账及分段锁仓等功能。系统界面如图3所示。
  3.3.1 转账的实现
  在以太坊转账有三个核心步骤。
  (1) 交易创建。用交易发起者的私钥对交易进行签名,广播到网络之后所有节点都可以用交易发起者的公钥进行验证。
  (2)交易验证。对签名进行广播并验证。由网络中的节点进行验证工作。验证通过后交易进入交易池并等待打包。
  (3) 交易记录。矿工打包交易并生成新的区块。矿工打包交易时优先选择矿工费高、占用内存小的交易。当矿工挖矿成功时,会向全网广播该区块,通过网络中其他节点的验证后,该区块加到区块链上,开始下一轮的挖矿。
  转账实现关键代码如表5所示。
  3.3.2 分段锁仓的实现
  数字资产的锁仓是指将代币进行一定期限的锁定,锁定的代币不允许在市场上流通交易,到期时才能解锁买卖。
  分段锁仓是指将资产先预分发给某一账户,但是此时资產是冻结的状态,无法进行交易。合约在一段时间之后逐渐释放资产,可以分阶段完成,例如第一阶段释放40%的资产,第二阶段释放30%,最后释放30%。
  分段锁仓实现关键代码如表6所示。
  锁仓的优点是锁仓降低了代币的流动性,增加了用户的黏性,人为地打破了原有的供需关系,代币数量变少,价格自然上涨,同时锁仓到期还能够得到相应的利息和奖励。
  3.3.3 资产销毁的实现
  资产的销毁是为了满足管理的需求,将账户的总资产进行定量销毁。
  销毁资产实现关键代码如表7所示。
  4 以太坊安全风险分析
  4.1 账户安全风险分析
  在区块链中,拥有了账户的密钥就相当于拥有了账户的使用权,密钥直接关系到账户的安全, 因此密钥也极容易成为攻击者的攻击目标。用户存储和使用不当而导致密钥泄露会给用户带来极大的经济损失。区块链的不可篡改性也使得密钥一旦丢失或被盗,用户将遭受不可逆转的损失。
  在以太坊中有离线存储、本地存储和托管钱包等几种常见的密钥管理方法。其中,离线存储将密钥保存在离线的物理存储介质如u盘中并将之与网络隔离,防止网络攻击。本地存储是将密钥直接或者加密后存储在本地的设备上。托管钱包是通过第三方服务器为用户提供密钥保管服务[7]。
  4.2 智能合约安全风险分析
  4.2.1 短地址攻击
  短地址攻击是针对基于ERC20标准的token 转账时产生的问题。在调用transfer方法时,实际发送交易的是abi编码后的16进制代码,其中每个参数长度是固定的,如果长度不足会自动补0。
  当调用transfer函数进行转账时,交易的输入数据分为三个部分,将三部分整合在一起就是交易数据。
  (1) 4 字节,方法的哈希值(hash):a901237b
  (2)32字节,以太坊地址(address),高位补0:000000000000000000000000acd11956de450986109372cade7d8c02ac5be8a0
  (3) 32字节,转移的代币数量(amount):
  0000000000000000000000000000000000000000000000000000000000000010
  漏洞源于此,如果address的最后是以0结尾的,而攻击者少输入最后的0,amount编码高位补0,导致amount编译值比实际输入值大。从而实现转移超出实际应该transfer的数量的token。
  当调用transfer方法时,传入的参数为:
  0x87a22ca9
  0000000000000000000000008a52c6425de450986109372cade7d8c02ac5be8a0
  0000000000000000000000000000000000000000000000000000000000000002
  若输入时不慎漏掉了以太坊账户地址最后的“a0”,输入参数就变成了:   0x87a22ca9
  0000000000000000000000008a52c6425de450986109372cade7d8c02ac5be800
  00000000000000000000000000000000000000000000000000000000000002
  由于address字段缺失1个字节,EVM会把amount高位的一个字节的0填充到地址部分,这样使得amount左移1个字节,即向左移位8,此时amount就成了512,远大于用户原本输入的转账金额,会造成大量的损失。
  规避地址漏洞的最有效地方法是在ERC20合约中执行输入参数的验证。
  4.2.2 重入攻击(DAO)
  在以太坊中智能合约中进行转账操作,一旦向被攻击者劫持的合约地址发起转账交易,迫使执行攻击合约的回调函数,回调函数中包含回调自身代码,将会导致代码“重新进入”合约。这种合约漏洞被称为“重入漏洞”。
  以太坊中向合约调用send、transfer、call函数时都会调用回调函数,其中send和transfer每次传递给回调的函数只有2300 gas,此gas只能用于日志的记录,因为其他操作都将超过2300 gas。但是call则会把剩余的所有 gas 都传给回调函数,这有可能导致循环调用。
  带有重入漏洞的合约代码如表8所示。
  call.value()函数可以导致合约外部的代码执行。如果是由另一个合约进行访问,这就意味着此合约的回调函数被执行了,将会在余额设置为0之前,再次递归调用withdraw(),从而获得比现有余额更多的资金。
  避免重入攻击有效方法有三种[8]。
  (1)在转账给外部合约时使用transfer或者send函数,并使用require检测结果。
  (2)在转账前对金额进行算术处理。
  (3)引入互斥锁。也就是说要添加一个在代码执行过程中锁定合约的状态变量,阻止重入调用。
  修改后的合约代码如表9所示。
  5 结束语
  以太坊的出现引领了区块链2.0时代的到来,在以太坊蓬勃发展的同时,理清以太坊的基本原理以及其可能存在的安全问题显得尤为重要。本文对以太坊的体系架构、ERC技术标准和以太坊账户等进行了详细的分析。实现了以太坊钱包和基于ERC20标准的数字资产的转账、分段锁仓和销毁。
  最后从以太坊账户安全和智能合约安全两个方面分析了以太坊的安全风险问题,有利于规避漏洞,营造更安全的以太坊开发环境。分析表明了本文所实现的以太坊数字资产发行及管理系统具有良好的功能和安全性能,能满足同质数字资产的安全发行和管理技术要求,可为基于以太坊区块链的数字资产发行提供了一个通用应用的实现。
  参考文献
  [1] 刘宗媛.中国区块链政策环境回顾、分析与展望[J].网络空间安全,2019,10(04):111-117.
  [2] NAKAMOTO S. Bitcoin: a peer to-peer electronic cash system[EB/OL]. https: //bitcoin.org /en/bitcoin-paper.
  [3] 邵奇峰,金澈清,张召,钱卫宁,周傲英.区块链技术:架构及进展[J].计算机学报,2018,41(05):969-988.
  [4] SZABO N. Formalizing and securing relationships on public networks[EB/OL]. https://ojphi.org/ojs/index. php/fm/article/view/548.
  [5] Solidity — Solidity 0.5.12 documentation[EB/OL]. https://solidity.readthedocs.io/en/v0.5.12/
  [6] ERC-20 Token Standard | Ethereum Improvement Proposals[EB/OL].https://eips.ethereum.org/EIPS/eip-20.
  [7] 韩璇,袁勇,王飞跃. 区块链安全问题:研究现状与展望[J]. 自动化学报, 2019, 45(1): 206?225.
  [8] MANNING A. Solidity security: comprehensive list of known attackvectors and common anti-patterns [EB/OL]. https://blog.sigmaprime.io/soliditysecurity.h tml.
  作者簡介:
  孟嘉霖(1998-),女,汉族,山东潍坊人,北京邮电大学,硕士;主要研究方向和关注领域:区块链及安全技术。
  马兆丰(1974-),男,汉族,甘肃镇原人,北京邮电大学区块链及安全技术联合实验室,主任,北京邮电大学,研究生导师,博士;主要研究方向和关注领域:区块链核心理论与技术研究、区块链BaaS平台关键技术研究与实现。
  王自亮(1978-),男,汉族,山东济南人,北京邮电大学,硕士,中国移动通信集团山东有限公司,高级工程师;主要研究方向和关注领域:数据安全、网络安全攻防。
  王真(1989-),男,汉族,河南舞阳人,北京邮电大学,博士;主要研究方向和关注领域:区块链技术研究及应用。
  高宏民(1987-),男,汉族,河北石家庄人,北京邮电大学,博士;主要研究方向和关注领域:区块链技术研究及应用。
转载注明来源:https://www.xzbu.com/1/view-15126618.htm