智能合约安全性验证方法及装置

文档序号:31649102发布日期:2022-09-27 20:59阅读:199来源:国知局
智能合约安全性验证方法及装置

1.本发明实施例涉及区块链和软件工程技术领域,尤其涉及一种智能合约安全性验证方法及装置。


背景技术:

2.智能合约是一段基于多方达成约定的可以部署在区块链平台上的代码,当前置条件满足后就能自动执行所形成的智能合约。solidity语言是最受欢迎且使用最多的用来书写智能合约的合约语言。它是一种高阶语言,具有丰富的表达能力,方便开发者使用,但是随之而来的是采用solidity语言书写的智能合约验证合约行为正确性的难度极高。
3.形式化方法是一种基于数理逻辑的方法,用来规约和验证计算机系统或者程序代码,可以帮助在测试时更加全面地找到系统漏洞以提高系统安全性。因此将形式化方法应用于智能合约的验证是一个热门研究方向。
4.目前的形式化智能合约安全性验证方案的缺点主要在于:一是对智能合约建模基于归纳假设,不能对所有状态穷举,也就是说模拟的智能合约运行环境与真实环境存在较大差异。二是自动化程度相对较低,需要人工对智能合约代码进行切片处理和建模,针对不同的合约代码需要重复同样的步骤。三是穷举范围有限,在面对复杂程度高的智能合约代码会出现状态爆炸问题。


技术实现要素:

