一种高度自动化的智能合约形式化验证系统及方法与流程

文档序号:16249944发布日期:2018-12-11 23:55阅读:522来源:国知局
一种高度自动化的智能合约形式化验证系统及方法与流程

本发明涉及区块链智能合约安全领域和形式化验证方法,具体涉及一种高度自动化的智能合约形式化验证系统及方法。

背景技术

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。使用去中心化共识机制去维护一个完整的、分布式的、不可篡改的账本数据库的技术,它能够让区块链中的参与者在无需建立信任关系的前提下实现一个统一的账本系统。一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。在区块链技术背景下,智能合约是指运行在区块链上,能够执行某些功能的程序代码。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可追踪、不可篡改。同时,由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行。

由于区块链不可篡改特性,一旦因为程序自身设计的问题,导致智能合约的安全漏洞,或将产生不可逆转的重大损失。形式化验证方法是使用数学的公式、定理和系统来验证一个系统的功能正确性和安全属性,与传统检测方法相比,形式化验证方法可以发现目标与系统描述的不一致性问题,因此使用形式化验证方法来验证智能合约,可以有效的检验智能合约的安全性,检测合约是否存在漏洞。但是常见的形式化验证方法存在着下列问题:

1、对程序员要求极高。不仅要求程序员对所验证代码的编程语言熟悉,还要求程序员具有较高的数学基础。

2、现有技术主要依赖于手工验证,工作量大,自动化程度低,因此时间成本太高,建立的模型的正确性无法保障,需求一旦变化,前面的工作都要重新开始,且模型的正确性依赖于程序员的建模经验和技术程度。

3、阅读性差,不利于程序员之间对接工作。常见形式化验证方法所建立的模型没有统一规范,仅与程序员习惯及素质有关,不方便代码对接。

4、目前常见的验证方法,大都是验证合理输入得到合理结果,对于不合理输入的结果往往忽略,这种做法存在很大的安全隐患。如果不合理输入仍能得到符合函数功能规范的结果,说明该智能合约代码存在漏洞。



技术实现要素:

本发明为了解决上述技术问题,目的在于提供一种高度自动化的智能合约形式化验证系统及方法,这种方法建立形式化验证规则模型库,并对智能合约源代码和字节码进行自动化建模,再由程序员针对不同模型和形式化验证规则模型库以及智能合约功能需求描述文档,分别描述定理并证明。通过将自动化建模和人工验证相结合,能够减少时间成本,缩短验证周期,提高效率,同时自动化建模能够统一模型规范,减少验证模型对程序员个人素质的依赖程度,保证正确性。

本发明通过下述技术方案实现:

一种高度自动化的智能合约形式化验证系统,包括形式化验证规则模型库、智能合约编译器、自然语言解释器、自动化建模工具、语法树解析器、定理生成器、定理证明器、智能合约漏洞检测文档生成器,其中,

形式化验证规则模型库用于支持自动化建模工具、定理生成器的工作;形式化验证规则模型库包括区块链平台模型库和智能合约安全属性模型库;

智能合约安全属性模型库是通过对智能合约常见安全漏洞形式化描述建立的安全属性库;

区块链平台模型库包括智能合约语言文法规则库、形式化语言文法规则库、虚拟机指令系统规则库、字节码形式化模型规则库;

其中,智能合约语言文法规则库用于存储不同编程语言的文法规则;形式化语言文法规则库用于存储对不同智能合约语言文法规则的形式化描述;虚拟机指令系统规则库用于存储区块链平台虚拟机中的各种指令码;字节码形式化模型规则库用于存储对区块链平台虚拟机中的操作码的形式化描述。

所述智能合约编译器用于接收区块链智能合约源代码,将区块链智能合约源代码编译得到源码和字节码,再将得到的源码和字节码输出至自动化建模工具进行建模;智能合约编译器采用现有技术,能自动根据智能合约语言选择对应编译器;

所述自然语言解释器用于接收智能合约功能需求描述文档,将智能合约功能需求描述文档转化为使用非自然语言描述的智能合约功能需求规范文档,并将智能合约功能需求规范文档传输至定理生成器;智能合约功能需求描述文档是由用户编写的所需要验证智能合约的功能需求描述,是自然语言;智能合约功能需求描述文档是由智能合约功能需求描述文档采用非自然语言进行描述后转换形成的所需要验证智能合约的功能需求描述,属于非自然语言。非自然语言的优点在于能简便的进行形式化描述。

