主页 > imtoken下载安装 > 分析区块链上智能合约的生命周期和安全性

分析区块链上智能合约的生命周期和安全性

imtoken下载安装 2023-06-19 05:38:18

以太坊智能合约代码_以太坊智能合约应用_以太坊部署和运行智能合约第五步

早在一些数字资产发布之前,计算机科学家和数学家 Nick Shabo 就首先创造了“智能合约”一词,他将其定义为“一组以数字形式指定的承诺,包括各方之间履行其他承诺的协议”。 ”。这样的合约可以在不使用人工智能的情况下创建和执行。他在 1995 年提出了这个想法,他关于智能合约的文章于 1996 年发表在名为 Extropy 的期刊上。Szabo 基本上从定义“什么是智能合约”开始合同?”并提出使用它们的各种场景。

基于区块链技术的智能合约,不仅可以充分发挥智能合约在成本效率方面的优势,还可以防止恶意行为干扰合约的正常执行。 智能合约以数字形式写入区块链,区块链技术的特性保证了存储、读取、执行的全过程透明、可追溯、不可更改。 同时通过区块链自带的共识算法构建状态机系统,让智能合约高效运行。

智能合约由三个主要部分组成:双方之间的合约安排、履行合约义务时设定的条件管理以及合约的执行。

可以使用智能合约运行的潜在活动包括支付转账、车辆登记、发送警报、开具发票等。 一旦选定的交易完成,区块链数据就会更新。 这样的框架保证了它不能被第三方操纵,只能被交易涉及的各方查看。 基于区块链的数字分类账系统至关重要,因为必须确保交易方的安全和隐私。 单个交易的数据被捆绑并顺序存储在区块链的块中。 消除集中监督有助于提高此类交易的安全性和防篡改性质。

与从发现问题开始到解决问题结束的区块链生命周期不同,区块链上的智能合约经历不同的阶段:

创作阶段

以太坊智能合约代码_以太坊智能合约应用_以太坊部署和运行智能合约第五步

合同谈判和续签是第一阶段的重要内容。 有关各方必须就合同中概述的条款达成一致。 这与我们习惯于进行实体交易的传统合同谈判非常相似,只是以数字方式进行维护。 合约参与者还必须在区块链上有一个钱包,用于起草智能合约。 合同的内容一旦确定,就必须对其进行编纂。 由于每个智能合约的独特性,编码有时很困难。 因此,大多数区块链开发人员提供了一种方法来测试智能合约在创建时的行为以模仿其实际行为。

冻结阶段

区块链上的交易由网络上称为节点的一组计算机进行验证。 这些节点只不过是区块链矿工,他们利用自己的计算能力来确保智能合约的公平治理。 作为对他们服务的回报,这些矿工还会收取少量费用。 该框架确保区块链只有合法的合约以太坊部署和运行智能合约第五步,不会被虚假条目堵塞。 在“冻结”阶段,合约及其参与者在公共分类账上向公众公开。 在此期间,任何形式的资金转移都被阻止,因为节点充当管理机构,验证是否满足合同执行的先决条件。

执行阶段

智能合约的完整性由认证节点验证,合约的干扰引擎(或编译器)执行代码。 当以硬币形式收到一方的输入时(作为要交换的商品的承诺),干扰引擎会创建满足条件触发的交易。 然后将新的交易数据添加到区块链中,并由管理节点再次验证,以确保按照合同约定的条款履行。 这个验证过程由“共识机制”管理,即工作量证明或股权证明。

合同完成

以太坊智能合约应用_以太坊智能合约代码_以太坊部署和运行智能合约第五步

一旦交易数据写入区块链的分布式账本,共识机制将验证甲方转账的资产是否已收到以太坊部署和运行智能合约第五步,并为接收方解冻。 这标志着智能合约的完成,然后关闭并记录。

以太坊部署和运行智能合约第五步_以太坊智能合约应用_以太坊智能合约代码

智能合约安全分析

智能合约的安全性通常可以从代码编写、合约虚拟机、区块链特性三个维度展开。 下面就这三个方面的安全漏洞进行分析。

1. 合约隐私披露

即使在联盟链中,由于区块链交易信息公开,合约代码完全开源,合约从创建、部署到执行的全过程都会广播到所有参与联盟链的节点,从而产生了极大的合同参与者真实身份的不确定性。 它可能会被蓄意的攻击者识破。 一些保密合同的隐私内容有时不便透露。 如果仍然沿用原有的部署和执行方式,合约参与者的重要信息将受到威胁。

以太坊智能合约代码_以太坊部署和运行智能合约第五步_以太坊智能合约应用

2. 合约主体存在漏洞

智能合约的代码编写不同于以往的项目开发。 一旦部署后智能合约出现问题,付出的代价是巨大的,对于各种区块链来说很难简单的解决。 因此,我们在编写合约代码时,需要提高安全思想,做好安全准备。

