一种HyperledgerFabric智能合约问题检测方法与流程

文档序号:25664289发布日期:2021-06-29 23:39阅读:330来源:国知局
一种HyperledgerFabric智能合约问题检测方法与流程
一种hyperledger fabric智能合约问题检测方法
技术领域
1.本发明涉及区块链安全技术领域,具体为一种hyperledger fabric智能合约问题检测方法。


背景技术:

2.hyperledger fabric简称为hf,hf是企业级许可的分布式分类账技术平台,智能合约是在区块链平台上运行的自主程序,在区块链3.0时代,智能合约为hf提供了更复杂的业务功能支持,运行在区块链上的智能合约也在去中心化应用场景中扮演着越来越重要的角色,但同时其安全漏洞造成的影响也越发显著,因此,智能合约安全漏洞的自动化检测已成为区块链技术应用中急需解决的问题,目前针对智能合约漏洞已经提出了多种检测方案,其检测主要是围绕以太坊智能合约展开,并且几乎没有针对hf智能合约的相关方法提出,sukrit等人提出zeus工具,可以为hf智能合约进行形式化验证,但其主要验证智能合约的逻辑与需求是否一致,不能满足其他类型漏洞的检测,针对以太坊智能合约所总结的漏洞类型在hf智能合约上是否符合也未可知,因此无法针对漏洞类型开展测试工作,相较传统程序而言,智能合约的安全性不仅影响多方合约参与者的公平性,还影响合约执行中的庞大数字资产的安全性,所以人们继急需一种hyperledger fabric智能合约问题检测方法来解决上述问题。


技术实现要素:

3.本发明的目的在于提供一种hyperledger fabric智能合约问题检测方法,以解决上述背景技术中提出的问题。
4.为了解决上述技术问题,本发明提供如下技术方案:一种
5.hyperledger fabric智能合约问题检测方法,该方法包括以下步骤:
6.s1、根据单元测试用例产生初始语料;
7.s2、根据hf智能合约源代码产生测试文件;
8.s3、根据go

fuzz工具进行智能合约模糊测试以及检测智能合约漏洞;
9.s4、产生并输出步骤s3中的漏洞检测结果;
10.进一步的,在步骤s1中,单元测试用例是作为hf智能合约单元测试的输入用例,hf智能合约单元测试用例用于产生初始语料,hf智能合约单元测试用例通过json类型表示;
11.进一步的,在步骤s1中,还包括以下步骤:
12.s11、以json类型表示hf智能合约单元测试用例;
13.s12、根据步骤s1中的单元测试用例,编写main.go测试文件;
14.s13、运行main.go文件产生初始语料;
15.进一步的,测试用例通过为特殊目标编制一组测试输入、执行条件以及预期结果,用于核实是否满足特定软件的需求,单元测试用于对软件中的最小可测试单元进行检查和验证;
16.进一步的,在步骤s2中,获取hf智能合约源代码,hf智能合约源代码通过go语言编写,利用mockstub类调用fabric智能合约规则,用于产生测试文件;
17.进一步的,根据步骤s2中智能合约源代码的功能函数编写测试文件,fuzz.go,测试文件中根据mockstub类对功能函数进行调用,将信息查询结果与发布的信息进行对比,用于检测智能合约的逻辑错误;
18.进一步的,功能函数为智能合约中除去main函数外的函数;
19.进一步的,步骤s3还包括以下步骤:
20.s31、将初始语料加入语料库;
21.s32、根据步骤s31中的语料库,利用go

fuzz工具从语料库中选取一个语料;
22.s33、对步骤s32中所选取的语料进行变异,产生当前测试用例;
23.s34、读入测试文件,输入步骤s33中产生的测试用例,进行模糊测试;
24.s35、若存在漏洞,则记录漏洞信息以及步骤s34中的测试用例;
25.s36、语料库根据测试反馈结果进行调整,反馈结果为整型1,则将当前语料加入语料库中,反馈结果为

1,则当前语料不能加入语料库中,其他情况反馈结果为0;
26.s37、重复上述步骤s32

s36,直至测试被终止;
27.进一步的,在步骤s34中,模糊测试通过向目标系统提供非预期的输入并监视异常结果,用于发现软件漏洞;
28.进一步的,在步骤s4中,输出的漏洞检测结果包括检测结果、智能合约漏洞信息和发生漏洞时的语料信息。
29.与现有技术相比,本发明所达到的有益效果是:
30.本发明提出的基于go

fuzz的hf智能合约问题检测方法适用于使用go语言编写的hf智能合约,助mockstub类和go

fuzz检测智能合约的问题,在一定程度上填补了hf智能合约漏洞检测方面研究的空缺,利用该hf智能合约问题检测方法可以快速检测hf智能合约问题。
附图说明
31.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
32.在附图中:
33.图1是本发明一种hyperledger fabric智能合约问题检测方法的方法概览图;
34.图2是本发明一种hyperledger fabric智能合约问题检测方法的流程示意图。
具体实施方式
35.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
36.实施例:请参阅图1

2,本发明提供技术方案:一种hyperledger fabric智能合约问题检测方法,该方法包括以下步骤:
37.s1、根据单元测试用例产生初始语料;获取hf智能合约单元测试用例,并产生初始语料。
38.s2、根据hf智能合约源代码产生测试文件;获取hf智能合约源代码,并借助mockstub类的使用规则产生测试文件。
39.s3、根据go

