当前位置:论文写作 > 参考文献 > 文章内容

区块链和智能合约论文怎么写 区块链和智能合约论文范文检索8000字有关写作资料

主题:区块链和智能合约 下载地址:论文doc下载 原创作者:原创作者未知 评分:9.0分 更新时间: 2024-02-11

区块链和智能合约论文范文

《基于区块链的智能合约安全性分析》

本文是区块链和智能合约有关毕业论文怎么写与性有关专升本毕业论文范文.

摘 要:随着区块链技术应用范围越来越广泛,也面临着诸多方面的安全威胁,智能合约引发的安全问题已经成为区块链安全性的主要问题.本文通过对智能合约安全性分析,提出相应的解决方案;通过合约安全审计方法、合约安全监测工具等措施对智能合约进行安全管理,保障信息系统安全.

关键词:区块链;智能合约;隐私保护;安全漏洞;安全审计

中图分类号: TP309

0 引言

智能合约是部署在区块链上的代码,利用协议和用户接口完成合约过程.在智能合约层,通过在智能合约上添加能够与用户交互的前台界面,并能与其它外部IT系统进行数据交互和处理,形成去中心化的应用(DAPP),实现各种行业应用.智能合约具有事件驱动、自动执行及价值转移等特点,通过智能合约处理各种事务,减少了人为干预的风险,能够在任何时刻响应用户需求,这样能够大大提升效率,节约时间和成本.由于智能合约整体处于初期阶段,需要重视其安全性、扩展性、以及与现实世界的法律体系的对接等问题,尤其是安全性问题得不到有效解决,将会严重阻碍价值互联网的推进步伐.

1 技术原理

1.1 智能合约的执行环境

目前以太坊和超级账本的智能合约技术相对更为成熟,在以太坊中合约代码在虚拟机中执行,超级账本中合约代码在容器中执行.虚拟机和容器都创造了一个封闭的沙箱环境,在封闭隔离的情况下执行合约代码.

以太坊虚拟机是一种图灵完备的,基于栈的后进先出特性设计的虚拟机,它可以将智能合约代码编译成可以在以太坊上执行的机器代码,并为智能合约提供一个完全封闭的运行环境,在以太坊中每个节点都创建了一个EVM虚拟机,当出现调用合约交易时,所有节点都会执行一遍合约并对结果进行共识.

超级账本采用了容器(docker)作为智能合约的执行环境,和虚拟机相比容器没有采用虚拟化技术,而是直接运行在底层操作系统上之上,因此在容器中合约的执行效率很高.但相较于虚拟机而言,容器的启动和执行过于消耗资源,这也成为了制约超级账本性能的关键因素.

1.2 智能合约的运行机制

在一个智能合约内一般包含合约值和合约状态两个属性, 在智能合约代码中写明了合约的应用场景和触发规则, 一旦外部输入数据符合触发条件,可以就会开始执行并返回相应的结果.如下图1所示,由于区块链种类及运行机制的差异,不同平台上智能合约的运行机制也有所不同.智能合约的生命周期可以简单的分为开发、部署、执行三个阶段.

(1)开发阶段:合约开发阶段,主要是由多方协商,根据现实世界的合同规则编写相应的程序代码,编写过程中需要开发者熟悉合约代码的编写思维,尽可能简洁以防止代码出错.

(2)部署阶段:合约开发完成后,发起方用户对合约签名并发起一条交易,交易经过网络广播和节点验证后,跟这一时间戳内的其他交易一同保存在当前区块中,合约部署成功后将返回合约地址和相关接口信息,用户可以通过合约地址和接口信息对部署成功的合约进行调用.

(3)执行阶段:调用合约需要用户通过合约地址和接口信息发起交易,区块链内的其他节点为了获得系统预设的奖励会帮助新区块的产生.节点收到调用合约的相关交易后将在一个本地沙箱环境中执行合约(如以太坊虚拟机EVM),執行过程中,合约代码根据外部输入数据和合约状态信息判断当前合约状态是否满足合约触发条件以执行合约内的操作,符合条件的更新操作,在经过共识算法的验证后会进入区块链新的区块中.

