一种面向数据管控的智能合约代码检查方法和系统技术方案

技术编号:26791608 阅读:24 留言:0更新日期:2020-12-22 17:06
本发明专利技术实施例提供了一种面向数据管控的智能合约代码检查方法和系统,所述方法和系统预先定义数据依赖类型及其相关计算,设计基于污点分析的多源多汇的静态分析算法;针对目标合约文件中的目标合约函数,确定污点源;基于所述算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,返回最终分析结果;生成并返回分析报告。本发明专利技术实施例提供的方法和系统,基于特定数据管控策略来定义数据约束并进行静态分析,以完成智能合约的自动化审计,保证面向数据管控的区块链平台上智能合约的正常运行。

【技术实现步骤摘要】
一种面向数据管控的智能合约代码检查方法和系统
本专利技术涉及通信
,特别是涉及一种面向数据管控的智能合约代码检查方法和一种面向数据管控的智能合约代码检查系统。
技术介绍
智能合约是部署在区块链上的可执行代码,区块链为智能合约提供了可信执行的环境,除传统的以以太坊为例的智能合约在加密货币领域的应用以外,现如今智能合约还广泛应用于金融、投票、供应链、电子商务等领域。智能合约一旦上链执行是不可逆的,需在其执行前就发现潜在的漏洞。程序静态分析是在程序执行前发现其漏洞的主要手段。智能合约作为一种特殊的程序,不同领域下的智能合约则需要进行面向领域特定目标的静态分析,以保障智能合约的准确运行。而目前已有的对智能合约进行静态分析的方法仅适用于加密货币领域,如:整型溢出、Fallback检测等等。随着区块链在不同领域的广泛使用,出现了面向数据全生命周期管控的区块链平台,该平台为了保障数据所有者的权益,原始数据并不是像加密货币的交易数据一样被记录在账本上被所有参与者共享,而是数据使用者通过提供智能合约的方式向数据所有者发起请求,数据所有者需要审计智能合约是否合理合法地使用其数据,然后使用者才能使用数据。目前,面向数据管控的区块链平台中,由于仍然缺乏相应的智能合约的静态分析方法,完全由数据使用者来人工审计智能合约的做法,效率低下、成本高昂。
技术实现思路
鉴于上述问题,提出了本专利技术实施例提供一种克服上述问题或者至少部分地解决上述问题的一种面向数据管控的智能合约代码检查方法和一种面向数据管控的智能合约代码检查系统。为了解决上述问题,本专利技术实施例提供了一种面向数据管控的智能合约代码检查方法,所述方法包括:预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析;针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令;基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果;根据所述最终分析结果,生成并返回分析报告。可选地,预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析,包括:面向数据使用的管控需求,通过对智能合约编译之后的字节码指令进行分析,定义变量之间的数据依赖类型,即,变量之间的关联类型,包括数据值传递依赖关联和数据控制依赖关联,同时,基于数据使用约束描述方法,定义关联类型和关联类型的计算。可选地,所述数据值传递依赖包括:程序变量与数据源之间的包含依赖关系、赋值依赖关系、算数依赖关系和函数依赖关系,表示数据间的显式信息流传播;所述数据控制依赖,包括程序变量与数据源之间的控制依赖关系,表示数据间的隐式信息流传播。可选地,针对目标合约文件中的目标合约函数,确定污点源,包括:将所述程序输入参数直接标记为所述污点源;遍历控制流图中的所有基本块,找出程序中的合约调用指令,进而将所述合约调用指令标记为所述污点源。可选地,遍历控制流图中的所有基本块,找出程序中的合约调用指令,包括:遍历所有基本块,对于每一个基本块,遍历所有字节码指令,若某条指令类型为“kInstrInvoke”类型,且指令名称包含“dyn:call:executeContract”,表示为动态函数调用指令,且函数名称为“executeContract”,即为合约调用指令。可选地,所述数据值传递依赖分析,包括:将所述控制流图的起始块添加到分析的工作集中,以初始化所述工作集;遍历所述控制流图,取出每一个所述控制流图的节点,判断所述节点出边是否为空,即,判断当前基本块有无后续块;若有后续块,则根据所述节点的类型,使用相应的依赖分析传递函数,所述污点源根据每个基本块中所包含的指令的依赖类型进行传播,同时将所述节点加入所述工作集;当控制流图遍历完成后,返回所述工作集,结束所述数据值传递依赖分析。可选地,所述数据控制传递分析,包括:遍历所述控制流图中所有基本块,找出所述控制流图中所有可跳转的基本块,即,分支块;判断所述控制流图中的各个基本块是否依赖于各个分支块。可选地,判断所述控制流图中的各个基本块是否依赖于各个分支块,包括:通过三重遍历循环,遍历所述控制流图中所有分支块,并获取每个分支块的所有后续块;遍历所述控制流图中所有基本块,并遍历每个基本块所有的后续块,基于深度优先遍历算法DFS,判断所有的后续块是否可达所述控制流图中的某一基本块,若不可达,则所述某一基本块依赖于当前分支块。可选地,所述分析报告包括:分析参数、最终分析结果、合约代码和程序控制流图;其中,所述分析参数包括数据源和数据使用约束类型信息,所述最终分析结果包括数据如何依赖于污点源和是否通过静态分析的最终分析结果。本专利技术实施例还提供了一种面向数据管控的智能合约代码检查系统,所述系统具体包括:算法预设模块,用于预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析;污点源确定模块,用于针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令;静态分析模块,用于基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果;分析报告导出模块,用于根据所述最终分析结果,生成并返回分析报告。从上述技术方案可以看出,本专利技术实施例提供了一种面向数据管控的智能合约代码检查方法和系统,预先定义数据依赖类型及其相关计算,基于特定的数据管控策略来定义数据使用约束并进行静态分析,在静态分析中选择相应的数据使用约束,进而进行相应的数据依赖分析方法,最终返回分析报告,本专利技术实施例基于特定的数据管控策略来定义数据约束并进行静态分析,可以对数据使用约束定义复杂的智能合约代码进行自动化的检查,进而完成面向数据管控的智能合约的自动化审计,在不需要数据所有者亲自对每一笔交易进行审计的前提下,保证面向数据管控的区块链平台上的智能合约的正常运行。附图说明图1是一种面向数据管控的区块链平台的技术架构图;图2是一种基于智能合约的数据隐私保护策略示例图;图3是本专利技术提供的一种面向数据管控的智能合约代码检查方法的步骤流程图;图4是本专利技术实施例提供的一种污点分析处理过程示意图;图5是本专利技术实施例提供的一种多源多汇的静态分析算法流程图;图6本专利技术实施例提供的一种数据值传递依赖分析流程图;本文档来自技高网...