所述自动化建模工具用于接收智能合约编译器输出的源码和字节码,并依赖于形式化验证规则模型库对源码和字节码进行自动化建模。对源码进行自动化建模得到智能合约代码抽象语法树文档和源码智能合约模型文档;对字节码进行自动化建模得到字节码智能合约模型文档;

所述语法树解析器用于接收自动化建模工具中的智能合约代码抽象语法树文档,并解析出智能合约代码中的常量、变量、继承关系、函数限定符,并为其分配内存地址,生成语法树解析文档并输出至定理生成器;

所述定理生成器用于接收自动化建模工具输出的源码智能合约模型文档以及自然语言解释器输出的非自然语言描述的智能合约功能需求规范文档以及语法树解析器输出的语法树解析文档,同时依赖于形式化验证规则模型库对非自然语言进行非形式化描述得到相关定理,生成智能合约定理文档并将其输出至定理证明器;

所述定理证明器用于接收定理生成器输出的智能合约定理文档,并对其进行形式化证明得到验证结果,并将验证结果传输至智能合约漏洞检测文档生成器;

所述智能合约漏洞检测文档生成器用于接收定理证明器输出的验证结果,并生成智能合约漏洞检测文档。

进一步地,自动化建模工具包括源码建模器和字节码建模器,所述源码建模器用于对合约源代码进行自动化建模并输出智能合约代码抽象语法树文档和源码智能合约模型文档;所述字节码建模器用于对字节码进行自动化建模并输出字节码智能合约模型文档。

进一步地,源码建模器包括词法分析器、语法分析器、语法树对接器、源码形式化语言推导器,其中,

所述词法分析器用于接收智能合约源代码,并依赖于智能合约语言文法规则库中存储的不同编程语言的文法规则,对输入的字符串进行扫描与分解,识别合法的词素,产生特定规则的词法单元序列并将词法单元序列输出至语法分析器;

所述语法分析器用于接收词法分析器输出的词法单元序列以及用于存储简单优先表,并将词法单元序列与简单优先表进行比较判断,得出词法单元序列所属的编程语言种类,并结合智能合约语言文法规则库中对应的文法规则,将词法单元序列中的词素生成抽象语法树,并将抽象语法树输出至语法树对接器,同时输出智能合约代码抽象语法树文档;

所述语法树对接器用于接收语法分析器输出的抽象语法树以及用于存储对接字典表,利用对接字典表将抽象语法树中的内容一一对应替换生成形式化语言语法树,并将形式化语言语法树输出至源码形式化语言推导器;

对接字典表是借助智能合约语言文法规则库和形式化语言文法规则库建立的记录了智能合约编程语言和形式化语言数据类型、关键字、运算符、结构体、数组、映射、函数等内容的对接过程。

所述源码形式化语言推导器用于接收形式化语言语法树并结合形式化语言文法规则库将语法树对接器中输出的形式化语言语法树翻译成对应的形式化语言代码,整理得到源码智能合约模型文档。

进一步地,字节码建模器包括字节码形式化语言推导器,

所述字节码形式化语言推导器用于接收智能合约字节码,同时依赖于形式化语言文法规则库以及虚拟机指令系统规则库建立智能合约字节码与对应形式化语言操作码的对接字典表,并结合对接字典表将智能合约字节码一一替换成对应的形式化语言操作码的内容,从而得到形式化语言代码,并将形式化语言代码整理得到字节码智能合约模型文档。

对接字典表记录了智能合约字节码以及对不同字节码形式化描述内容的对接过程。

一种高度自动化的智能合约形式化验证方法,包括:

步骤001:使用自然语言编写智能合约功能需求描述文档,再将智能合约功能需求描述文档转换为使用非自然语言描述的智能合约功能需求规范文档,智能合约功能需求规范文档内容包括目标合约功能规范描述和安全属性描述;

步骤002:建立形式化验证规则模型库;

步骤003:借助步骤002中所建立的形式化验证规则模型库,通过自动化建模工具对合约源代码和/或字节码进行自动化建模,源代码建模生成智能合约代码抽象语法树文档和源码智能合约模型文档;字节码建模生成字节码智能合约模型文档;

步骤004:借助步骤003中生成的智能合约代码抽象语法树文档,解析出智能合约代码中的常量、变量、继承关系、函数限定符,并为其分配内存地址,生成语法树解析文档并输出至定理生成器;