2 智能合约安全性分析

智能合约的安全性通常可以从代码编写、合约虚拟机和区块链特性这三个维度展开,以下分别对这三个方面的安全性漏洞进行了分析,针对其中可能出现的问题也提出了相应的解决方案.

2.1 合约隐私泄露

即使在联盟链中,由于区块链交易信息公开,合约代码完全开源,合约从创建、部署到执行的整个过程都会被广播到参与联盟链的全部节点,导致合约参与者的真实身份有很大可能会被有意的攻击方识破.一些机密合约的隐私内容,有时不便公开,如果依然采用原先的部署、执行方式,将导致合约参与者的重要信息受到威胁.

解决方案:

(1) 采用盲签名.盲签名技术即签名者在不知道所签文件内容的情况下进行签署,而发送者却可以从签名者对盲化后的文件签名中提取出有效签名,这体现了盲签名技术所具有的盲性和不可伪造性的特点.

(2)采用环签名.环签名是一种简化的类群签名,它是指环中的成员用他自己的私钥和其他环成员的公钥进行签名,这一过程并不需要征得其他成员的同意,签名的验证者可以知道签名来自这个环,但无法定位准确的环成员,这也是一种对合约参与者身份安全的保护方式.

(3)采用同态加密.同态加密是一种特殊的加密方法,对密文进行数据处理得到的结果跟对明文进行数据处理再加密的结果相同,即同态性.在区块链上应用同态加密技术可以对公开的数据进行加密,再进行数据处理,这种方式可以在保证区块链信息公开的情况下保证信息安全.

(4)采用零知识证明(ZKPs). 零知识证明是指证明者在不向验证者提供任何有用信息的情况下证明某个事件是真实的,即可以在不泄露数据本身情况下证明某些数据运算.在区块链中使用零知识证明技术可以在不泄露交易数据的情况下证明交易已经正确完成.

2.2 合约主体漏洞

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

2.2.1函数可重入性

智能合约执行过程中当一个合约调用另一个合约时,当前的执行过程会暂停等待另一个合约的返回值.这会导致一个很严重的问题,如果程序可以在执行过程中被中断,则可以在其先前的调用完成执行之前安全地再次调用,这被称为可重入计算机程序.在调用其他外部函数的操作完成前,这个被调用的函数很有可能会被多次执行,这种多次调用可能会造成难以想象的问题.

解决方案:

避免外部调用:调用外部合约的函数,造成等待返回结果这种情况,很容易引发重入问题,外部合约中还可能会有其他恶意代码、安全威胁,在编写合约代码时应该尽量少的调用外部合约.

处理外部调用错误:在调用外部合约时,需要注意调用函数的返回值,当出现异常或返回错误结果时一定要针对返回的错误结果进行及时处理.

合约状态检查:有效防止函数重入的另一种方法是在合约代码需要进行外部调用之前更新状态并在合约中检查,以确保当前状态代表接下来会执行的事务.

2.2.2 函数可见性

以Solidity为例,在使用Solidity编写合约代码时,共提供了4种函数可见性修饰符,在开发者没有指明的情况下,默认为public.当开发者没有明确指明函数可见性时,可能导致部分关键函数的可见性为公开的,这使得任何外部用户都可以调用这一函数,可能会造成巨大损失.

解决方案:在编写合约代码时,明确指明函数可见性,以免造成意想不到的损失.

2.2.3 误操作异常

在以太坊中,允许一个合约通过send指令或者直接调用的方式去调用另一个合约内的函数.然而在调用过程中可能会出现错误,例如gas不足、超出调用栈限制,调用就会终止,合约就会回退到之前的状态.调用者很可能并未获知调用过程中出现的异常,这主要取决于调用的方式.使用这条指令调用合约后,必须检查返回值验证合约是否正确执行.根据数据统计,现有合约中约28%的合约在调用后不会检查异常返回值,这在一定程度上会造成许多问题.

解决方案:

避免使用不检查异常和错误返回值的调用方式,针对可能出现的错误情况,做好错误处理和返回值检查.

2.3 虚拟机安全漏洞