fuzz工具进行智能合约模糊测试以及检测智能合约漏洞;将初始语料和测试文件输入go

fuzz工具,进行模糊测试,检测智能合约漏洞。
40.s4、产生并输出步骤s3中的漏洞检测结果;
41.hyperledger fabric简称为hf,hf是企业级许可的分布式分类账技术平台,在步骤s1中,单元测试用例是作为hf智能合约单元测试的输入用例,hf智能合约单元测试用例用于产生初始语料,hf智能合约单元测试用例通过json类型表示;智能合约是旨在以信息化方式传播、验证或执行合同的计算机协议,智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转,json类型”,是一种轻量级的数据交换格式。它基于ecmascript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
42.在步骤s1中,还包括以下步骤:
43.s11、以json类型表示hf智能合约单元测试用例;
44.s12、根据步骤s1中的单元测试用例,编写main.go测试文件;
45.s13、运行main.go文件产生初始语料。
46.测试用例通过为特殊目标编制一组测试输入、执行条件以及预期结果,用于核实是否满足特定软件的需求,单元测试用于对软件中的最小可测试单元进行检查和验证,在本实施例中是对智能合约的所有功能函数进行单元测试;
47.在步骤s2中,获取hf智能合约源代码,hf智能合约源代码通过go语言编写,利用mockstub类调用fabric智能合约规则,用于产生测试文件;
48.根据步骤s2中智能合约源代码的功能函数编写测试文件fuzz.go,测试文件中根据mockstub类对功能函数进行调用,将信息查询结果与发布的信息进行对比,用于检测智能合约的逻辑错误;作为输入的hf智能合约源代码是用go语言编写的,mockstub类是hf提供的一种用于hf智能合约单元测试的方法,mockstub类维护一个map[string][]byte来模拟键值对,以此完成区块链网络中状态数据库的工作,go语言是指google开发的一种静态强类型、编译型语言。
[0049]
功能函数为智能合约中除去main函数外的函数;计算机中的一个子程序可以实现固定运算功能。
[0050]
步骤s3还包括以下步骤:
[0051]
s31、将初始语料加入语料库;此时语料库中有且仅有初始语料。
[0052]
s32、根据步骤s31中的语料库,利用go

fuzz工具从语料库中随机选取一个语料;语料是指符合go

fuzz工具要求的测试用例,初始语料是指用于输入的且符合go

fuzz工具要求的测试用例。
[0053]
s33、对步骤s32中所选取的语料进行变异,产生当前测试用例;变异是指从细节方面改变初始语料,从而产生不同的语料。
[0054]
s34、读入测试文件,输入步骤s33中产生的测试用例,进行模糊测试;
[0055]
s35、若存在漏洞,则记录漏洞信息以及步骤s34中的测试用例;
[0056]
s36、语料库根据测试反馈结果进行调整,反馈结果为整型1,则将当前语料加入语料库中,反馈结果为

1,则当前语料不能加入语料库中,其他情况反馈结果为0;
[0057]
s37、重复上述步骤s32

s36,直至测试被终止;
[0058]
在步骤s34中,模糊测试通过向目标系统提供非预期的输入并监视异常结果,用于发现软件漏洞;
[0059]
在步骤s4中,输出的漏洞检测结果包括检测结果、智能合约漏洞信息和发生漏洞时的语料信息;
[0060]
本实施例以任意一份go语言编写的hf智能合约为例:图1中go

fuzz表示go

fuzz工具,图2中fuzz表示go

fuzz所规定的测试函数,info_1、info_2、info_n及check info_1、check info_2、check info_n为自定义测试函数。
[0061]
s1、获取hf智能合约单元测试用例,并产生初始语料:s11:选择任意一份使用go语言编写的hf智能合约,设计单元测试用例,并以json类型表示,json类型中key为智能合约中功能函数名称,其所对应的value为功能函数的参数;s12:根据单元测试用例,编写main.go测试文件,在main文件中,将json类型的单元测试用例转换为data数组并输入go

fuzz工具;s13:运行main.go文件产生初始语料,并将输出重定向至同级目录的corpus文件夹下。
[0062]
s2、根据hf智能合约源代码产生测试文件:s21:复制步骤s1中选择的智能合约源代码,将其保存到本地,保存为.go格式的文件;s22:根据智能合约源代码中的功能函数编写测试文件fuzz.go,测试文件借助mockstub类对功能函数进行调用,同时,将信息查询结果与发布的信息进行对比,以检测智能合约的逻辑错误。
[0063]
s3、根据go

fuzz工具进行智能合约模糊测试以及检测智能合约漏洞:s31:将初始语料加入语料库,此时语料库中有且仅有初始语料;s32:go

fuzz工具从语料库中随机选取一个语料;s33:对所选取语料进行变异,产生当前测试用例;s34:读入测试文件,输入当前测试用例,开始进行模糊测试;s35:若存在漏洞,则记录漏洞信息及当前测试用例;s36:语料库根据测试反馈结果进行调整,反馈结果为整型1,则将当前语料加入语料库中;反馈结果为

1,代表即使输入数据提供了新的覆盖范围也不能将此次输入数据添加至语料库中;其他情况返回0;s37:重复步骤s32

s36,直至测试被终止。
[0064]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
[0065]
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1