一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于HCPN的智能合约安全模式形式化与验证方法

2022-06-15 23:11:07 来源:中国专利 TAG:

一种基于hcpn的智能合约安全模式形式化与验证方法
技术领域
1.本技术属于智能合约技术领域,尤其涉及一种基于hcpn的智能合约安全模式形式化与验证方法。


背景技术:

2.智能合约是跨区块链网络运行的一个自动可执行的程序。由于区块链网络在理论上是安全的,攻击者只能利用漏洞来攻击智能合约。众所周知的the dao智能合约攻击是利用递归调用的漏洞来攻击智能合约的,最终导致了近60亿美元的损失。从那时起,保护智能合约已成为本领域的一个重要课题,出现并开发了各种分析工具来检测漏洞。
3.weiqin zou、david lo等人通过实验证明:1、没有有力有效的方法来保证智能合约代码的安全;2、现有的开发工具仍然非常基础;3、编程语言和虚拟机仍然有许多限制;4、在资源受限的运行环境下,性能问题难以处理;5、在线资源(包括高级的/更新的文档或者社区支持)仍然有限。也就是说,检查智能合约的现有的漏洞使用分析工具是不足以保证智能合约的正确性和安全性的。由于工具的局限性,需要保证智能合约的正确性和可靠性在开发阶段通过一些安全模式。国外的多次会议描述了一套安全模式和良好实践,开发人员可以遵循这些模式来提高其代码的可靠性,并提前避免漏洞,比如wohrer m,zdun u他们从不同的来源收集数据,以回答他们关于稳固性中常见代码模式的问题,以及这些模式可以通过这些模式解决哪些问题,然后,他们使用扎根理论技术来分析他们收集到的数据,并提出了六种基于可靠性语言的安全模式,他们详细描述了安全模式,并以坚固性的例子说明了它们。
4.然而,这些模式已经在文本描述中呈现出来,并且缺乏正式的公式,这使得它们无法在源代码中检测它们的实现。此外,由于业务逻辑的复杂性和智能合约的特点,这使得开发人员更难遵循特定的说明。
5.nejczupan等人和wen hu等人介绍了他们的安全工作,通过建模和验证模型来生成一个安全的智能合约。还有zhentian liu、jing liu、wang duo和xudong he等人使用cpn建模作为智能合约的正式验证,但是它们没有提供正式的属性或所需的属性,也没有提供安全模式。


技术实现要素:

6.本技术的目的是提供一种基于hcpn的智能合约安全模式形式化与验证方法,以针对上述目前学者研究的不足。
7.为了实现上述目的,本技术技术方案如下:
8.一种基于hcpn的智能合约安全模式形式化与验证方法,包括:
9.将智能合约的安全模式采用提交展示方法转换为bpmn模型,通过预设映射规则,将bpmn模型转换为cpn模型,分析cpn模型生成第一状态空间报告;
10.盲拍智能合约,将智能合约源代码转换为hcpn模型,分析hcpn模型生成第二状态
空间报告;
11.分别将第一、第二状态空间报告描述为一组属性,使用ask-ctl公式将所述一组属性表述为一个sml函数,运行所述sml函数,根据运行结果验证所述智能合约是否遵循所述安全模式。
12.进一步的,所述基于hcpn的智能合约安全模式形式化与验证方法,还包括:
13.采用ask-ctl查询来查询是否没有死锁标记、没有活节、没有自环终端标记。
14.进一步的,所述分析cpn模型生成第一状态空间报告,包括:
15.在主要输入位置两个库所start和req中添加了标记作为初始标记。
16.进一步的,所述分析hcpn模型生成第二状态空间报告,包括:
17.在主要输入位置四个库所start、breq、rreq和rwithd中添加了标记作为初始标记。
18.本技术提出的一种基于hcpn的智能合约安全模式形式化与验证方法,将commit-reveal提交-揭示模式的预期行为描述为ask-ctl/sml公式,然后使用cpn工具检查其在盲拍合约中的实现,而这有助于发现代码中的错误和漏洞。本技术在未来将为开发人员的分析提供更多的安全模式,便于开发人员的访问和理解,便于调查在智能合约环境中被滥用的安全模式,将原本不易的通过映射规则进行建模的方式变为自动建模过程。
附图说明
19.图1为本技术基于hcpn的智能合约安全模式形式化与验证方法流程图;
20.图2为本技术bpmn模型示意图;
21.图3为本技术实施例状态空间报告示意图;
22.图4为本技术实施例ask-ctl/sml结果示意图。
具体实施方式
23.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本技术,并不用于限定本技术。
24.在一个实施例中,如图1所示,提出了一种基于hcpn的智能合约安全模式形式化与验证方法,包括:
25.步骤s1、将智能合约的安全模式采用提交展示方法转换为bpmn模型,通过预设映射规则,将bpmn模型转换为cpn模型,分析cpn模型生成第一状态空间报告。
26.wohrerm.和zdunu.曾将安全模式规则定义为“应用一个承诺方案,以确保价值提交是绑定和隐藏的,直到合并阶段结束,之后价值被揭示,并可公开验证该价值保持不变”。安全模式的非正式描述分为三个阶段:在第一阶段(commit阶段)为提交的数据提交一个加密的值和一个盐,第二阶段(reveal展示阶段),显示原始数据,即重新提交原始数据和盐。最后将初始提交的数据与原始数据进行匹配,直到两者匹配成功。
27.本技术将安全模式这种非正式的描述转换为一个bpmn模型(业务流程建模与标记),如图2所示,该模型用两个类矩形表示安全模式的两个阶段,每个阶段都有两个活动,从时钟判断开始,将判断它是在提交阶段还是显示阶段,然后再对两阶段的值一致性验证。
28.然后,利用dechsupa c,vatanawood w和meghzili s,chaoui a各自所提到的映射规则,将缺乏形式化语义的bpmn模型转换为cpn模型,添加一些具体的对象来作为一系列的描述。cpn模型从start位置开始(其颜色集:(intxintxstringxint)分别表示提交时间、显示时间、地址和合约的帐号)和req位置(其颜色集:(stringxintxint)分别表示用户的地址、帐号和请求时间)。
29.为了进行模拟,本技术将commit提交阶段由commit变迁和hashv库所表示。reveal阶段由reveal变迁、actualv库所和match变迁来表示。本技术添加了一个time-out变迁来表示无效的时间(在提交阶段之前或显示阶段之后提交)。在主要输入位置两个库所(start和req)中添加了标记作为初始标记。然后,根据模型统计相关节点数生成第一状态空间报告。
30.在一个具体的实施例中,如图3所示,给出了一个状态空间报告的实例,该报告显示了21个节点(nodes)和23个弧(arcs),这意味着该模型是有限且有界的。scc graph字段中的相同的数字意味着没有循环。最后一个节点21是死标记(dead marking),而未验证的是死变迁(模型和其他变迁仍存活),这意味着模型被终止并有限执行。因此,该模型是正确的和安全的,这意味着变迁在每个无限发射序列中无限地经常发生。
31.步骤s2、盲拍智能合约,将智能合约源代码转换为hcpn模型,分析hcpn模型生成第二状态空间报告。
32.本步骤在盲拍智能合约的实际环境中,给智能合约建模。为了达到正式的验证目的,需要一个正式的模型,本实施例使用层次着色petri网(hcpn)建模来表示合约代码。hcpn用于表示和隔离代码中的每个函数,它可以针对单个函数和局部变量,而不是其他变量,这在模型中提供了多层次的细节。
33.利用一套映射规则,通过扩展由dedova a,petrucci l.引入的规则,将solidity合约转换为hcpn模型。这些规则如下:
34.1)、阅读合约代码,并了解代码的结构和流程。
35.2)、将代码的内容区分为:数据类型、全局/局部变量、状态、函数、表达式语句和条件语句。
36.3)、对于顶层建模:库所对象(圆形节点)代表主要参与者(例如breq和rreq),变迁对象(方块)代表函数(例如constructor和bids),库所之间的连接代表中间状态,颜色集代表数据类型。
37.4)、对于底层建模,展开函数变迁。每个表达式语句都通过库所来表示变迁和链接,有向弧代表变迁的输入/输出。
38.5)、将代码在cpn ml语言中的数据类型对应为相同的类型,并用等效的类型来补偿未定义的类型(例如,地址类型被定义为一个字符串)。复杂数据类型被定义为具有简单数据类型的复合(元组)。
39.6)、if-语句和任何其他条件语句由一个库所和两个变迁表示;这些条件代表都处在变迁的保护范围中。
40.基于上述规则,从solidity网站(v0.8.7文档)中构建了一个盲目拍卖合约的模型。在盲拍合约场景中,投标者在投标期间发送他们的出价的哈希值。然后,他们揭示了其投标在披露期间的实际价值。最后,该模型通过比较哈希值与实际值来验证投标结果,这就
markings为死节点链表,number of dead markings为死节点标记数。当死节点标记数相同时,则认为结果相同。
64.通过比较两个状态空间报告的sml函数运行结果,若结果相同,就认为智能合约遵循所述安全模式,也就是可以遵循该安全模式自动化判断智能合约是否安全。反之认为安全模式是失败的,无法用于智能合约安全性验证。
65.此外,在一个具体的实施例中,还包括:采用ask-ctl查询来查询是否没有死锁标记、没有活节、没有自环终端标记等其他特性,用于两组的对比判断和对比的终止判断。
66.ask-ctl查询细节如下:
67.funstartn=(m ark
·
coin

sender1n=[(”0x00a”,30),
[0068]
(”0x00a”,30),(”0x00a”,30),(”0x00b”,30)]
[0069]
andalsom ark
·
coin

start1n=[(”0x00c”,0)]
[0070]
andalsom ark
·
coin

minter1n=[]
[0071]
andalsom ark
·
coin

receiver1n=[(”0x00s”,0)]
[0072]
andalsom ark
·
coin

caller1n=[(”0x00w”,40)]
[0073]
andalsom ark
·
coin

coinm1n=[]
[0074]
andalsom ark
·
coin

t x1n=[]
[0075]
andalsom ark
·
coin

error1n=[]);
[0076]
fungoaln=(m ark
·
coin

sender1n=[]
[0077]
andalsom ark
·
coin

start1n=[]
[0078]
andalsom ark
·
coin

minter1n=[]
[0079]
andalsom ark
·
coin

receiver1n=[(”0x00b”,60)]
[0080]
andalsom ark
·
coin

caller1n=[(”0x00w”,10)]
[0081]
andalsom ark
·
coin

coinm1n=[]
[0082]
andalsom ark
·
coin

t x1n=[(”0x00w”,”0x00s”,30)]
[0083]
andalsom ark
·
coin

error1n=[]);
[0084]
valmyaskct lformula=(inv(or(nf(”start”,start),
[0085]
ev(nf(”goal”,goal)))));
[0086]
evalnodemyaskct lformulainitnode;
[0087]
根据查询结果,如果两组数据相同并且没有死锁标记、没有活节、没有自环终端标记,即循环终止,那么智能合约遵安全模式。
[0088]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献