合约虚拟机运行在区块链的各个节点之上,虚拟机为合约代码提供了一个沙箱式的执行环境,如果合约虚拟机存在漏洞或不完善的地方,则很由可能会受到攻击者的攻击,虚拟机系统相比较于传统的计算机运行环境具有更多的攻击安全隐患,以下列出常见的几种:

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

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

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

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

解决方案:

1、为虚拟机设置安全域和安全域之间的访问规则,如果虚拟机有添加或删除等破坏规则的操作时则删除该虚拟机所属的网络.

2、为区块链虚拟机,设计一种安全监测机制,这项机制可以做到对资源的收集、分析和监测,根据实时获取到的虚拟机信息对有异常情况的虚拟机进行处理.

3、采用基于大数据与机器学习的虚拟机安全防护方法,从虚拟机的中提取文件,接着识别普通文件中的恶意特征,将识别的恶意特征与恶意文件特征库中的特征进行比对,判断该文件是否为恶意文件,若为恶意文件则进行清理.

4、采用于KVM虚拟机系统的安全防护方法,可以周期性地获取虚拟机系统的中断描述符表、系统调用表和系统调用数据,将获取到的虚拟机系统中的数据与备份的相应数据进行比较,当发现异常时用备份的数据对虚拟机系统中状态异常的内核对象进行恢复.

2.4 区块链特性导致的漏洞

2.4.1交易顺序依赖

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

解决方案:

针对交易顺序依赖,开发者对于交易的奖励机制要进行合理的设置,以防止通过调整奖励金额来改变交易决定顺序的情况出现,对于一些关键事务的交易频率要做限制,防止短时间内大量交易出现.

2.4.2 时间戳依赖

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

解决方案:

时间戳依赖的问题相对来说较难解决,只要在智能合约中使用了随机数,就很难保证节点在区块验证过程中不,因为智能合约中的随机数通常情况下只能根据节点的本地时间计算, 而本地时间又是可以被恶意伪造的,因此这种方法并不安全.通常的解决方案是使用链外的安全可信的第三方提供的服务来获取随机数.

3 智能合约安全管理

3.1 合约安全审计方法

智能合约的安全审计就是指将合约部署到区块链上之前对合约代码进行全面审查的过程,安全审计可以很大程度上减少合约代码中存在漏洞和问题,避免合约部署后出现可能会出现的损失.

目前智能合约的安全审计分为人工审计和自动化审计,随着智能合约的发展人工审计的方法已经基本被自动化审计所取代,目前市面上有三种主流的自动化审计方法.

1、特征代码匹配,智能合约的特征代码匹配与传统的特征代码匹配类似,都是对常见的一些会导致问题出现的代码进行提取、抽象,然后形成固定的匹配模块对待检测源码进行检测.这种检测方法优速度快、迅速响应新漏洞,缺点则是使用范围有限、漏报率高.

2、基于形式化验证的自动化审计方法,这种方法采用 F-framework 和 K framework,将 EVM 转化为一个 Formal model.其中Formal 是航空航天领域常见的一种形式化验证框架, K framework 则是一个语义的转化框架.

3、基于符号执行和符号抽象自动化审计.这也是目前最常用的方法,这种方法是指分析智能合约时,首先通过编译源码,可以形成 EVM OPCODE,然后输入到自动化分析引擎转化成 CFG,再利用这两种方法进行分析.比较典型的是 Detente 和 Secured 系统,这种方法可以降低误报率和漏报率,但是也存在繁琐和耗时的缺点.

自动化的审计方法可以很大程度上减少代码问题造成的安全漏洞,但是目前现存的集中分析方法仍然存在流程繁琐和耗时的问题.

3.2 合约安全监测工具

目前市面上已经有许多针对智能合约安全监测方面的工具出现,以下对较为常见的监测工具做了简要的介绍:

Mythril是一个针对以太坊智能合约的安全分析工具,Mythril可以检测出包括整数溢出等一系列的常见安全问题,但Mythril针对合约内的业务逻辑却无能为力.

Oyente提供了一系列针对EVM漏洞检测的启发式引擎驱动,它不仅可以准确地找出代码中的安全隐患,还能保证较低的误报率.Oyente是一种符号执行工具,可以直接运行在以太坊虚拟机(EVM)字节代码上.