步骤005:通过步骤002中所建立的形式化验证规则模型库、步骤004中语法树解析文档以及步骤003中生成的源码智能合约模型文档或字节码智能合约模型文档,对步骤001得到的目标合约功能规范描述和安全属性描述进行形式化描述得到相关定理,生成智能合约定理文档;

步骤006:对步骤005得到的智能合约定理文档进行形式化证明,最终生成智能合约漏洞检测文档。

本发明通过建立独立可扩充的形式化验证规则模型库,使得缺陷代码检测更加完善。

本发明通过自动化建模工具与人工形式化证明相结合,减少时间成本,缩短验证周期,提高效率,自动化建模能够统一模型规范,减少验证模型对程序员个人素质的依赖程度,同时该方法还具有灵活性与普遍性,适应于多种的高级编程语言编写的程序代码,也适应于多种形式化语言,提供了源代码建模和字节码建模两种自动化建模方式,能够针对用户的不同建模需求,选择合适的建模方法进行建模,进一步提高验证效率。本发明实现高度自动化的方式对区块链智能合约进行安全属性验证,检测智能合约漏洞。

对定理文档进行形式化证明,即使用数学的方式,一步一步推导定理。如果推导成功,则证明该合约满足用户功能需求规范和安全属性规范,无缺陷代码,生成相应智能合约漏洞检测文档;如果推导不成功,通过对当前位置的代码分析,得到对应错误的前置条件,定位缺陷代码,生成智能合约漏洞检测文档。

进一步地,步骤002的形式化验证规则模型库,包括区块链平台模型库和智能合约安全属性模型库;

智能合约安全属性模型库是通过对智能合约常见安全漏洞形式化描述建立的安全属性库;

区块链平台模型库包括智能合约语言文法规则库、形式化语言文法规则库、虚拟机指令系统规则库、字节码形式化模型规则库;

其中,智能合约语言文法规则库用于存储不同编程语言的文法规则;形式化语言文法规则库用于存储对不同智能合约语言文法规则的形式化描述;虚拟机指令系统规则库用于存储区块链平台虚拟机中的各种指令码;字节码形式化模型规则库用于存储对区块链平台虚拟机中的操作码的形式化描述。

进一步地,步骤003中的自动化建模工具包括源码建模器和字节码建模器,所述源码建模器用于对合约源代码进行自动化建模,最终输出智能合约代码抽象语法树文档和源码智能合约模型文档;所述字节码建模器用于对字节码进行自动化建模,最终输出字节码智能合约模型文档。

上述两种建模工具能够以高自动化程度,将区块链智能合约源代码转换形式化语言代码,其中区块链智能合约支持多种编程语言编写的程序代码,形式化语言也支持多种形式化语言,通过上述两种建模工具可以极大提高智能合约形式化验证效率。

进一步地,源码建模器的自动化建模步骤包括:

步骤101:词法分析器读入智能合约程序源代码,结合智能合约语言文法规则库中存储的不同编程语言的文法规则,对输入的字符串进行扫描与分解,识别合法的词素,产生并输出特定规则的词法单元序列;

步骤102:语法分析器接收步骤101得到的词法单元序列,并将词法单元序列与存储的简单优先表进行比较判断,得出词法单元序列所属的编程语言种类,结合智能合约语言文法规则库中对应的文法规则,将词法单元序列中的词素生成抽象语法树,整理得到智能合约代码抽象语法树文档;

步骤103:语法树对接器利用对接字典表将步骤102得到的抽象语法树中的内容一一对应替换,从而生成新的形式化语言语法树;其中,对接字典表是结合智能合约语言文法规则库和形式化语言文法规则库建立,记录了智能合约编程语言和形式化语言关键字、运算符、结构体、数组、映射等所有内容的对接过程。

步骤104:源码形式化语言推导器结合形式化语言文法规则库,将步骤103得到的形式化语言语法树生成对应的形式化语言代码,整理得到源码智能合约模型文档。