5.本发明实施例提供一种智能合约安全性验证方法及装置,用于解决现有的智能合约安全性验证方法不能对所有状态穷举以及自动化程度低的问题。
6.为了解决上述技术问题,本发明是这样实现的:
7.第一方面,本发明实施例提供了一种智能合约安全性验证方法,包括:
8.根据预设的转换规则,将solidity合约转换成event-b模型,所述转换规则中包括一个solidity语法子集中的各solidity语法到event-b语法的映射关系;
9.通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务,并通过rodin平台的证明助手验证所述证明义务;
10.若所述证明义务未通过验证,定位所述证明义务在所述event-b模型中对应的语句;
11.若所有所述证明义务均通过验证,为所述solidity合约打上安全证书的标签。
12.可选的,所述solidity语法子集中包括以下至少一项:类型声明、变量属性、合约构造器定义、函数定义、数据类型和核心控制流语句。
13.可选的,所述event-b模型包括event-b机器和event-b文本,所述solidity语法到event-b语法的映射关系包括以下至少一项:
14.solidity的类型声明映射为所述event-b文本的集合与公理;
15.solidity的变量属性映射为所述event-b机器的变量和不变量;所述不变量用于
约束所述变量;
16.solidity的合约构造器映射为所述event-b机器的初始化事件;
17.solidity的函数映射为所述event-b机器的事件。
18.可选的,将solidity合约转换成event-b模型之后还包括:
19.通过rodin平台对所述event-b模型进行仿真模拟;
20.其中,对所述event-b模型进行仿真模拟包括:通过初始化以实现对所述event-b模型中的变量赋值,并执行所述event-b模型中满足触发条件的事件,并根据执行结果判断所述event-b模型的行为是否满足预期要求。
21.可选的,通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务之前还包括:
22.根据用户手动输入的对所述event-b模型的约束条件和/或参数,对所述event-b模型进行精化,得到精化后的event-b模型;
23.所述通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务,包括:
24.通过rodin平台为精化后的event-b模型的不变量自动生成对应的证明义务。
25.第二方面,本发明实施例提供了一种智能合约安全性验证装置,包括:
26.转换模块,用于根据预设的转换规则,将solidity合约转换成event-b模型,所述转换规则中包括一个solidity语法子集中的各solidity语法到event-b语法的映射关系;
27.验证模块,用于通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务,并通过rodin平台的证明助手验证所述证明义务;
28.定位模块,用于若所述证明义务未通过验证,定位所述证明义务在所述event-b模型中对应的语句;
29.打标签模块,用于若所有所述证明义务均通过验证,为所述solidity合约打上安全证书的标签。
30.可选的,所述装置还包括:
31.仿真模拟模块,用于通过rodin平台对所述event-b模型进行仿真模拟;其中,对所述event-b模型进行仿真模拟包括:通过初始化以实现对所述event-b模型中的变量赋值,并执行所述event-b模型中满足触发条件的事件,并根据执行结果判断所述event-b模型的行为是否满足预期要求。
32.可选的,所述装置还包括:
33.精化模块,用于根据用户手动输入的对所述event-b模型的约束条件和/或参数,对所述event-b模型进行精化,得到精化后的event-b模型。
34.其中,所述验证模块,用于通过rodin平台为精化后的event-b模型的不变量自动生成对应的证明义务。
35.第三方面,本发明实施例提供了一种电子设备,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序,所述程序被所述处理器执行时实现上述第一方面所述的智能合约安全性验证方法的步骤。
36.第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的智能
合约安全性验证方法的步骤。
37.本发明实施例具有以下优点:
38.1.由于event-b模型基于一阶逻辑,与solidity合约的运行状态和语言特性相吻合,可以对solidity合约运行时的所有状态穷举。
39.2.通过建立统一的solidity合约语言转换到event-b模型的转换规则,可以实现solidity合约的批量式建模,对solidity合约建模的自动化程度高。
40.3.通过对event-b模型的不断精化,可以验证solidity合约从简单到逐渐复杂的安全性质,提高验证solidity合约的属性范围。
附图说明
41.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
42.图1a为本发明一实施例的智能合约安全性验证方法流程示意图;
43.图1b为本发明另一实施例的智能合约安全性验证方法流程示意图;
44.图2为本发明实施例的智能合约安全性验证方法的框架示意图;
45.图3为本发明实施例中定义的solidity语法子集的示意图;
46.图4为本发明实施例中solidity语法到event-b语法的映射关系的示意图;
47.图5为本发明实施例的智能合约安全性验证装置的结构示意图;
48.图6为本发明实施例的电子设备的结构示意图。
具体实施方式
49.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
50.请参考图1a和图2,本发明实施例提供一种智能合约安全性验证方法,包括:
51.步骤11:根据预设的转换规则,将solidity合约转换成event-b模型,所述转换规则中包括一个solidity语法子集中的各solidity语法到event-b语法的映射关系;
52.event-b是一种对系统建模的形式化语言,基于一阶逻辑,可在rodin平台中进行模拟和证明。
53.本发明实施例中,转换规则的建立方法可以如下:分析solidity合约的语法元素和规则,定义一个solidity语法子集,然后建立solidity语法子集中的各语法到event-b语法的映射关系,形成上述转换规则。在建立映射关系时,需要保持solidity语法和event-b语法的语义一致性。
54.步骤12:通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务,并通过rodin平台的证明助手验证所述证明义务;
55.本发明实施例中,根据步骤11中的转换规则,solidity合约里的变量的约束、函数执行的条件等会被转换成event-b模型的不变量(invariant),用户还可以指定solidity合
约的属性,用不变量的形式规约并添加到event-b模型中。
56.步骤13:若所述证明义务未通过验证,定位所述证明义务在所述event-b模型中对应的语句,以帮助用户修改event-b模型或者solidity合约的源代码;修改solidity合约的源代码之后,再通过步骤11转换为event-b模型,再次进行证明义务的验证,直至所有所述证明义务均通过验证。
57.步骤14:若所有所述证明义务均通过验证,为所述solidity合约打上安全证书的标签。
58.经过验证的证明义务表示solidity合约里对应的该条性质得到了验证,当所有证明义务都被证明,即表示生成的event-b模型满足要求的性质,即solidity合约是安全的,则可以打上安全证书的标签。
59.本发明实施例具有以下优点:
60.1.由于event-b模型基于一阶逻辑,与solidity合约的运行状态和语言特性相吻合,可以对solidity合约运行时的所有状态穷举。
61.2.通过建立统一的solidity合约语言转换到event-b模型的转换规则,可以实现solidity合约的批量式建模,对solidity合约建模的自动化程度高。
62.本发明实施例中,可选的,所述solidity语法子集中包括以下至少一项:类型声明、变量属性、合约构造器定义、函数定义、数据类型和核心控制流语句。其中,核心控制流语句包括以下至少一项:if语句、while循环语句,基本运算语句等。
63.本发明实施例中,定义的solidity语法子集可以参考图2和图3。
64.本发明实施例中,event-b模型包括event-b机器和event-b文本,可选的,solidity语法到event-b语法的映射关系包括以下至少一项:
65.1)solidity的类型声明映射为所述event-b文本的集合与公理;
66.可选的,如果solidity合约里的声明的类型存在于event-b模型中,比如布尔类型,则直接转换成对应的类型。如果是新的类型,比如地址类型,需要在event-b文本里建立相同名字的集合,并通过公理来表示该集合的性质。
67.2)solidity的变量属性映射为所述event-b机器的变量和不变量;
68.其中,不变量是用来约束变量的性质。
69.3)solidity的合约构造器映射为所述event-b机器的初始化事件;
70.4)solidity的函数映射为所述event-b机器的事件。
71.举例来说,将solidity合约的函数中的关键词转换为event-b机器的事件中对应的固定的变量名称,因为命名可以有很多种选择,这里对solidity中关键字统一给出固定的命名,例如payable关键字,就要在对应的event-b机器的事件中创造固定的msg_sender和msg_value两个参数。
72.通过上述映射关系,可以将solidiy转换为event-b,文中定义的映射关系是保持语义一致的,就是说转换后的event-b模型和转换前的solidity合约的功能,语义是一样,且具体的映射规则是根据solidity语言特点和event-b模型的特点得到。
73.本发明实施例中,solidity语法到event-b语法的映射关系可以参考图2和图4。
74.本发明实施例中,将solidity合约转换得到的event-b模型为抽象模型,可选的,将solidity合约转换成event-b模型之后还包括:通过rodin平台对所述event-b模型进行
仿真模拟;例如,通过rodin平台的proba插件,对所述event-b模型进行仿真模拟。
75.对所述event-b模型进行仿真模拟主要包括:通过初始化以实现对所述event-b模型中的变量赋值,并执行所述event-b模型的满足触发条件的事件(event),并根据执行结果判断所述event-b模型的行为是否满足预期要求。用户可以逐个执行满足触发条件的事件,以判断所述event-b模型的行为是否满足预期要求。若所述event-b模型的行为与预期不一致,则可以修改event-b模型或者solidity合约的源代码。修改solidity合约的源代码之后,再通过步骤11转换为event-b模型,再次进行证明义务验证和仿真模拟。
76.在每个event-b事件中,都有guard的结构,使用where关键字表示,即满足该guard的内容,该事件才可以被执行。举例来说,下面是一个event-b事件格式,只有满足@grd1和@grd2(即触发条件),该事件才会触发@act1和@act2的内容。
[0077][0078]
请参考图1b,本发明的另一实施例还提供一种智能合约安全性验证方法,包括:
[0079]
步骤21:根据预设的转换规则,将solidity合约转换成event-b模型,所述转换规则中包括一个solidity语法子集中的各solidity语法到event-b语法的映射关系;
[0080]
步骤22:通过rodin平台对所述event-b模型进行仿真模拟,以判断所述event-b模型是否满足预期要求;若所述event-b模型满足预期要求,执行步骤24;
[0081]
步骤23:若所述event-b模型满足不预期要求,定位所述event-b模型中对应的语句,以帮助用户修改event-b模型或者solidity合约的源代码;修改solidity合约的源代码之后,再通过步骤21转换为event-b模型,再次进行仿真模拟,直至所述event-b模型满足预期要求。
[0082]
步骤24:通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务,并通过rodin平台的证明助手验证所述证明义务;
[0083]
步骤25:若所述证明义务未通过验证,定位所述证明义务在所述event-b模型中对应的语句,以帮助用户修改event-b模型或者solidity合约的源代码;修改solidity合约的源代码之后,再通过步骤21转换为event-b模型,直至所有所述证明义务均通过验证。
[0084]
步骤26:若所有所述证明义务均通过验证,为所述solidity合约打上安全证书的标签。
[0085]
本实施例中,对event-b模型即进行了仿真模拟,又进行了证明义务验证,可以进
一步有效提高solidity合约的安全性。智能合约代码需要在区块链上运行,仿真模拟可以在上链之前进行,如果发现合约不满足预期行为或者功能,那么可以在实际上链之前发现问题,避免造成损失。
[0086]
本发明实施例中,当有些期望验证的性质无法通过抽象模型表示和验证的时候,可选的,通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务之前还包括:根据用户手动输入的对所述event-b模型的约束条件和/或参数,对所述event-b模型进行精化,得到精化后的event-b模型。所述通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务,包括:通过rodin平台为精化后的event-b模型的不变量自动生成对应的证明义务。通过增加约束条件,增加参数等方式不断精化模型,使得精化后的模型可以验证更加具体且复杂的合约性质,提高验证智能合约的属性范围。
[0087]
所谓约束条件。比如前面提到的event-b事件中的guard,比如不变量@inv,都是约束。约束条件最后会被转换为证明义务,只有证明义务得到满足,模型才算经过验证。
[0088]
所谓参数,是给event-b模型中的变量的赋值,例如为初始化时给变量的赋值,这个值是不确定的,可以用户自己给出,给出不同的值,也许会有不同的结果。
[0089]
本发明实施例中,当solidity合约获得安全证书后,可以将经过验证的solidity合约部署在区块链上。
[0090]
请参考图5,本发明实施例还提供一种智能合约安全性验证装置50,包括:
[0091]
转换模块51,用于根据预设的转换规则,将solidity合约转换成event-b模型,所述转换规则中包括一个solidity语法子集中的各solidity语法到event-b语法的映射关系;
[0092]
验证模块52,用于通过rodin平台为所述event-b模型的不变量自动生成对应的证明义务,并通过rodin平台的证明助手验证所述证明义务;
[0093]
定位模块53,用于若所述证明义务未通过验证,定位所述证明义务在所述event-b模型中对应的语句;
[0094]
打标签模块54,用于若所有所述证明义务均通过验证,为所述solidity合约打上安全证书的标签。
[0095]
可选的,所述solidity语法子集中包括以下至少一项:类型声明、变量属性、合约构造器定义、函数定义、数据类型和核心控制流语句。
[0096]
可选的,所述event-b模型包括event-b机器和event-b文本,所述solidity语法到event-b语法的映射关系包括以下至少一项:
[0097]
solidity的类型声明映射为event-b文本的集合与公理;
[0098]
solidity的变量属性映射为event-b机器的变量和不变量;所述不变量用于约束所述变量;
[0099]
solidity的合约构造器映射为event-b机器的初始化事件;
[0100]
solidity的函数映射为event-b机器的事件。
[0101]
可选的,本发明实施例的智能合约安全性验证装置50还包括:
[0102]
仿真模拟模块,用于通过rodin平台对所述event-b模型进行仿真模拟;其中,对所述event-b模型进行仿真模拟包括:通过初始化对所述event-b模型中的变量赋值,并触发所述event-b模型的满足条件的事件,以判断所述event-b模型的行为是否满足预期。
[0103]
可选的,本发明实施例的智能合约安全性验证装置50还包括:
[0104]
精化模块,用于根据用户手动输入的对所述event-b模型的约束条件和/或参数,对所述event-b模型进行精化,得到精化后的event-b模型。
[0105]
其中,所述验证模块52,用于通过rodin平台为精化后的event-b模型的不变量自动生成对应的证明义务。
[0106]
请参考图6,本发明实施例还提供一种电子设备60,包括处理器61,存储器62,存储在存储器62上并可在所述处理器61上运行的计算机程序,该计算机程序被处理器61执行时实现上述智能合约安全性验证方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0107]
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现上述智能合约安全性验证方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等。
[0108]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0109]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0110]
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1