weblogic节点状态admin_设计安全的以太网智能合约:基于有限状态机的方法

898f39f29b15c668d667f37f75d77102.png

12.1引用

Mavridou, Anastasia & Laszka, Aron. (2018). Designing Secure Ethereum Smart Contracts: A Finite State Machine Based Approach.

12.2摘要

基于区块链的分布式计算平台的使用正在快速增长。其中一些平台,例如以太坊,为实施智能合约提供了支持,这些合约在包括金融和物联网在内的广泛领域中具有新颖的应用。但是,在实践中部署的大量智能合约会受到安全漏洞的影响,这些漏洞使恶意用户能够从合约中窃取资产或造成损害。漏洞是一个严重的问题,因为合约可以处理具有相当价值的金融资产,合约漏洞在设计上是不可修复的。为了帮助开发人员创建更安全的智能合约,我们引入了FSolidM,这是一个植根于严格语义的框架,用于将合约设计为有限状态机(FSM)。我们提供了一个在易于使用的图形界面上创建FSM并自动生成以太坊合约的工具。此外,我们引入了一组设计模式,我们将其作为插件实现,开发人员可以轻松地将其添加到合约中以增强安全性和功能。

12.3智能合约与有限状态机

让我们考虑匿名拍卖的场景,其中投标人不会发送实际出价,而只是发送它的哈希版本。投标人还需要存款 - 这不需要等于投标人的实际投标 - 以防止投标人在赢得拍卖后不汇款。如果存款的价值高于或等于实际出价,则该存款被视为有效。我们认为匿名拍卖有四个主要状态:

  1. AcceptingBlindedBids(接受匿名投标),合约接受匿名投标和存款;
  2. RevealingBids(显示投标价格),其中投标人显示他们的出价,即他们发送他们的实际出价和合约检查散列值是否与显示投标价格状态期间提供的散列值相同,以及是否提供了足够的存款;
  3. Finished(完成后,最高出价赢得拍卖)。除了获胜者之外,投标人可以提取存款,而获胜者只能提取存款和出价之间的差异;
  4. Cancelled(取消),投标人可以撤回投标并撤回存款。

我们的方法依赖于以下研究。智能合约具有状态(例如,AcceptingBlindedBids,RevealingBids)。此外,合约提供允许其他实体(例如,合约或用户)调用动作并改变智能合约状态的功能。因此,智能合约可以由FSM表示。FSM具有一组有限状态和这些状态之间的有限过渡集。如果相关条件(称为过渡保护)满足,则转换迫使合约采取一系列行动。由于此类状态和转换对于开发人员具有直观意义,因此将合约表示为FSM可提供足够 的抽象级别来推理其行为。

图12-1以FSM的形式呈现了匿名拍卖示例。为简单起见,我们分别将ABB,RB,F和C作为AcceptingBlindedBids,RevealingBids,Finished和Cancelled的缩写。ABB是FSM的初始状态。每个转换(例如,出价,显示,取消)与用户在匿名拍卖期间可以执行的一组动作相关联。例如,投标人可以在ABB状态执行投标过渡以发送匿名投标和存款价值。类似地,如果相关联的状态现在> = creationTime + 5天评估为真,则用户可以执行关闭转换,其指示投标周期的结束。为了从状态中确定转换名称,我们对后者使用方括号。投标人可以通过执行显示转换来显示他的出价。完成转换表示拍卖完成,而cancelABB和cancelRB转换表示拍卖取消。最后,投标人可以执行未付和撤销过渡以撤回其存款。为了便于展示,我们从图1中省略了与每个转换相对应的操作。例如,在执行撤销转换期间,执行以下操作amount = pendingReturns [msg.sender]。

1b054be277a4e91bd9f40840de7d4caa.png

图12-1 匿名拍卖的FSM

要使用我们的框架自动生成合约,开发人员可以以图形形式提供相应的FSM。FSM的每个转换都实现为Solidity函数,其中G的元素和F的语句列表构成正文。输入I和输出C变量分别对应于这些函数的参数和返回值。

首先,让我们列出开发人员必须提供的输入:

- name:FSM的名称;

- S:一组状态;

- s0∈S:初始状态;

- C:合约变量集;

- 对于每个合约变量c∈C,access(c)∈{public,private}:变量的可见性;

- →:转换集;

- 对于每个过渡t∈→:

•tname:过渡的名称;

•tguards∈G:过渡的保护条件;

•tinput⊆I:转换的输入变量(即参数);

•tstatement∈F:过渡陈述;

•toutput⊆O:转换的输出(即返回值);

•tfrom∈S:先前的状态;

•tto∈S:下一个状态;

•tlabel⊆{paid,admin,event}:开发人员指定的一组过渡属性;

- Tcustom:由开发人员以结构形式定义的一组复杂类型。对于任何变量v∈C∪I∪O,我们让type(v)∈T表示变量的域,其中T表示所有内置Solidity类型和开发者定义的结构类型的集合。

12.4 安全扩展与模式

在FSM模型和FSM到Solidity转换的基础上,我们接下来提供了扩展和模式,以增强合约的安全性和功能。这些扩展和模式作为插件实现,插件附加到Plugins和TransitionPlugins元素。开发人员可以使用我们的工具轻松地将插件添加到合约(或其某些转换),而无需手动编写代码。

为了防止重入漏洞,我们提供了一个用于锁定智能合约的安全插件。锁定功能以“万无一失”的方式消除了重入漏洞:合约中的函数不能以任何方式相互嵌套。

我们提供了一个插件,可以通过对函数执行执行严格的排序来防止不可预测的状态漏洞。插件期望每个函数中的转换数作为参数(即,作为转换输入变量)并且确保对于每个函数执行该数字递增。因此,当用户按顺序调用具有下一个转换号的函数时,他可以确定在发生任何其他状态更改(或者不执行该函数)之前执行该函数。