本发明中的源码建模器,通过分析多种智能合约编程语言,建立不同编程语言的文法规则表,开发词法分析器读入智能合约程序源代码,结合智能合约语言文法规则库,对输入的字符串进行扫描与分解,识别合法的词素,产生并输出特定规则的词法单元序列,开发语法分析器将特定规则的词法单元序列按照智能合约语言文法规则库中的文法规则生成抽象语法树,再通过开发语法树对接器将该语法树对接形成新的形式化语言语法树,通过源码形式化语言推导器,将形式化语言语法树替换成对应形式化语言代码,生成源码智能合约模型文档。该方法可面向多种区块链智能合约开发语言编写的程序代码,实现编程语言代码到形式化代码的转换;本发明中的源码建模器,高自动化的将智能合约源代码一键转换为形式化语言代码,减少时间成本,提高了建模效率。

进一步地,字节码建模器的自动化建模步骤包括:

步骤201:字节码建模器读入智能合约字节码;

步骤202:字节码形式化语言推导器借助虚拟机指令系统规则库和形式化语言文法规则库建立智能合约字节码与对应的形式化语言操作码的对接字典表,结合对接字典表将步骤201的智能合约字节码一一替换成对应的形式化语言操作码的内容,得到形式化语言代码,整理得到字节码智能合约模型文档;其中,形式化语言文法规则库用于存储对不同智能合约语言文法规则的形式化描述;虚拟机指令系统规则库用于存储区块链平台虚拟机中的各种指令码。

对接字典表记录了智能合约字节码以及对不同字节码形式化描述内容的对接过程。

进一步地,步骤005的形式化描述的判断准则包括:

准则1,合理输入得到合理结果;

准则2,不合理输入得到不合理结果;

合理输入指满足智能合约的函数约束条件的输入,不合理输入指不满足智能合约的函数约束条件的输入。

借助步骤002得到的形式化验证规则模型库和步骤003得到的源码智能合约模型文档或字节码智能合约模型文档,对步骤001得到的功能规范和安全属性进行形式化描述,为了保证需求规范(即功能规范描述)和安全属性规范的一致性,从两个角度进行形式化描述:

1)合理输入得到合理结果,满足函数约束条件的输入得到合理结果,函数约束条件,条件即智能合约的函数约束条件,满足这些条件的输入可以得到符合函数功能规范结果,如果不满足,说明该函数存在漏洞,或用户需求不完善。

2)不合理输入得到不合理结果,所谓不合理输入即为不满足函数约束条件的输入。如果不合理输入仍能得到符合函数功能规范的结果,说明该智能合约代码存在漏洞。

本发明与现有技术相比,具有如下的优点和有益效果:

1、本发明可面向多种区块链智能合约开发语言编写的程序代码以及多种形式化语言,实现编程语言代码到形式化语言代码的转换,具有灵活性与普遍性;

2、本发明高自动化的将智能合约源代码一键转换成形式化验证语言,统一模型规范,方便工作对接;

3、本发明通过源代码建模与字节码建模两种方式对智能合约进行建模,再加上独立可扩充的形式化验证规则模型库,使得缺陷代码检测更加完备,准确可靠;提供了源代码建模和字节码建模两种自动化建模方式,能够针对用户的不同建模需求,选择合适的建模方法进行建模,进一步提高验证效率;

4、本发明在描述定理时采用合理输入对应合理输出,不合理输入对应不合理输出两种方式进行描述,准确保证用户需求与合约功能的一致性;

5、本发明属于区块链领域的形式化验证自动化技术先例,即采用高度自动化的智能合约形式化验证,替换区块链领域内纯人工形式化验证的技术方案,不仅降低了程序员的技能要求,还大大减少了人工工作量,缩短了验证时间,大力推动了区块链领域内的自动化技术的发展。

附图说明

此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:

图1为本发明框架图;

图2为本发明智能合约源代码建模器框架图;

图3为本发明智能合约字节码建模器框架图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步地详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。

实施例

如图1所示,一种高度自动化的智能合约形式化验证系统,包括形式化验证规则模型库、智能合约编译器、自然语言解释器、自动化建模工具、语法树解析器、定理生成器、定理证明器、智能合约漏洞检测文档生成器,其中,

所述智能合约编译器用于接收区块链智能合约源代码,将区块链智能合约源代码编译得到源码和字节码,再将得到的源码和字节码输出至自动化建模工具进行建模;

所述自然语言解释器用于接收智能合约功能需求描述文档,将智能合约功能需求描述文档转化为使用非自然语言描述的智能合约功能需求规范文档,并将智能合约功能需求规范文档传输至定理生成器;