Manticore是一种符号化的执行引擎, 包括EVM在内的多种模式, 支持具体程序方案、符号化执行驱动和断言检测等.

REMIX是一种基于浏览器的智能合约编写和漏洞修补的IDE JaScript应用, 内嵌的静态分析工具可以针对已知的预定义漏洞进行检测.

F*是一种用于程序验证的通用函数式编程工具,支持验证工具的自动执行和基于依赖类型证明的表达, 可以对实际智能合约的语义正确性和运行过程的安全性进行验证.但是, 现有的形式化验证和程序分析工具多是针对已知漏洞的检测和验证.未来的研究将更加关注现有的智能合约的反模式, 构造动态检测的程序分析工具.

4 总结

本文对区块链智能合约的安全性做了一定分析,针对合约代码编写过程中可能会出现的一些问题和漏洞,提出了一些改进建议.针对本文的建议和方案,已经在供应链金融、金融交易等项目中应用,使用智能合约实现存证与查证、数据安全共享与交换、风险控制等执行并写入区块链,为更多的区块链项目中智能合约的安全使用提供参考.

参考文献

[1] Lou L, Ch D H, Frolicked H, ET AL. Making Smart Contracts Smarter[C]// A cm Issac Conference on Computer & Communications Security. 2016.

[2] Mossback A, Miller A, Chi E, ET AL. Hawk: The Block chain Model of Cryptography

and Privacy-Preserving Smart Contracts[C]// Security & Privacy. 2016.

[3] 胡凯, 白晓敏, 高灵超,等. 智能合约的形式化验证方法[J]. 信息安全研究, 2016, 2(12):1080-1089.

[4] 朱岩, 甘国华, 邓迪, 姬菲菲, 陈爱平 -区块链关键技术中的安全性研究[J].信息安全研究, 2016

[5] 贺海武,延安,陈泽华. 基于区块链的智能合约技术与应用综述[J]. 计算机研究与发展, 2018, 55(11):2452-2466.

[6] 杨茜,黄晓芳. 一个基于盲签名技术的智能合约模型[J]. 西南科技大学学报, 2018, v.33;No.130(02):99-103.

[7] 杨茜. 基于区块链的智能合约研究与实现[D]. 西南科技大学, 2018.

[8] 马春光, 安婧, 毕伟, et al. 区块链中的智能合约[J]. 信息网络安全, 2018, 215(11):13-22.

[9] 毕晓冰, 马兆丰, 徐明昆. 区块链智能合约安全开发技术研究与实现[J]. 信息安全与通信保密, 2018(12):63-73.

[10] 孙炜. 浅谈区块链虚拟机[J]. 信息通信技术与政策, 2018, No.289(07):41-43.

[11] 馬昂, 潘晓, 吴雷, et al. 区块链技术基础及应用研究综述[J]. 信息安全研究, 2017, 3(11).

[12] 邢少敏, 冯维, 王泉景. 基于区块链技术的涉密电子文档保护方案研究[J]. 信息安全研究, 2017(10):22-30.

[13] 邵义勇. 两种特殊性质的签名方案研究[D]. 华东师范大学, 2008.

[14] 黄洁华. 众筹区块链上的智能合约设计[J]. 信息安全研究, 2017, 3(3):211-219.

概括总结:上述文章是一篇关于对写作性论文范文与课题研究的大学硕士、区块链和智能合约本科毕业论文区块链和智能合约论文开题报告范文和相关文献综述及职称论文参考文献资料有帮助.

区块链和智能合约引用文献:

[1] 区块链和智能合约论文怎么写 区块链和智能合约论文范文检索8000字
[2] 蚂蚁金服的区块链野望论文范文 蚂蚁金服的区块链野望方面有关本科论文怎么写2万字
[3] 冲浪区块链论文范文 关于冲浪区块链类专升本毕业论文范文3000字
《区块链和智能合约论文怎么写 区块链和智能合约论文范文检索8000字》word下载【免费】
区块链和智能合约相关论文范文资料