我们将定时转换实现为适用于每个功能的修改器。当调用转换时,修改器检查在执行调用转换之前是否必须执行任何定时转换。如果是这样,则修改器在调用的转换之前执行定时转换。

在许多合约中,需要控制和限制对某些转换(即功能)的访问。例如,任何用户都可以通过提交出价参与典型的匿名拍卖,但只有创作者才能取消拍卖。为了便于实施这些约束,我们提供了一个插件,1)在运行时管理管理员列表(由他们的地址识别)和2)使开发人员能够禁止非管理员访问某些功能。此插件仅为一个特权组实现管理功能(addAdmin,removeAdmin),但可以轻松扩展以支持更细粒度的访问控制。

12.5 FSolidM工具

我们提出了FSolidM工具,它构建于WebGME之上,这是一个基于Web的协作版本化模型编辑框架。FSolidM可在智能合约开发期间实现多个用户之间的协作。FSolidM中的更改已提交并进行版本控制,从而可以分支,合并和查看合约历史记录。FSolidM是开源工具,可在线获取。

要使用FSolidM,开发人员必须提供一些输入(参见第3节)。为此,开发人员可以使用FSolidM的图形编辑器来指定合约的状态,转换,保护等。智能合约代码生成器的完整输入可以完全通过FSolidM图形编辑器定义。为了方便开发人员,我们还实现了Solidity代码编辑器,因为部分输入(例如变量定义和函数语句)可能更容易直接在代码编辑器中编写。图2显示了该工具的两个编辑器。我们已经集成了Solidity解析器13来检查开发人员输入的Solidity代码的语法。

1257e19bdf7d82f86ce93ab701eb2114.png

图12-2 FSolidM的界面和代码编辑器

FSolidM代码编辑器不能用于完全指定所需的输入。请注意,在图12-2中,代码编辑器中显示的部分代码比其他部分(第12-15行)更暗(第1-10行)。较暗的代码行包括从图形编辑器中定义的FSM模型生成的代码,这些代码被锁定 - 不能在代码编辑器中更改。非深色部分表示在代码编辑器中直接指定的代码。

FSolidM提供了检查FSM是否正确指定的机制(例如,是否存在初始状态)。FSolidM通知开发者发现的错误并提供到模型的错误节点(例如,转换或保护)的链接。此外,FSolidM提供了FSM到Solidity代码生成器和机制,可以轻松集成第4节中介绍的插件。

插件不仅增强了安全性,还增加了转换的计算成本。由于用户必须为在公共以太坊平台上执行的计算支付相对较高的价格,因此插件的计算成本是一个关键问题。在这里,我们测量和比较我们的匿名拍卖合约中的转换计算成本,没有锁定和转换计数器插件。我们专注于这些安全功能插件,因为它们引入了开销,而设计模式插件引入了有用的功能。

对于此实验,我们使用Solidity编译器版本0.4.17并启用了优化。在所有情况下,我们将转换的计算成本量化为调用实现转换的函数的以太坊事务的 gas成本。部署我们的智能合约的成本是504,672 gas(没有任何插件),577,514 gas(带locking插件),562,800 gas(带counter插件),637,518 gas(带两个插件)。

图12-3(和附录D中的表2)显示了两个插件的所有四种组合的每次转换的 gas成本。我们做了两个关键的观察。首先,对于两个插件以及它们的组合,计算开销几乎是恒定的。例如,锁定引入的计算开销在10,668和10,686之间变化。对于最简单的过渡,未经批准,这构成计算成本增加54%,而对于最复杂的过渡,显示增加为16%。其次,两个插件的计算开销是相加的。启用锁定,转换计数器和两者的计算成本的增加分别是大约10,672个 gas,5,648个 gas和16,319个 gas。

bf7520e59143efca7b54de56cab108f5.png

图3 交易的gas消耗(在使用不同插件的情况下)

12.6本文主要贡献

具有智能合约功能的分布式计算平台被设想在未来具有显着的技术和经济影响。但是,如果我们要避免同样重要的安全事故风险,我们必须确保智能合约的安全。虽然以前的研究重点是识别现有合约中的漏洞,但我们通过提出和实施创建安全智能合约的新框架来探索不同的途径。我们引入了基于FSM的正式智能合约模型。基于此模型,我们实现了一个图形编辑器,用于将合约设计为FSM和自动代码生成器。我们还提供了一组开发人员可以添加到他们的合约中的插件。其中两个插件(锁定和转换计数器)实现了防止常见漏洞(即,重入和不可预测状态)的安全功能。另外两个插件,即自动定时转换和访问控制,实现了通用的设计模式,以便于开发具有复杂功能的正确合约。

我们计划在多个方向扩展我们的框架。首先,我们将介绍一些插件,实现各种安全功能和设计模式。我们将为中确定的所有漏洞类型提供安全插件,可以在Solidity代码级别上解决。我们还将提供实现中调查的最流行设计模式的插件。

其次,我们将验证工具和设计正确技术整合到我们的框架中。这将使开发人员能够轻松验证其合约的安全性和安全性。例如,开发人员将能够验证恶意用户是否可以使合约进入死锁状态。回想一下,死锁是一个严重的问题,因为它可能无法恢复僵局合约的功能或资产。

第三,我们将使开发人员能够将多个交互合约建模和验证为一组交互式FSM。通过一起验证多个合约,开发人员将能够识别更广泛的问题。例如,即使单个合约无死锁,一组交互合约也可能陷入死锁。

本文由南京大学软件学院2018硕士王新宇翻译转述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值