所述自动化建模工具用于接收智能合约编译器输出的源码和字节码,并依赖于形式化验证规则模型库对源码和字节码进行自动化建模,对源码进行自动化建模得到智能合约代码抽象语法树文档和源码智能合约模型文档;对字节码进行自动化建模得到字节码智能合约模型文档;

所述语法树解析器用于接收自动化建模工具中的智能合约代码抽象语法树文档,并解析出智能合约代码中的常量、变量、继承关系、函数限定符,并为其分配内存地址,生成语法树解析文档并输出至定理生成器;

所述定理生成器用于接收自动化建模工具输出的源码智能合约模型文档以及自然语言解释器输出的非自然语言描述的智能合约功能需求规范文档以及语法树解析器输出的语法树解析文档,同时依赖于形式化验证规则模型库对非自然语言进行非形式化描述得到相关定理,生成智能合约定理文档并将其输出至定理证明器;

所述定理证明器用于接收定理生成器输出的智能合约定理文档,并对其进行形式化证明得到验证结果,并将验证结果传输至智能合约漏洞检测文档生成器;

所述智能合约漏洞检测文档生成器用于接收定理证明器输出的验证结果,并生成智能合约漏洞检测文档。

自动化建模工具包括源码建模器和字节码建模器,所述源码建模器用于对合约源代码进行自动化建模并输出智能合约代码抽象语法树文档和源码智能合约模型文档;所述字节码建模器用于对字节码进行自动化建模并输出字节码智能合约模型文档。

如图2所示,源码建模器包括词法分析器、语法分析器、语法树对接器、源码形式化语言推导器,其中,

所述词法分析器用于接收智能合约源代码,并依赖于智能合约语言文法规则库中存储的不同编程语言的文法规则,对输入的字符串进行扫描与分解,识别合法的词素,产生特定规则的词法单元序列并将词法单元序列输出至语法分析器;

所述语法分析器用于接收词法分析器输出的词法单元序列以及用于存储简单优先表,并将词法单元序列与简单优先表进行比较判断,得出词法单元序列所属的编程语言种类,并结合智能合约语言文法规则库中对应的文法规则,将词法单元序列中的词素生成抽象语法树,并将抽象语法树输出至语法树对接器,同时输出智能合约代码抽象语法树文档;

所述语法树对接器用于接收语法分析器输出的抽象语法树以及用于存储对接字典表,利用对接字典表将抽象语法树中的内容一一对应替换生成形式化语言语法树,并将形式化语言语法树输出至源码形式化语言推导器;对接字典表是借助智能合约语言文法规则库和形式化语言文法规则库建立的记录了智能合约编程语言和形式化语言关键字、运算符、结构体、数组、映射等所有内容的对接过程。

所述源码形式化语言推导器用于接收形式化语言语法树并结合形式化语言文法规则库将语法树对接器中输出的形式化语言语法树翻译成对应的形式化语言代码,整理得到源码智能合约模型文档。

如图3所示,字节码建模器包括字节码形式化语言推导器,

所述字节码形式化语言推导器用于接收智能合约字节码,同时依赖于形式化语言文法规则库以及虚拟机指令系统规则库建立智能合约字节码与对应形式化语言操作码的对接字典表,并结合对接字典表将智能合约字节码一一替换成对应的形式化语言操作码的内容,从而得到形式化语言代码,并将形式化语言代码整理得到字节码智能合约模型文档。对接字典表记录了智能合约字节码以及对不同字节码形式化描述内容的对接过程。

一种高度自动化的智能合约形式化验证方法,包括:

步骤001:使用自然语言编写智能合约功能需求描述文档,再将智能合约功能需求描述文档转换为使用非自然语言描述的智能合约功能需求规范文档,智能合约功能需求规范文档内容包括目标合约功能规范描述和安全属性描述;即用户描述智能合约功能需求,将该功能需求使用容易形式化描述的非自然语言描述,统一规范,得到功能需求规范文档。

步骤002:建立形式化验证规则模型库;

步骤002的形式化验证规则模型库,包括区块链平台模型库和智能合约安全属性模型库;

智能合约安全属性模型库是通过对智能合约常见安全漏洞形式化描述建立的安全属性库;

区块链平台模型库包括智能合约语言文法规则库、形式化语言文法规则库、虚拟机指令系统规则库、字节码形式化模型规则库;

