第二章 模型检测技术简介
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
第二章 模型检测技术简介
(always) , ◇解释为“有时”(Eventually),便得到极小时态逻辑, 命题时态逻辑可以分为分支时态逻辑和线性时态逻辑[47][48]。 2.2.3.1 计算树逻辑(CTL,Computation Tree Logic) 在很多模型检测中所使用的 CTL 就是典型的分支逻辑, 在它里面有 对分支结构进行描述的操作符。CTL 可以描述状态的前后关系和分枝情 况,描述一个状态的基本元素是原子命题符号。公式由原子命题,逻辑 连接符和模态算子组成。CTL 的逻辑连接符包括: (非), (或) , (与), 它的模态算子包括: E ( Exists) ,A ( Always) , X(Next-time), U(Until),F (Future), G (Global)。 2.2.3.2 线性时序逻辑(LTL- Linear Temporal Logis) LTL 公式也由上面三部分组成,不同的是它的模态算子只包括:◇ (Eventually),口(Always)。 CTL*是一种表达力更强、功能更全面的规范描述逻辑,组合 PLTL 和 CTL,因此可以将 LTL 和 CTL 看成 CTL*的子集。 2.2.3.4Büchi 自动机 一个 Büchi 自动机是一个定义在无限输入序列上的自动机, 而不是 处理有穷序列的标准有限状态机。 它接收一个无限输入序列为它的语言 的条件是:一个有穷状态自动机{S, S0, L, T, F}的无穷的运行序列 δ 被接收当且仅当 F 中至少有一个状态无限次地出现。
对一个给定的 CTL 表达式, 模型检测器首先将其转换成由上面三个 算子和逻辑连接符 、 组成的转换形式,然后采取递归策略对其子表 达式进行验证,最后给出全局属性的检验[49]。
2.4.3 OBDD 验证
BDD[50]是 Bryant 在 1986 年提出的一种基于图形的二叉判定图,是 表示和操作布尔函数的有力工具。OBDD 是化简后的 BDD。在没有引入 BDD 之前,模型检验技术所验证的设计规模较小,在把 OBDD 作为模型 检验的数据结构后,模型检验中所有的计算都利用 OBDD 完成,所验证 的设计规模有明显地提高。用 OBDD 验证分为三步:首先用表示状态集 合,然后用 OBDD 表示转移关系,最后计算可达状态。 本质上,用表示各个原子命题满足情况的 OBDD 来计算出表示更复 杂公式满足情况的新 OBDD,验证的过程是用旧 OBDD 计算新 OBDD 的过 程。验证时,我们从被验证公式的最深层的子公式开始验证,一级一级 逐步扩展到验证整个公式。
14
Байду номын сангаас
第二章 模型检测技术简介
语言表示。 对系统属性进行建模, 就是把希望系统将要满足的属性使用特定的 形式进行表达。在模型检测中,通常使用时态逻辑来表示属性,该方法 能够表达系统状态动态变化特性。
2.4 模型检测算法
模型检测算法就是在已建立的系统的有限模型基础上, 对其状态空 间进行探测,确定是否拥有期望的属性。检测结果可确定模型拥有了某 种属性或没有某种属性,如果没有这种属性还要提供一个反例以供调 试。
2.2.3 时态逻辑和其它逻辑
在 计 算 机 科 学 中 , 模 态 逻 辑 (modal logic) 是 关 于 必 然 性 (necessarily,记作□)和可能性(possibly,记作◇)的非经典逻辑, 是经典逻辑的一种扩充。时态逻辑(temporal logic)是由模态逻辑演变 而来的,将时间因素引入模态逻辑,将模态算子口解释为“永远”
2.1 模型检测技术的发展
模型检测经历了很长的发展时间[35], 早在亚里士多德时代就开始了 用自然语言进行时序分析,A.Pnueli 在 1977 年第一个提出对并发程序 的推理使用线性时序逻辑[36]。20 世纪 80 年代初,时序逻辑模型检测算 法的引入使得这种类型的推理可以自动化。 1981 年,卡耐基·梅隆大学的 E .Clarke 和他的博士生 Allen Emerson 首次提出将模型检测技术作为有穷状态并发系统的检测技术, 并提出了第一个模型检测算法,它使用计算树逻辑(CTL)表达式描述系 统的属性, 此算法的复杂度与系统模型的大小和属性的长度呈多项式关 系。此后他们致力于硬件检验技术,开发出了符号模型检验工具 SMV, 他们的研究工作一直处于该领域的领先地位[37]。 Pnueli 和 Lichtenstein[38],分析了检验线性时序逻辑表达式的复 杂度,发现尽管复杂度和规则长度呈指数关系,但与全局状态图的大小 成线性关系。Emerson 和 Lei[39]扩展了他们的结果并且引出了逻辑 CTL* 的表达式。由 Kurshan[40]提出的方法是基于两个自动机的模型检测。第 一个自动机表示了将要被检验的系统,第二个则用来表示它的属性。
2.4.1 LTL 模型检测
表示系统的 Kripke 结构可以直接对应成一个正则ω自动机,用 A 表示,则 L (A)表示了系统所有可能的行为,然后将时序逻辑表达式转 化为 Büchi 自动机,用 S 表示,L(S)表示了该属性下允许的系统行为, 模型检测的过程就是判断是否 L( A) L( S ) ,即判断系统所有行为是否 都属于属性允许的范围。然而求解 L( A) L( S ) 过于困难,便将 L(S)取 补,即表示违背属性的行为,检验过程更改为判断是否为空。为空则表 示系统满足属性,不为空则接受的语言表示了系统对属性可能的违背。
2.4.2 CTL 模型检测
我们可以证明所有的 CTL 公式都可用 、 、EX、EG、EU 来表达, 证明过程略去,因此首先是将所有的 CTL 公式用这些算子来表达,如:
f g (f g )
15
第二章 模型检测技术简介
AXf EX (f ) EFf E[true f ]
2.2 模型检测基本概念
2.2.1 模型检测基本思想
模型检测的基本思想是用状态迁移系统(S)表示系统的行为,用模 态/时序逻辑公式(F)描述系统的性质。这样“系统是否具有所期望的性 质”就转化为数学问题“状态迁移系统 S 是否是公式 F 的一个模型” , 用公式表示为 S|=F,对有穷状态系统,这个问题是可判定的,即可以 用计算机程序在有限时间内自动确定[45]。 模型检测的一般流程是:首先对待检验的系统进行建模,然后使用 一种形式化的语言如时序逻辑表达式来描述系统属性, 最后使用相应的 模型检测分析技术来判断此系统模型是否满足系统属性。 其一般流程如 图 1 所示。 通过图,我们可以看到模型检测一般都包含以下三部分: 1、描述系统的建模语言。 2、描述系统属性的说明语言。 3、一项验证系统满足正确性需求的分析技术。 这里待检验的系统模型一般使用转换系统(Kripke 结构)或者自动 机来描述,而系统的规范、属性则使用时态逻辑表达式或者自动机来表
16
第三章 协议验证器 jlu_PV 及其对软件验证的启发
第三章 协议验证器 jlu_PV 及其对软件验证的启发
jlu_PV 是课题组同学刘吉锋和本人共同开发的安全协议验证器。 其中本人主要承担了解析模块、命题公式构建模块、攻击再现模块的开 发实现。本章在简单介绍 jlu_PV 的基础上,重点介绍 jlu_PV 对软件验 证的借鉴和启发。
17
3.1 jlu_PV 简介
jlu_PV(Jilin University Protocol Verifier)是在导师的指导 下,由我们课题组自行开发的新的基于模型检测的安全协议验证器。在 从 2005 年到 2006 年进行了广泛的资料收集和扎实的理论研究的基础 上,我们在 2006 年下半年开始着手开发,一直到 2007 年初完成调试和 测试,取得了阶段性成果。jlu_PV 采用 C++语言、在 C++ Develop 平台 下开发,在 Linux Fedora Core 5 操作系统平台下完成了测试和比较。 jlu_PV 采用与国际一流的基于 SAT 方法的安全协议模型检测器 SATMC 相似的方法,但却使用一个新的算法,极大的提高了验证的速度。实验 结果表明:与 SATMC、OFMC 和 CL-AtSe 相比, jlu_PV 能够找到相同的 攻击,但在验证速度上全面优于 SATMC,在大多数问题上也优于另外两 个国际一流的安全协议模型检测器 OFMC 和 CL-AtSe。 下面将简单介绍 jlu_PV 的思想、设计开发,重点突出对软件验证 的启发,具体的 jlu_PV 的相关内容和完整的实验结果请参照本课题组 另一位同学刘吉锋的硕士论文 《一个基于 SAT 方法的安全协议模型检测 器》 ,由于篇幅关系,本文就不多作介绍了。
12
第二章 模型检测技术简介
待检验系统
抽象出系统 模型 M
模型满足 验证属性 模型检测 器工具 满足? 模型不满足 验证属性, 给 出反例路径
待验证属性
抽象出验证 属性 s
图 1 模型检测的一般流程 示,下面将分别介绍 Kripke 结构、时态逻辑和自动机。
2.2.2 Kripke 模型
如果一个时态逻辑表达式的含义总是能够由一个有穷状态系统的 带标记的状态转换图来确定, 那么这样的结构就被称为 Kripke 模型[46]。 在模型检测中通常用 Kripke 结构表示系统的各种模型。Kripke 结构是 一个五元组 M= (S, Q, R, AP, L),这里 S 表示状态的有限集合, Q S 是初始状态集合, R S S 是转移关系,AP 是原子命题及其否定的集 合,L:S→2AP 是标号函数,该函数返回在 s S 的所有状态中为真的原 子命题集合。该集合是原子命题集合 AP 的一个子集。 Kripke 结构 M 中的一个路径是一个无限的状态序列。如果 f 是一 个状态表达式,那么符号 M.s|=f 意味着 f 在 M 中的状态 s 时满足。
11
第二章 模型检测技术简介
Vardi 和 Wolper[41]给出了使用自动机的术语来明确表达模型检测问题 的方法,这样,模型检测方法就同 Kurshan 的工作关联起来。 模型检测技术最大的难题是状态空间爆炸问题, 即当被检验系统中 有许多使得状态迁移并行的组件时,系统的状态空间将会急剧增大[42]。 经过一段时间的研究,在 1987 年秋,当时还是卡耐基·梅隆大学研究 生的 McMillan 做出了最初的突破, 采用了有序二叉决策图(OBDDs)来隐 式地表达系统的迁移关系,其他研究者也分别独立的发现了这种方法。 从那时起, 由卡耐基· 梅隆大学的其他研究者提出了各种各样基于 OBDDs 的技术的改进,把能够检测的系统状态数提高到了大于 10120 个[43][44]。
2.3 系统建模和属性建模
对系统建模, 就是将系统转化为一种形式化的模型以便于后面检验 其是否满足给定属性。一般情况下,使用一个转换系统(Transition System)如 Kripke 结构来对系统进行建模。 Kripke 结构 M 的运行可以表示成一个无限状态序列 ρ=s0s1s2……, 其中 s 0 S 0 , si S ,并且对所有的 i N 有 ( s i , s i 1 ) R 。在很多模型 检测程序中,M 用程序(伪)语言、自动机、进程代数、Petri 网等模型
第二章 模型检测技术简介
第二章 模型检测技术简介
模型检测就是用形式化方法精确地证明一个系统能够按照预定目 标正确工作。 模型检测技术是一种对有限状态反应式系统的自动检验技 术,所谓反应式系统就是同环境持续交互的一类系统[34]。模型检测的主 要思想是首先将给定的系统和系统属性分别用有穷状态模型描述出来, 然后采用高效的搜索程序(模型检测器)来判断系统模型是否满足原先 的设计需求(系统属性)。本章介绍了模型检测的发展历程,描述了模型 检测的基本概念、基本思想,重点是介绍了系统和属性建模方面的各种 方法和比较典型且广泛使用的模型检测算法。
第二章 模型检测技术简介
(always) , ◇解释为“有时”(Eventually),便得到极小时态逻辑, 命题时态逻辑可以分为分支时态逻辑和线性时态逻辑[47][48]。 2.2.3.1 计算树逻辑(CTL,Computation Tree Logic) 在很多模型检测中所使用的 CTL 就是典型的分支逻辑, 在它里面有 对分支结构进行描述的操作符。CTL 可以描述状态的前后关系和分枝情 况,描述一个状态的基本元素是原子命题符号。公式由原子命题,逻辑 连接符和模态算子组成。CTL 的逻辑连接符包括: (非), (或) , (与), 它的模态算子包括: E ( Exists) ,A ( Always) , X(Next-time), U(Until),F (Future), G (Global)。 2.2.3.2 线性时序逻辑(LTL- Linear Temporal Logis) LTL 公式也由上面三部分组成,不同的是它的模态算子只包括:◇ (Eventually),口(Always)。 CTL*是一种表达力更强、功能更全面的规范描述逻辑,组合 PLTL 和 CTL,因此可以将 LTL 和 CTL 看成 CTL*的子集。 2.2.3.4Büchi 自动机 一个 Büchi 自动机是一个定义在无限输入序列上的自动机, 而不是 处理有穷序列的标准有限状态机。 它接收一个无限输入序列为它的语言 的条件是:一个有穷状态自动机{S, S0, L, T, F}的无穷的运行序列 δ 被接收当且仅当 F 中至少有一个状态无限次地出现。
对一个给定的 CTL 表达式, 模型检测器首先将其转换成由上面三个 算子和逻辑连接符 、 组成的转换形式,然后采取递归策略对其子表 达式进行验证,最后给出全局属性的检验[49]。
2.4.3 OBDD 验证
BDD[50]是 Bryant 在 1986 年提出的一种基于图形的二叉判定图,是 表示和操作布尔函数的有力工具。OBDD 是化简后的 BDD。在没有引入 BDD 之前,模型检验技术所验证的设计规模较小,在把 OBDD 作为模型 检验的数据结构后,模型检验中所有的计算都利用 OBDD 完成,所验证 的设计规模有明显地提高。用 OBDD 验证分为三步:首先用表示状态集 合,然后用 OBDD 表示转移关系,最后计算可达状态。 本质上,用表示各个原子命题满足情况的 OBDD 来计算出表示更复 杂公式满足情况的新 OBDD,验证的过程是用旧 OBDD 计算新 OBDD 的过 程。验证时,我们从被验证公式的最深层的子公式开始验证,一级一级 逐步扩展到验证整个公式。
14
Байду номын сангаас
第二章 模型检测技术简介
语言表示。 对系统属性进行建模, 就是把希望系统将要满足的属性使用特定的 形式进行表达。在模型检测中,通常使用时态逻辑来表示属性,该方法 能够表达系统状态动态变化特性。
2.4 模型检测算法
模型检测算法就是在已建立的系统的有限模型基础上, 对其状态空 间进行探测,确定是否拥有期望的属性。检测结果可确定模型拥有了某 种属性或没有某种属性,如果没有这种属性还要提供一个反例以供调 试。
2.2.3 时态逻辑和其它逻辑
在 计 算 机 科 学 中 , 模 态 逻 辑 (modal logic) 是 关 于 必 然 性 (necessarily,记作□)和可能性(possibly,记作◇)的非经典逻辑, 是经典逻辑的一种扩充。时态逻辑(temporal logic)是由模态逻辑演变 而来的,将时间因素引入模态逻辑,将模态算子口解释为“永远”
2.1 模型检测技术的发展
模型检测经历了很长的发展时间[35], 早在亚里士多德时代就开始了 用自然语言进行时序分析,A.Pnueli 在 1977 年第一个提出对并发程序 的推理使用线性时序逻辑[36]。20 世纪 80 年代初,时序逻辑模型检测算 法的引入使得这种类型的推理可以自动化。 1981 年,卡耐基·梅隆大学的 E .Clarke 和他的博士生 Allen Emerson 首次提出将模型检测技术作为有穷状态并发系统的检测技术, 并提出了第一个模型检测算法,它使用计算树逻辑(CTL)表达式描述系 统的属性, 此算法的复杂度与系统模型的大小和属性的长度呈多项式关 系。此后他们致力于硬件检验技术,开发出了符号模型检验工具 SMV, 他们的研究工作一直处于该领域的领先地位[37]。 Pnueli 和 Lichtenstein[38],分析了检验线性时序逻辑表达式的复 杂度,发现尽管复杂度和规则长度呈指数关系,但与全局状态图的大小 成线性关系。Emerson 和 Lei[39]扩展了他们的结果并且引出了逻辑 CTL* 的表达式。由 Kurshan[40]提出的方法是基于两个自动机的模型检测。第 一个自动机表示了将要被检验的系统,第二个则用来表示它的属性。
2.4.1 LTL 模型检测
表示系统的 Kripke 结构可以直接对应成一个正则ω自动机,用 A 表示,则 L (A)表示了系统所有可能的行为,然后将时序逻辑表达式转 化为 Büchi 自动机,用 S 表示,L(S)表示了该属性下允许的系统行为, 模型检测的过程就是判断是否 L( A) L( S ) ,即判断系统所有行为是否 都属于属性允许的范围。然而求解 L( A) L( S ) 过于困难,便将 L(S)取 补,即表示违背属性的行为,检验过程更改为判断是否为空。为空则表 示系统满足属性,不为空则接受的语言表示了系统对属性可能的违背。
2.4.2 CTL 模型检测
我们可以证明所有的 CTL 公式都可用 、 、EX、EG、EU 来表达, 证明过程略去,因此首先是将所有的 CTL 公式用这些算子来表达,如:
f g (f g )
15
第二章 模型检测技术简介
AXf EX (f ) EFf E[true f ]
2.2 模型检测基本概念
2.2.1 模型检测基本思想
模型检测的基本思想是用状态迁移系统(S)表示系统的行为,用模 态/时序逻辑公式(F)描述系统的性质。这样“系统是否具有所期望的性 质”就转化为数学问题“状态迁移系统 S 是否是公式 F 的一个模型” , 用公式表示为 S|=F,对有穷状态系统,这个问题是可判定的,即可以 用计算机程序在有限时间内自动确定[45]。 模型检测的一般流程是:首先对待检验的系统进行建模,然后使用 一种形式化的语言如时序逻辑表达式来描述系统属性, 最后使用相应的 模型检测分析技术来判断此系统模型是否满足系统属性。 其一般流程如 图 1 所示。 通过图,我们可以看到模型检测一般都包含以下三部分: 1、描述系统的建模语言。 2、描述系统属性的说明语言。 3、一项验证系统满足正确性需求的分析技术。 这里待检验的系统模型一般使用转换系统(Kripke 结构)或者自动 机来描述,而系统的规范、属性则使用时态逻辑表达式或者自动机来表
16
第三章 协议验证器 jlu_PV 及其对软件验证的启发
第三章 协议验证器 jlu_PV 及其对软件验证的启发
jlu_PV 是课题组同学刘吉锋和本人共同开发的安全协议验证器。 其中本人主要承担了解析模块、命题公式构建模块、攻击再现模块的开 发实现。本章在简单介绍 jlu_PV 的基础上,重点介绍 jlu_PV 对软件验 证的借鉴和启发。
17
3.1 jlu_PV 简介
jlu_PV(Jilin University Protocol Verifier)是在导师的指导 下,由我们课题组自行开发的新的基于模型检测的安全协议验证器。在 从 2005 年到 2006 年进行了广泛的资料收集和扎实的理论研究的基础 上,我们在 2006 年下半年开始着手开发,一直到 2007 年初完成调试和 测试,取得了阶段性成果。jlu_PV 采用 C++语言、在 C++ Develop 平台 下开发,在 Linux Fedora Core 5 操作系统平台下完成了测试和比较。 jlu_PV 采用与国际一流的基于 SAT 方法的安全协议模型检测器 SATMC 相似的方法,但却使用一个新的算法,极大的提高了验证的速度。实验 结果表明:与 SATMC、OFMC 和 CL-AtSe 相比, jlu_PV 能够找到相同的 攻击,但在验证速度上全面优于 SATMC,在大多数问题上也优于另外两 个国际一流的安全协议模型检测器 OFMC 和 CL-AtSe。 下面将简单介绍 jlu_PV 的思想、设计开发,重点突出对软件验证 的启发,具体的 jlu_PV 的相关内容和完整的实验结果请参照本课题组 另一位同学刘吉锋的硕士论文 《一个基于 SAT 方法的安全协议模型检测 器》 ,由于篇幅关系,本文就不多作介绍了。
12
第二章 模型检测技术简介
待检验系统
抽象出系统 模型 M
模型满足 验证属性 模型检测 器工具 满足? 模型不满足 验证属性, 给 出反例路径
待验证属性
抽象出验证 属性 s
图 1 模型检测的一般流程 示,下面将分别介绍 Kripke 结构、时态逻辑和自动机。
2.2.2 Kripke 模型
如果一个时态逻辑表达式的含义总是能够由一个有穷状态系统的 带标记的状态转换图来确定, 那么这样的结构就被称为 Kripke 模型[46]。 在模型检测中通常用 Kripke 结构表示系统的各种模型。Kripke 结构是 一个五元组 M= (S, Q, R, AP, L),这里 S 表示状态的有限集合, Q S 是初始状态集合, R S S 是转移关系,AP 是原子命题及其否定的集 合,L:S→2AP 是标号函数,该函数返回在 s S 的所有状态中为真的原 子命题集合。该集合是原子命题集合 AP 的一个子集。 Kripke 结构 M 中的一个路径是一个无限的状态序列。如果 f 是一 个状态表达式,那么符号 M.s|=f 意味着 f 在 M 中的状态 s 时满足。
11
第二章 模型检测技术简介
Vardi 和 Wolper[41]给出了使用自动机的术语来明确表达模型检测问题 的方法,这样,模型检测方法就同 Kurshan 的工作关联起来。 模型检测技术最大的难题是状态空间爆炸问题, 即当被检验系统中 有许多使得状态迁移并行的组件时,系统的状态空间将会急剧增大[42]。 经过一段时间的研究,在 1987 年秋,当时还是卡耐基·梅隆大学研究 生的 McMillan 做出了最初的突破, 采用了有序二叉决策图(OBDDs)来隐 式地表达系统的迁移关系,其他研究者也分别独立的发现了这种方法。 从那时起, 由卡耐基· 梅隆大学的其他研究者提出了各种各样基于 OBDDs 的技术的改进,把能够检测的系统状态数提高到了大于 10120 个[43][44]。
2.3 系统建模和属性建模
对系统建模, 就是将系统转化为一种形式化的模型以便于后面检验 其是否满足给定属性。一般情况下,使用一个转换系统(Transition System)如 Kripke 结构来对系统进行建模。 Kripke 结构 M 的运行可以表示成一个无限状态序列 ρ=s0s1s2……, 其中 s 0 S 0 , si S ,并且对所有的 i N 有 ( s i , s i 1 ) R 。在很多模型 检测程序中,M 用程序(伪)语言、自动机、进程代数、Petri 网等模型
第二章 模型检测技术简介
第二章 模型检测技术简介
模型检测就是用形式化方法精确地证明一个系统能够按照预定目 标正确工作。 模型检测技术是一种对有限状态反应式系统的自动检验技 术,所谓反应式系统就是同环境持续交互的一类系统[34]。模型检测的主 要思想是首先将给定的系统和系统属性分别用有穷状态模型描述出来, 然后采用高效的搜索程序(模型检测器)来判断系统模型是否满足原先 的设计需求(系统属性)。本章介绍了模型检测的发展历程,描述了模型 检测的基本概念、基本思想,重点是介绍了系统和属性建模方面的各种 方法和比较典型且广泛使用的模型检测算法。