CN101799842A - 一种基于路径的模型检测方法 - Google Patents
一种基于路径的模型检测方法 Download PDFInfo
- Publication number
- CN101799842A CN101799842A CN201010117908A CN201010117908A CN101799842A CN 101799842 A CN101799842 A CN 101799842A CN 201010117908 A CN201010117908 A CN 201010117908A CN 201010117908 A CN201010117908 A CN 201010117908A CN 101799842 A CN101799842 A CN 101799842A
- Authority
- CN
- China
- Prior art keywords
- state
- detected
- node
- state transition
- relation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于路径的模型检测方法,目的是提供一种使得模型检测与待检测系统复杂程度无关,检测难度降低的模型检测方法。技术方案是定义待检测系统的状态;划分操作类型并定义状态转换规则;生成状态转换序列并判定、验证,这一步包括定义状态节点和操作节点、确定初始状态节点、确定初始搜索阈值、随机生成状态转换序列、判定状态转换序列的合法性、检查合法的状态转换序列是否违反属性规范6个步骤。本发明可应用于复杂的待检测系统,减少建模者的工作量,提高模型检测的效率,适用于系统状态空间大甚至无限膨胀,每个操作都可以归为有限个操作类型中的一个,每种类型的操作都可总结出相同的规律的待检测系统。
Description
技术领域
本发明涉及一种模型检测方法,特别涉及一种基于路径的模型检测方法。
背景技术
形式化验证技术使用严格的数学模型分析和验证系统的正确性,在计算机硬件、通信协议、控制系统、安全认证协议等方面有许多成功的应用。模型检测是基于模型的形式化验证的基本方法,是一种对待检测系统进行建模并自动分析验证的技术,最早由E.M.Clarke和E.A.Emerson以及J.P.Queille和J.Sifakis分别独立提出。
模型检测的基本问题是:把待检测系统的行为用严格的形式化语言描述出来,建成待检测系统的抽象模型;针对待检测系统提取出待检测需求,再把待检测需求形式化为用逻辑公式表达的属性规范;再利用模型检测工具验证抽象模型是否满足规范,若不满足,给出违反属性规范的反例。因此模型检测方法要解决的问题是:如何建立抽象模型,如何对抽象模型进行验证。
传统的模型检测方法是基于Kripke结构的,抽象模型是一个由Kripke结构描述的状态转换系统,属性规范是若干时序逻辑公式。Kripke结构描述的是一个非限定状态转换系统,可以用一个图来表示,图中的节点表示系统可以达到的状态,有向边表示状态的迁移。Kripke结构还定义了一个标记函数,标记出每个状态下为真的所有原子命题的集合。时序逻辑公式的语义就是基于Kripke结构进行解释的,Kripke结构在模型检测中负责描述待检测系统的行为。从Kripke状态转换图的初始节点出发,将该结构展开成一棵无限高度的树,树中的每一条路径就是待检测系统的一条状态转换序列,它表示待检测系统可能的一次运行状况。这棵树包含了所有可能的路径。实际应用时,待检测系统的路径往往很多很复杂,展开树的分支较多,计算机的主要工作就是展开这个树,并遍历所有可能的路径,找出是否存在违反属性规范的路径。若存在违反属性规范的路径,则给出该路径。
为了使用模型检测工具进行分析和验证,建模者需要建立待检测系统的Kripke结构模型,并在模型的基础上提出用时序逻辑公式描述的待检测属性。建模者需要将待检测系统运行生命周期可能到达的阶段划分为若干个状态,并明确标示出所有状态下系统的相应属性。这样,计算机才能完成自动搜索并分析验证的工作。
具体来说,传统的模型检测方法有如下几个步骤。
步骤1,建立逻辑系统。根据待检测系统的特点和待检测属性的需要,建立一个完整的一阶逻辑系统,即定义逻辑系统中的函数符号和谓词符号,并给出它们的语义。随后的步骤将基于这个一阶逻辑系统定义状态以及状态转换关系和描述待检测属性,因此,函数符号和谓词符号的定义应当满足待检测系统的特点和待检测属性的需要。
步骤2,构建Kripke状态转换图的节点。把待检测系统的运行过程划分成若干阶段,每个阶段对应待检测系统的一个状态,每个状态对应Kripke状态转换图中的一个节点。在此基础上,定义若干命题,这些命题是基于第一步建立的一阶逻辑系统的,它们的真假反映出每个状态的特征。
步骤3,定义标记函数。标记函数的定义域是状态节点的集合,值域是第二步中定义的所有命题的集合的幂集(一个集合的幂集是指该集合所有子集构成的集合)。给定一个状态,标记函数定义了该状态下所有为真的命题的集合,即定义了每个状态下每个命题的真值。在不同的状态下,这些命题的真值呈现出不同组合。
步骤4,建立状态转换规则,即构建Kripke状态转换图中的有向边。若状态A到状态B有一条有向边,则说明状态A可以转换到状态B。经过前四步建立了一个Kripke结构描述的状态转换图,这就是待检测系统的抽象模型。
步骤5,展开状态转换图并验证。以初始状态节点为根节点,把Kripke状态转换图展开成一棵树,这棵树是无限高度的,每一条从根节点到叶子节点的路径是一条可能的状态转换路径。搜索整棵树,遍历所有的路径,寻找违反待检测属性的路径。如果找到了这样一条路径,则说明待检测系统不满足属性规范,这一条路径就是反例。这一步的工作由计算机完成。
传统的模型检测方法要求建模者归纳出待检测系统所有可能的状态和状态转换关系,即需要建立一张完整的状态转换图,图中包含所有可能的状态和状态转换关系,然后才能交给计算机进行自动验证。有些待检测系统十分复杂,运行阶段变化较多,建模往往可以粗略地估计出待检测系统将会发生怎样的变化,有可能有哪些状态,但却难以把所有状态完整的列举出来。有些情况下状态空间甚至是无限扩张的,根本无法完全列举出来。这增大了模型检测的难度,使得模型检测的应用具有较大的局限性。
发明内容
本发明要解决的技术问题是针对待检测系统复杂或状态空间无限扩张的情况下传统模型检测方法难以应用的问题,提出一种基于路径的模型检测方法,使得模型检测与待检测系统复杂程度无关,降低模型检测的难度。
实际的模型检测工作中,在很多情况下,虽然不能把所有的状态都列举出来,但可以知道状态转换的某些规律。由计算机生成大量的状态转换序列,然后形式化地描述怎样的节点可以出现在这条序列上,序列上的节点必须满足何种关系,计算机及时做出判定,选择合法的状态转换序列并判断是否违反属性规范。所谓合法的状态转换序列是指该状态转换序列所表示的运行状况是待检测系统实际可能发生的。所有合法的状态转换序列构成待检测系统的抽象模型,虽然有很多合法的状态转换序列,但只需从合法的状态转换序列找到存在一条违反属性的序列,则不必再搜索其它所有的路径,这也大大减少了搜索时间,提高了验证的效率。
本发明所涉及的基于路径的模型检测方法,与传统的模型检测方法不同,其建立的抽象模型不是Kripke状态转换图,而是状态转换序列。
本发明的步骤是:
第一步,定义模型状态。根据待检测系统和待检测需求的特点定义待检测系统的状态,这个状态即为待检测系统的抽象模型的状态。一个状态是一个多元组,其中的每一元是一个集合或一个关系,任意一个集合或关系的变化都引发状态的变化。所述集合是待检测系统中与模型检测相关的实体对象,所述关系是这些集合之间的对应关系,关系本质上也是集合。例如在分析操作系统的安全机制时,进程和用户均是实体,所有进程和所有用户分别构成一个集合,一个状态的进程集合和用户集合,就表示该状态下操作系统中所有存在的进程和所有活跃的用户,进程集合与用户集合之间的二元关系,就是进程与所属用户之间的属主关系。随着待检测系统的运行,集合中的元素会发生变化(如操作系统运行过程中用户、进程会发生变化,用户与进程之间的关系也会发生变化),这些变化的集合构成多种组合,每种组合就对应着一个状态,不需要建模者一一列举出来。采用Alloy语言描述状态定义所涉及到的集合和关系,并在此基础上用Alloy语言给出状态的定义。Alloy语言是一种基于一阶逻辑的轻量级的结构化建模语言,它可以用来描述结构和关系,由此构建数学模型,还可以描述形式化的规范,以验证模型是否满足规范。
第二步,划分操作类型并定义状态转换规则。将待检测系统中的一个事件,如操作系统中的登陆和创建新进程,网络协议中收到一个请求或者回应报文等等定义为一个操作,将操作按操作过程是否相同划分为多种操作类型,同一类型的操作具有相同的操作过程。如A用户创建进程A1,B用户创建进程B1,这两个操作具有相同的操作过程,都划归为创建进程类型的操作。
操作能引起集合和关系发生变化,因此能够引起状态发生转换。如创建进程操作使得进程集合中增加一个新的进程,这就引发了状态转换。状态转换规则是规定在每种操作作用下,构成状态的每一元如何发生变化的规则,它由一系列用Alloy语言表达的逻辑公式来描述,每个操作都对应一个逻辑公式。逻辑公式形式是:
该公式的含义是:存在e1,...,en使得公式p(s,s’,e1,...,en)为真。其中s是操作前状态,s’是操作后状态,p是操作类型对应的谓词,每种操作类型都对应一个谓词,由建模者根据操作在待检测系统的实际动作分别定义。谓词至少有两个参数:操作前状态s和操作后状态s’,e1,...,en是额外参数。额外参数操作所涉及的实体对象的标识,每种操作类型对应的谓词拥有特定的额外参数。如创建进程操作类型对应的谓词有两个额外参数e1和e2,其中e1代表父进程,e2代表子进程。
谓词是描述额外参数与s,s’之间的关系以及s和s’之间的关系的一个命题,这个命题是一系列子命题的合取式,命题为真当且仅当所有的子命题为真。子命题分为两类。一类描述额外参数与s和s’之间的关系,如创建进程操作类型对应的谓词有一个额外参数e1,代表父进程,则e1必须是状态s下已经存在的进程,因此应定义子命题:e1∈s.Process(s.Process表示s状态下的进程集合)。另一类描述s和s’之间的关系,即描述构成状态的每个元对应的集合的元素如何变化,如状态定义是一个二元组(A,B),则需要两个子命题来分别描述集合s.A和集合s’.A以及集合s.B和集合s’.B之间的关系(s.A表示状态s下的A集合,s’.A,s.B,s’.B的含义与此类似)。
第三步,生成状态转换序列并判定、验证。采用Alloy语言描述状态转换序列的合法性判定规则、待检测需求的属性规范和搜索阈值,由Alloy Analyzer随机生成大量状态转换序列,根据合法性判定规则选取合法的状态转换序列,并验证状态转换序列是否违反属性规范。Alloy Analyzer是MIT开发的模型分析工具,是基于Alloy的模型分析工具,可以验证Alloy语言描述的模型是否满足属性规范。搜索阈值是指搜索深度,它是一个经验数据,为大于3的奇数,由建模者根据待检测系统的实际情况和应用场景设定。
具体来说,步骤3分为如下几个子步骤:
步骤3.1,定义节点。需要定义两种类型的节点:状态节点和操作节点,其中操作节点根据第二步中划分的操作类型分为多种,每个操作节点都属于其中的一种,这样每个操作节点都对应一种操作类型。
步骤3.2,确定初始状态节点。初始状态节点由建模者根据待检测系统的实际情况和待检测需求确定。如在分析操作系统安全机制时,初始状态下进程集合为空,用户集合中只有一个标准用户和一个管理员用户。
步骤3.3,确定初始搜索阈值a0,令变量a=a0,a0为大于等于3的奇数。
步骤3.4,Alloy Analyzer随机生成一条状态转换序列。以步骤3.2中定义的初始状态节点为头节点随机生成长度为a的状态转换序列,若顺利生成,则继续,若没能顺利生成,令a=a+2,重复3.4。没能顺利生成状态转换序列,说明该长度的状态转换序列已经全部生成完毕,需要把a加2继续生成长度更大的状态转换序列。
步骤3.5,判定状态转换序列的合法性。所有合法的状态转换序列涵盖了待检测系统所有可能的运行状况,构成了待检测系统的抽象模型。同时满足以下两个条件的状态转换序列判定为合法的:
1)状态转换序列中的节点满足状态节点和操作节点交替出现。
2)对于状态转换序列中的任何操作节点op,若其前驱节点为s,后继节点为s’,op所属的操作类型为c,在第二步中定义的状态转换规则中,c对应的谓词为p,设p的额外参数为e1,...,en,则逻辑公式为真。
若状态转换序列不合法则转步骤3.4,若合法则转步骤3.6。
步骤3.6,检查状态转换序列是否违反属性规范。若不违反则转步骤3.4。若违反,则停止运行。此时,就找到了待检测系统中的一条运行路径,在该运行路径下,待检测系统将发生违反待检测需求的状况,这有助于分析出现问题的原因,改进待检测系统的设计缺陷。这一步与传统的模型检测方法的步骤5的区别在于不需要展开状态转换图,只须验证一条状态转换序列(即路径)。
本发明的主要目的是找到一条违反属性规范的合法状态转换序列,当a增大到一定程度,仍然没有发现违反属性规范的合法状态转换序列时,建模者可以根据实践经验判断不存在长度更大的违反属性规范的合法状态转换序列,此时搜索可以终止。
采用本发明可以达到以下技术效果:
1.本发明第一步把状态定义为多元组,多元组的元数和每一元的定义都由用户自由决定,且不需把所有的状态都一一列举出来,具有极大的灵活性,使得本发明可以应用于大量复杂的待检测系统。
2.本发明第二步中只须为每种类型的操作定义相应的谓词,不需要为每一个操作分别定义规则,减少了建模者的工作量。
3.本发明第三步由计算机随机生成大量状态转换序列,建模者无需定义完整的状态转换图,这减轻了建模者的工作负担和难度。所有合法的状态转换序列的集合构成了待检测系统的抽象模型,状态转换序列的生成、合法性判定就是构建抽象模型的过程,本发明把建模和验证的过程紧密的结合在一起,边建模边验证,当找到一条违反属性规范的合法状态转换序列时即停止搜索,而不必生成所有的合法状态转换序列,这大大提高了模型检测的效率。
因此,本发明适用于如下系统的建模与验证:系统状态空间较大甚至无限膨胀,每个操作都可以归为有限个操作类型中的一个,每种类型的操作都可以总结出相同的规律。
附图说明
图1是背景技术模型检测的基本问题描述示意图。
图2是背景技术传统的模型检测方法的流程图。
图3是本发明总体流程图。
图4是本发明总体流程图中第三步的流程图。
具体实施方式
如图1所示,模型检测的基本问题是:把待检测系统的行为用严格的形式化语言描述出来,建成待检测系统的抽象模型;针对待检测系统提取出待检测需求,再把待检测需求形式化为用逻辑公式表达的属性规范;再利用模型检测工具验证抽象模型是否满足规范,若不满足,给出违反属性规范的反例。因此模型检测方法要解决的问题是:如何建立抽象模型,如何对抽象模型进行验证。
图2是背景技术中传统的模型检测方法的基本流程图:
步骤1,建立逻辑系统。
步骤2,构建Kripke状态转换图的节点。
步骤3,定义标记函数。
步骤4,建立状态转换规则,即构建Kripke状态转换图中的有向边。
步骤5,展开状态转换图并验证。
图3是本发明总体流程图:
步骤1,定义模型状态。
步骤2,划分操作类型并定义状态转换规则。
步骤3,生成状态转换序列并判定、验证。
图4是本发明总体流程图中第三步的流程图:
步骤3.1,定义节点。需要定义两种类型的节点:状态节点和操作节点。
步骤3.2,确定初始状态节点。
步骤3.3,确定初始搜索阈值a0,令变量a=a0。
步骤3.4,随机生成状态转换序列。生成一条长度为a的状态转换序列,若顺利生成,则执行3.5,否则,令a=a+2,重复步骤3.4。
步骤3.5,判定状态转换序列的合法性。
若状态转换序列不合法则转步骤3.4,若合法则转步骤3.6。
步骤3.6,检查状态转换序列是否违反属性规范。若不违反则转步骤3.4。若违反,则停止运行。
Claims (4)
1.一种基于路径的模型检测方法,其特征在于包括以下步骤:
第一步,根据待检测系统和待检测需求的特点定义待检测系统的状态,这个状态即为待检测系统的抽象模型的状态;一个状态是一个多元组,其中的每一元是一个集合或一个关系,任意一个集合或关系的变化都引发状态的变化;所述集合是待检测系统中与模型检测相关的实体对象,所述关系是这些集合之间的对应关系,关系本质上也是集合;随着待检测系统的运行,集合中的元素会发生变化,这些变化的集合构成多种组合,每种组合就对应着一个状态;
第二步,划分操作类型并定义状态转换规则:将待检测系统中的一个事件定义为一个操作,将操作按操作过程是否相同划分为多种操作类型,同一类型的操作具有相同的操作过程;操作能引起集合和关系发生变化,因此能够引起状态发生转换;状态转换规则是规定在每种操作作用下,构成状态的每一元如何发生变化的规则,由一系列逻辑公式来描述,每个操作都对应一个逻辑公式;逻辑公式形式是:
该公式的含义是:存在e1,...,en使得公式p(s,s’,e1,...,en)为真;其中s是操作前状态,s’是操作后状态,p是操作类型对应的谓词,谓词至少有两个参数:操作前状态s和操作后状态s’,e1,...,en是额外参数,额外参数是操作所涉及的实体对象的标识;每种操作类型都对应一个谓词,由建模者根据每种操作在待检测系统的实际动作分别定义;谓词是描述额外参数与s,s’之间的关系以及s和s’之间的关系的一个命题,这个命题是一系列子命题的合取式,命题为真当且仅当所有的子命题为真;子命题分为两类,一类描述额外参数与s和s’之间的关系,另一类描述s和s’之间的关系,即描述构成状态的每个元对应的集合的元素如何变化;
第三步,生成状态转换序列并判定、验证:
步骤3.1,定义两种类型的节点:状态节点和操作节点,其中操作节点根据第二步中划分的操作类型分为多种,每个操作节点都属于其中的一种,每个操作节点都对应一种操作类型;
步骤3.2,根据待检测系统的实际情况和待检测需求确定初始状态节点;
步骤3.3,确定初始搜索阈值a0,a0是大于等于3的奇数,令变量a=a0;
步骤3.4,以初始状态节点为头节点,随机生成一条长度为a的状态转换序列,若顺利生成,则继续,否则令a=a+2,重复步骤3.4;
步骤3.5,判定状态转换序列的合法性,同时满足以下两个条件的状态转换序列判定为合法的:
A1)状态转换序列中的节点满足状态节点和操作节点交替出现;
若状态转换序列不合法则转步骤3.4,若合法则转步骤3.6;
步骤3.6,检查状态转换序列是否违反属性规范,若不违反则转步骤3.4;若违反,则停止运行,此时找到了待检测系统中的一条运行路径,在该运行路径下,待检测系统将发生违反待检测需求的状况。
2.如权利要求1所述的一种基于路径的模型检测方法,其特征在于定义模型状态时采用Alloy语言描述状态定义所涉及到的集合和关系,并在此基础上用Alloy语言给出状态的定义。
3.如权利要求1所述的一种基于路径的模型检测方法,其特征在于描述状态转换规则的逻辑公式采用Alloy语言表达。
4.如权利要求1所述的一种基于路径的模型检测方法,其特征在于所述状态转换序列由Alloy Analyzer随机生成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010117908A CN101799842A (zh) | 2010-03-05 | 2010-03-05 | 一种基于路径的模型检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010117908A CN101799842A (zh) | 2010-03-05 | 2010-03-05 | 一种基于路径的模型检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101799842A true CN101799842A (zh) | 2010-08-11 |
Family
ID=42595515
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010117908A Pending CN101799842A (zh) | 2010-03-05 | 2010-03-05 | 一种基于路径的模型检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101799842A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107850879A (zh) * | 2015-08-20 | 2018-03-27 | 西门子公司 | 用于生成工业设施中的切换序列的方法和设备 |
CN109005197A (zh) * | 2018-09-11 | 2018-12-14 | 郑州云海信息技术有限公司 | 一种安全规则的配置方法、装置和计算机可读存储介质 |
-
2010
- 2010-03-05 CN CN201010117908A patent/CN101799842A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107850879A (zh) * | 2015-08-20 | 2018-03-27 | 西门子公司 | 用于生成工业设施中的切换序列的方法和设备 |
US10534338B2 (en) | 2015-08-20 | 2020-01-14 | Siemens Aktiengesellschaft | Method for generating a switching sequence in an industrial system, and device |
CN109005197A (zh) * | 2018-09-11 | 2018-12-14 | 郑州云海信息技术有限公司 | 一种安全规则的配置方法、装置和计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Benedetti | sKizzo: a suite to evaluate and certify QBFs | |
Castellini et al. | SAT-based planning in complex domains: Concurrency, constraints and nondeterminism | |
Hahn et al. | Lazy probabilistic model checking without determinisation | |
Pipatsrisawat et al. | On the power of clause-learning SAT solvers with restarts | |
Abrahám et al. | DTMC model checking by SCC reduction | |
Bulychev et al. | Rewrite-based statistical model checking of WMTL | |
CN109150833A (zh) | 一种基于模型检测的安全协议形式化验证方法 | |
Dams et al. | Abstract interpretation of reactive systems: abstractions preserving $\forall $ CTL*, $\exists $ CTL* and CTL | |
Madhusudan et al. | Efficient decision procedures for heaps using STRAND | |
Ferrara et al. | Treewidth in verification: Local vs. global | |
CN103973511A (zh) | 一种基于消息组合变异的服务脆弱性测试方法 | |
CN105653935A (zh) | 基于pptl3的社交网络系统隐私安全运行时验证方法 | |
Renault et al. | Parallel explicit model checking for generalized Büchi automata | |
Geldenhuys et al. | Larger automata and less work for LTL model checking | |
CN101799842A (zh) | 一种基于路径的模型检测方法 | |
CN103888460B (zh) | 基于状态空间搜索的控制器局域网协议验证方法 | |
Penczek et al. | Traces and logic | |
Murano et al. | Program complexity in hierarchical module checking | |
Baier et al. | Norm functions for probabilistic bisimulations with delays | |
Fan et al. | Automatic abstraction refinement of TR for PDR | |
Yin et al. | Optimizing the sat decision ordering of bounded model checking by structural information | |
CN113052443A (zh) | 一种基于辅助变量法的ddet与relap5耦合的动态特性分析方法 | |
Renya et al. | AADL-based reliability modeling method of cyber-physical systems | |
Wang et al. | Compositional state space reduction using untangled actions | |
Ji et al. | Research on model checking technology of UML |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20100811 |