其中,智能合约语言文法规则库用于存储不同编程语言的文法规则;形式化语言文法规则库用于存储对不同智能合约语言文法规则的形式化描述;虚拟机指令系统规则库用于存储区块链平台虚拟机中的各种指令码;字节码形式化模型规则库用于存储对区块链平台虚拟机中的操作码的形式化描述。

步骤003:借助步骤002中所建立的形式化验证规则模型库,通过自动化建模工具对合约源代码和/或字节码进行自动化建模,自动化建模工具包括源码建模器和字节码建模器,所述源码建模器用于对合约源代码进行自动化建模,最终输出智能合约代码抽象语法树文档和源码智能合约模型文档;所述字节码建模器用于对字节码进行自动化建模,最终输出字节码智能合约模型文档。

如图2所示,源码建模器的自动化建模步骤包括:

步骤101:词法分析器读入智能合约程序源代码,结合智能合约语言文法规则库中存储的不同编程语言的文法规则,对输入的字符串进行扫描与分解,识别合法的词素,产生并输出特定规则的词法单元序列;

步骤102:语法分析器接收步骤101得到的词法单元序列,并将词法单元序列与存储的简单优先表进行比较判断,得出词法单元序列所属的编程语言种类,结合智能合约语言文法规则库中对应的文法规则,将词法单元序列中的词素生成抽象语法树,整理得到智能合约代码抽象语法树文档;

步骤103:语法树对接器利用对接字典表将步骤102得到的抽象语法树中的内容一一对应替换,从而生成新的形式化语言语法树;对接字典表是结合智能合约语言文法规则库和形式化语言文法规则库建立,记录了智能合约编程语言和形式化语言关键字、运算符、结构体、数组、映射等所有内容的对接过程。

步骤104:源码形式化语言推导器结合形式化语言文法规则库,将步骤103得到的形式化语言语法树生成对应的形式化语言代码,整理得到源码智能合约模型文档。

如图3所示,字节码建模器的自动化建模步骤包括:

步骤201:字节码建模器读入智能合约字节码;

步骤202:字节码形式化语言推导器借助虚拟机指令系统规则库和形式化语言文法规则库建立智能合约字节码与对应的形式化语言操作码的对接字典表,结合对接字典表将步骤201的智能合约字节码一一替换成对应的形式化语言操作码的内容,得到形式化语言代码,整理得到字节码智能合约模型文档;其中,形式化语言文法规则库用于存储对不同智能合约语言文法规则的形式化描述;虚拟机指令系统规则库用于存储区块链平台虚拟机中的各种指令码。

步骤004:借助步骤003中生成的智能合约代码抽象语法树文档,解析出智能合约代码中的常量、变量、继承关系、函数限定符,并为其分配内存地址,生成语法树解析文档并输出至定理生成器;

步骤005:通过步骤002中所建立的形式化验证规则模型库、步骤004中语法树解析文档以及步骤003中生成的源码智能合约模型文档或字节码智能合约模型文档,对步骤001得到的目标合约功能规范描述和安全属性描述进行形式化描述得到相关定理,生成智能合约定理文档;

步骤005的形式化描述的判断准则包括:

准则1,合理输入得到合理结果;

准则2,不合理输入得到不合理结果;

合理输入指满足智能合约的函数约束条件的输入,不合理输入指不满足智能合约的函数约束条件的输入。

步骤006:对步骤005得到的智能合约定理文档进行形式化证明,最终生成智能合约漏洞检测文档。

为了能够更容易让本领域人员理解,以下将用以太坊区块链智能合约源代码以及coq工具对应形式化语言为例进行说明。其并不构成对本发明的任何限制。本领域技术人员在本发明公开的技术内容启示下,将其应用于其他区块链平台,例如eos,fabric等,或其他形式化语言,例如isabelle等。

本例中以以太坊智能合约为例,结合图1,使用本方法对智能合约源代码进行缺陷代码检测流程进行详细阐述,主要步骤如下。

步骤s01:用户使用自然语言提出功能安全需求,再使用非自然语言将其转换得到智能合约功能需求规范文档,智能合约功能需求规范文档包括目标合约功能规范描述和安全属性描述。