1.函数重入

当一个智能合约在执行过程中调用另一个合约时,当前执行过程会暂停,等待另一个合约的返回值。 这就导致了一个严重的问题,如果一个程序可以在执行过程中被中断,那么它可以在之前的调用执行完之前安全地再次调用,这就是所谓的可重入计算机程序。 在调用其他外部函数的操作完成之前,被调用的函数很可能会被执行多次,而这样的多次调用可能会造成难以想象的问题。

2.功能可见性

以Solidity为例,在使用Solidity编写合约代码时,一共提供了4个函数可见性修饰符。 如果开发者没有指定,默认是public。 当开发者没有明确指定函数的可见性时,一些关键函数的可见性可能是公开的,从而允许任何外部用户调用该函数,这可能会造成巨大的损失。

以太坊智能合约应用_以太坊智能合约代码_以太坊部署和运行智能合约第五步

3、异常误操作

在以太坊中,允许一个合约通过发送命令或直接调用调用另一个合约中的函数。 但是在调用过程中可能会出现错误,比如gas不足,超过调用栈的限制,调用会被终止,合约会回退到之前的状态。 调用者可能不知道调用过程中发生的异常,这主要取决于调用的方法。 使用此命令调用合约后,您必须检查返回值以验证合约是否正确执行。 据统计,现有约有28%的合约在调用后不检查异常返回值,这在一定程度上会造成很多问题。

3. 虚拟机安全漏洞

合约虚拟机运行在区块链的每个节点上。 虚拟机为合约代码提供沙盒执行环境。 如果合约虚拟机存在漏洞或不完善,很可能被攻击者攻击。 与传统的计算机运行环境相比,虚拟机系统存在更多被攻击的安全风险。 以下是常见的类型:

(1) 逃逸漏洞:虚拟机运行时,一般进程只能在沙盒限制内执行相应代码。 逃逸漏洞是指进程越过虚拟机范围,进入宿主机操作系统。 这种漏洞会让攻击者退出沙箱环境,执行其他无法执行的代码。

(2) 逻辑漏洞:当虚拟机发现数据或代码不符合规范时,可能会对数据进行一些“容错处理”,从而导致一些逻辑问题,最典型的是“以太坊短地址攻击”。

以太坊智能合约应用_以太坊部署和运行智能合约第五步_以太坊智能合约代码

(3)栈溢出漏洞:虚拟机的调用栈有一定的最大深度。 在一些攻击者的恶意调用下,栈深度可能会超过虚拟机允许的最大深度,或者不断占用系统内存导致内存溢出。

(4) 资源滥用漏洞:指攻击者在虚拟机中执行恶意代码,估计会消耗系统的网络资源、存储资源、计算资源和内存资源。 因此,虚拟机系统中必须有一些限制机制,以防止系统资源被滥用。

以太坊智能合约应用_以太坊部署和运行智能合约第五步_以太坊智能合约代码

4. 区块链特性带来的漏洞

1.交易顺序依赖

在区块链中,一个区块包含多笔交易,一笔交易从被广播到确认并包含在一个区块中需要一定的时间。 我们假设当前有一条区块链处于状态 σ,新区块包含两个调用同一个合约的交易(deg: Ti, Tj)。 在这种情况下,用户无法确定执行调用时合约处于什么状态。 当合约在σ[Ti]时执行Tj的调用和在σ[Tj]时执行Ti的调用可能会导致完全不同的结果,这取决于Ti和Tj之间的顺序,并且只挖这个块节点可以确定这些交易的顺序,从而确定调用合约的顺序。 如果攻击者在监听到网络中对应合约的交易后,发送自己的交易改变当前合约状态,则有一定几率将两笔交易包含在同一个区块中,并可能排在另一个区块中. 交易在攻击前完成。 合约的最终状态实际上取决于确认时节点的交易顺序。 我们称此类合同为交易依赖合同或 TOD 合同。

2.时间戳依赖

另一个非常重要的安全问题是,合约有时会使用区块时间戳作为触发器来执行一系列关键操作。 我们称此类合同为时间戳相关合同。 在许多合约游戏中,随机数被用来决定谁赢得头奖。 这些合约使用之前的区块哈希作为随机种子来挑选冠军,而区块选择取决于当前区块的时间戳。 一般来说,节点在确认一个区块时,会为这个区块设置一个时间戳,通常是该节点的本地系统时间。 但是,节点可以在 900s 内随意更改这个时间戳,而其他节点仍然会接受并确认。 当一个节点处理一个新块时,如果新块的时间戳大于前一个块,并且时间戳之间的差异小于900秒,那么新块的时间戳是合法的,因此一些攻击者可以控制通过更改时间戳来输出合约。