【技术保护点】
1.一种面向数据管控的智能合约代码检查方法,其特征在于,所述方法包括:/n预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析;/n针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令;/n基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果;/n根据所述最终分析结果,生成并返回分析报告。/n

【技术特征摘要】
1.一种面向数据管控的智能合约代码检查方法,其特征在于,所述方法包括:
预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析;
针对目标合约文件中的目标合约函数,确定污点源,所述污点源包括:程序输入参数和合约调用指令;
基于所述静态分析算法,将所述污点源添加到控制流图的起始块执行前的分析结果中,以初始化所述分析结果,通过遍历程序控制流图,选择相应的数据使用约束,进行数据值传递依赖分析和/或数据控制依赖分析,持续地更新执行后的分析结果,最后返回最终分析结果;
根据所述最终分析结果,生成并返回分析报告。


2.根据权利要求1所述的方法,其特征在于,预先定义数据依赖类型和所述数据依赖类型的相关计算,设计基于污点分析的多源多汇的静态分析算法,以用于基于特定的数据管控策略来定义数据使用约束并进行静态分析,包括:
面向数据使用的管控需求,通过对智能合约编译之后的字节码指令进行分析,定义变量之间的数据依赖类型,即,关联类型,包括数据值传递依赖关联和数据控制依赖关联;同时,基于数据类型及其相关计算,给出数据使用约束描述方法。


3.根据权利要求2所述的方法,其特征在于,
所述数据值传递依赖包括:程序变量与数据源之间的包含依赖关系、赋值依赖关系、算数依赖关系和函数依赖关系,表示数据间的显式信息流传播;所述数据控制依赖,包括程序变量与数据源之间的控制依赖关系,表示数据间的隐式信息流传播。


4.根据权利要求1所述的方法,其特征在于,针对目标合约文件中的目标合约函数,确定污点源,包括:
将所述程序输入参数直接标记为所述污点源;遍历控制流图中的所有基本块,找出程序中的合约调用指令,进而将所述合约调用指令标记为所述污点源。


5.根据权利要求4所述的方法,其特征在于,遍历控制流图中的所有基本块,找出程序中的合约调用指令,包括:
遍历所有基本块,对于每一个基本块,遍历所有字节码指令,若某条指令类型为“kInstrInvoke”类型,且指令名称包含“dyn:call:executeContract”,表示为动态函数调用指令,且函数名称为“executeContract”,即为合约调用指令。


6.根据权利要求1所述的...

【专利技术属性】
技术研发人员:蔡华谦黄家梅朱晓旻张舒汇郭京申舒俊宜
申请(专利权)人:北京智融云河科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1