步骤s02:建立形式化验证规则模型库,包括以太坊平台模型库和solidity智能合约安全属性模型库:以太坊平台模型库包括solidity语言文法规则库,coq工具对应形式化语言文法规则库,虚拟机指令系统规则库,字节码形式化模型规则库,其中,solidity语言文法规则库是储存solidity语言的文法规则,coq工具对应形式化语言文法规则库用于存储对solidity语言文法规则的形式化描述;虚拟机指令系统规则库用于存储以太坊平台虚拟机中的各种指令码;字节码形式化模型规则库用于存储对以太坊平台虚拟机中的操作码的形式化描述;对于solidity智能合约安全属性模型库,则是根据对以太坊平台智能合约常见漏洞,例如:可重入攻击、调用深度限制、整型溢出、交易顺序依赖、delegatecall漏洞、拒绝服务攻击等漏洞,但不限于这些漏洞,进行形式化描述,建立solidity智能合约安全属性模型库。

步骤s03:使用以太坊智能合约编程语言solidity的编译器solc,编译智能合约源代码,得到合约字节码和合约源代码。

步骤s04:将智能合约源代码输入到智能合约源码建模器中。

如图2所示,词法分析器结合以太坊平台和solidity语言文法规则库,将输入代码扫描分解,产生特定词法单元序列,语法分析器对词法分析器输出的单元序列进行语法分析,结合以太坊平台和solidity语言文法规则库,将单元序列词素生成抽象语法树;语法树对接器通过所存储的对接字典表,遍历语法分析器生成的抽象语法树,字典表中包含solidity语言和coq工具对应语言的关键字、运算符、结构体、数组、映射等所有内容的对接过程,再结合solidity语言文法规则库与coq工具对应形式化语言文法规则库,将语法树内容替换成coq工具对应语言语法树,打印该语法树,得到solidity代码抽象语法树文档;源码形式化语言推导器,遍历coq语法树,结合coq工具对应形式化语言文法规则库和solidity智能合约安全属性模型库,将语法树转换成coq语言代码,最终得到源代码级智能合约模型文档。

步骤s05:将编译器编译目标合约得到的字节码输入到智能合约字节码建模器中。

如图3所示,字节码形式化语言推导器,依赖于形式化语言文法规则模型库以及虚拟机指令系统规则库建立该合约字节码与coq工具对应形式化语言操作码的对接字典表,对接字典表记录了该合约字节码以及对不同字节码形式化描述内容的对接过程,结合对接字典表将智能合约字节码一一替换成对应的coq工具形式化语言操作码的内容,从而得到形式化语言代码,并将形式化语言代码整理输出字节码智能合约模型文档。

步骤s06:借助步骤s04中生成的solidity代码抽象语法树文档,解析出该合约代码中的常量、变量、继承关系、函数限定符,分配内存地址,生成语法树解析文档。

步骤s07:通过步骤s02中所建立的形式化验证规则模型库、步骤s04中生成的源码智能合约模型文档以及步骤s05中语法树解析文档,对步骤s01得到的目标合约功能规范描述和安全属性描述进行形式化描述,即使用数学方法,通过上述模型库和文档得到前提条件和命题内容,用coq工具对应形式化语言描述得到相关定理,生成智能合约定理文档。

这里以太坊整型溢出漏洞为例,详细介绍coq工具对应形式化语言形式化描述过程。整型溢出是以太坊平台常见漏洞之一,所谓整型溢出,即超出该类型取值范围,可分为上溢和下溢,如果不对智能合约函数条件加以约束,交易中很容易出现整型溢出,一旦出现会给智能合约和当前平台带来严重损失。针对整型溢出,首先需要对solidity整数类型进行建模,并定义形式化规则,使用coq工具描述solidity整数类型所有运算过程,包括逻辑运算和算术运算。对步骤004中建立的模型进行coq定理性描述,即保证功能正确性。首先根据建立的solidity整数类型模型设置前提条件,保证合理输入,同时为了对是否溢出的安全属性进行证明,需要添加后置条件;然后以不合理输入作为前提条件,为了能够对功能需求一致性进行证明,添加后置条件,最终得到关于智能合约的定理文档。

步骤s08:对智能合约定理文档进行数学推导,根据前置条件证明代码的执行是否满足后置条件,如果产生一个不可证明的结果,则说明程序功能不正确,存在溢出安全漏洞;如果成功推导结束,则说明改程序功能正确,不存在溢出安全漏洞。根据证明结果,定位缺陷代码位置,生成智能合约漏洞检测文档,完成对智能合约功能规范和安全属性进行形式化证明过程。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1