保护程序的方法

文档序号:9383071阅读:362来源:国知局
保护程序的方法
【专利说明】保护程序的方法
[0001] 本发明涉及一种保护程序的方法及实施了该方法的计算机软件产品。
[0002] 保护程序在本文件中应理解为,为了保证与规格,或者运行限制,或者其他被证明 是正确的(本地)属性(如下文定义)一致而编写的程序。
[0003] 因此,例如,在系统自动控制设备中,比如一枚火箭,一辆火车......为了避免危 及其系统或环境,确保程序完全在其运行范围内执行是必要的。
[0004] 这在复杂的系统中特别重要因为,由于其复杂性,很难通过专家分析。这种困难可 能由ArianV火箭首次飞行期间发生的意外所说明,经过鉴定,发现是由于推力发动机控制 电脑的问题.事实上,后者是为上一代威力较小,加速度强度也较小的ArianeIV火箭开发 的。此计算机转移到ArianeV火箭上没有考虑这个新的参数,导致电脑接收加速信息,加速 信息触发了意料之外的寄存器溢出及引擎控制系统的故障。
[0005] 因此,对于执行域以及对于在该域执行被完美定义,归档及认证对于严苛的系统 对于显得非常重要。
[0006]目前采用的技术主要是基于一阶逻辑或高阶逻辑的数学规则,例如,质量成本 (Coq)。他们存在于使用软件工具以使用特定的编程语言试图在数学意义上证明。这些软 件程序在文献中被称为〃检验器"。
[0007] 这些检验器的运行根本上主要在于将学习程序转录为待证逻辑判断(如"证明责 任")。另一种可能性是为了描述程序,使用逻辑语言本身,如Coq,表示属性和证明,从而避 免了转化为逻辑断言的需要。
[0008] 然而,在算法意义上检索逻辑证据的复杂性的提高速度大于研究程序的复杂性。 在计算机辅助证明时,为了引导检验器,用户发现很难使用直觉良好的运行程序。这些技 术因此,在等严苛和复杂的程序上运行时,例如控制计划和/或复杂的系统,涉及安全的工 作,变得非常困难并且造成时间和资源的大量消耗。因此,当该需求变得越来越重要,并且 研究团队已经在这个课题上工作了至少30年,这些证明技术仍然维持在实验室或者被用 于对运行安全具有极端苛刻要求的领域,如航天、铁路。因此,在本案例中,一个软件工程使 得将这些程序切分成可以由检验器管理的组件。
[0009] 其因此有利于获得一种可以在复杂程序上采纳使用的保护程序的方法。从现在开 始,〃证明〃一词(或〃形式证明〃)将作为〃形式验证〃的同义词使用,如,基于常规方法 的验证,以及单词"逻辑验证"在经典逻辑系统中(predicate逻辑、高阶逻辑)的特殊情况。 [0010] 为了解决一个或多个上述的缺点,一种保护第一程序的方法,该第一程序包含一 定数量的程序点,以及与程序点相关的演化规则,并且一程序点到另一程序点定义段落,包 括:
[0011] ?-多退出退出情况的定义,以及,当第二程序在第一程序的定义上被使用/请 求,就每一个第二程序的退出,朝向第一程序特定程序点的一分支的定义,或者一个分支不 可能性的声明;以及
[0012] ---组待证属性的定义,每个关联到一个或多个第一程序的基本元素,所述属性 组包含一个作为特定属性的不可能分支;
[0013] ?该属性组的形式证明的建立。
[0014] 因此,通过使用本质上包含在程序中的路径逻辑,使降低检验器将要执行的片段 的尺寸及复杂程度成为可能。
[0015] 这些特征或特定的实施例可以单独或组合使用,如下:
[0016] ?演化规则、退出点和定义执行轨迹或逻辑轨迹的树形结构的分支(即定义树状 结构的执行跟踪或逻辑轨迹(如每个逻辑轨道代表一通常有限的执行轨迹组与案例与分 支的同样选择相对应),一检验器使用已创建的树形结构在第一程序的点传播限制,并且使 用程序中明示或暗示同余的传递闭包(如可传递同余闭包)用以证明至少一个的第一个程 序的属性(即为了保护第一程序);
[0017] ?第一程序包含一个循环,一检验器,自动在一个程序点引导其通过使用与潜在近 似版本的执行路线生成一个常量,其中代表循环执行的部分已经被类似的步骤代替;
[0018] ?-个分支,声明为"不可能"通过分析通往转移的树形结构路线图得以证明
[0019] ?对第一程序的保护是基于对第三程序展示与第一程序的功能区别,和(或)不只 是单纯的第一程序的摘要;
[0020] ?建立在至少一个第一程序的本地属性(如与程序组件相关联的属性,包括潜在 的程序本身)以及至少一个第三程序的本地属性之间的定向对应,即充分关系,这样证明 一第一程序的一本地属性,只要该对应关系存在,与第一程序属性对应的第三程序的属性 组的证明就是充分的。
[0021] ?第三程序被修改转化,使它能够获得第一程序,这样第一程序的保护是基于第三 程序的保护的;
[0022] ?第一程序被修改转化,使它能够获得第三程序,这样第一程序的保护是基于第三 程序的保护的;
[0023] ?第一程序被修改转化,使它能够获得第三程序,并且定向于第一和第三程序至少 一个相关属性之间建立多个充分关系;
[0024] ?第一程序被修改转化,使它能够获得第三程序,并且在第一和第三程序至少一个 相关属性之间建立多个充分关系;
[0025] ?至少一个第三程序的变量通过取自于第一程序变量的(逻辑)值被实例化,用 以在第一程序和第三程序之间创建至少一个充分关系;或作为一种保护第一程序的方法和 (或)
[0026] ?至少一个属性是由第四程序定义的。
[0027] 根据本发明的第二方面,一种计算机软件产品,包括当所述计算机软件产品在计 算机上运行时实现上述方法的软件说明。
[0028] 在特定实施例中,可单独使用或组合使用;
[0029] ?退出退出情况其包括一用户界面,采用了允许用户定义退出退出情况和关联分 支以及待证属性的;
[0030] ?该用户界面被调整为可以定义一不可能分支;和(或)
[0031] ?用户界面被调整为可以定义一特定分支的入口条件以及限制退出退出情况。
[0032] ?该工具以利用一些不可能转换或本地已被证明的属性的事实的一方法生成执行 代码,以最优化生成的代码。
[0033] 本发明将在阅读以下通过举例和引用配套图的说明后被更好的理解,其中:
[0034] -图1是一计算机系统实施本发明一个实施示例图,和
[0035] -图2是一个运行本发明一个实施例的流程图。
[0036] 事先说明,值得注意的是,下文中,为了澄清的词汇、术语〃程序〃或〃程序保障〃 或者"待证的程序"将专门用于指代被保护计算机软件。其他参与或执行保护方法步骤的 计算机软件将被称为〃软件〃或者〃计算机软件〃或者〃软件工具"。
[0037] 参照图1,一计算机系统1包括用以计算和存储的方法3,以及人机接口设备5,通 常的屏幕类型、键盘和鼠标。它还包括以硬盘形式、固态硬盘或其他经典数据储存形式的存 储方法7。
[0038] 人机界面被调整为允许一用户给予运行在计算机系统1的计算机软件指令,并查 看该软件所提供的分析结果。
[0039] 人机接口 5的形式为一带有相关的工具的程序开发环境。因此,它包含文本编辑 类型、解析器、编译器等软件。写在Java中的Eclipse环境就是这样一种环境的例子。
[0040] 在保护方法的第一步骤中,步骤11,一程序在人机界面被介绍给用户。此程序被以 经典的以包含指令的文字文件方式介绍,或者执行一种高级语言排序控制的形式。虽然其 在此后会被表现,某些语言相比其他语言更适合执行该保护方法,程序可以是已经通过通 常编程语言如 C,C++,ADA,Java,Php,Erlang,Python,assembler 等编写的。
[0041 ] 值得注意的是该方法也可以适用更多的状态机器类型的图形语言。
[0042] 该程序通常由一组运行命令组成,每个命令都代表性的与一个程序点关联。这些 命令通过结构指令进行组合,例如选择(〃if. . . then. . . else"),循环("while. . . do〃)等。 结构也可以以图形方式表示。分支以及与程序点相关的注释通常可以被考虑作为给定程序 点的演化规则。
[0043] 值得注意的,对程序的这一定义使其具有递归的可能:需要保护的第一程序在第 二程序等中被使用/引用。
[0044] 对于一个程序/子程序或运行的命令,运行范围及执行限制以及步骤13中定义的 关联的分支。
[0045] -运行时约束包括在定义一个域中的程序,命令具有均匀的行为。例如,在一个运 行的命令或程序在除法组成的简单的例子中,两个域被自然的定义:正常执行,除数等于 零。每个域是与特定的程序关联,并定义该分支后的分支。例如,正常执行会导致以下命令 中的程序的执行,其中该命令是根据该程序的"正常"的结构中使用,而在所述除数等于零 的情况下会导致另一种类型的分支,例如错误,特殊处理的分支.每个运行时约束和其相 关的分支,因此定义一个路径规则。这通常导致定义的程序有多个退出退出情况。这样定 义的程序,如果在第二程序中使用会因此有关联到在第二程序分支的退出退出情况。
[0046] 这些路径规则的定义可能以不同的方式进行。
[0047] 第一种方式存在于程序的人机界面和/或编程语言提供工具;允许用户"手动"定 义这些路径规则。
[0048] 第二种方式包括存在于使用库和序列识别软件,它将自动定义这些路径规则。例 如,此识别软件可搜索如上述定义的包含在程序内部的除法并且应用该路径规则于其中。
[0049] 第三种方式,那这将最进一步说明,存在于每个程序或每个有限数量退出退出情 况的命令的定义,例如只在使用的时候选择相关的案例(而其他的在这里被称为不可能案 例或分支,并且分支与相关案例对应.
[0050] 在第步骤15中,案例的序列的逻辑树状结构被用以简化或证明目的。树形结构是 根据顺序以及相关的分支处理执行(案例为了一个命令或程序被提取),树形结构表示一 组执行轨迹或路线或之后的一套逻辑轨迹,每条逻辑轨迹代表一个通常有限的对应相同选 择的案例(和分支)的执行轨迹组。任何其他证明的方式也可用于证明本地属性或不可能 分支。
[0051] 为了重申除法的例子,关联的树形结构包含代表两条执行轨迹的弧线:正常的执 行和错误执行。
[0052] 值得注意的是,树状结构是考虑到程序结构逻辑而创建的。其优势在于,就纯粹扁 平化的逻辑的实质上极大地限制了树的结构复杂性。如果在例子中,在进行除法之前,程序 进行一次除数是否为零的测试,对应除数为零的错误处理程序弧线将不被生成,或者被删 除,因为其"不可能"发生。
[0053] 当该程序包括一个循环,则可能是一个无限的树结构或树结构是通过识别不循环 的路径和重复可能由循环改变的复制变量的定义执行轨迹的上定义一不变量来创造的。这 使得有可能此第二种情况下创建一树结构,由图标而非循环所定义。
[0054] 因此,有利的是,该人机界面使其能够定义,或识别软件定义,两个序列之间一个 不可能的过渡。实际上,这使得有可能定义一个局部特征,这就是说,程序在这个执行场所 的过渡是不可能的,而且此外允许减少树结构考虑到没有必要开发"不可能"的弧。同样 地,人们可以表达和证明一个过渡是不可能的,可以声明或证明更一般地一个子图是不可 能的(这就是说,它不能使用),以及一个也可以注释局部特性的更典型的程序(例如弗洛 伊德),其必须得到证明。
[0055] 在除法的例子中,有趣的是,用户界面使得能够定义,或该识别软件定义特定节目 片段的进入条件,以限制上述片段的执行域。
[0056] 在步骤17中,如果还有一些有待证明的特征,特别是声明不可能和不能的分支验 证,则该方法返回到步骤11,或者完成哪些没有定义的执行路径,或修改程序的逻辑从而使 禁止模式不能出现。
[0057] 为了进行这项树结构的分析,试验应使用创建的树结构在程序点传送限制条件, 并使用传递闭包和一致性的特性或删除无用分支功能并带来,或促成,该程序顺利运行的 形式证明。
[0058] 值得注意的是该程序完全安全,有必要证明/表明,对于每个已被声明为"不可 能"的图像的转换无论在什么执行条件下都不能在程序执行中采用。在紧要时刻导致"不 可能"的转换的路径的分析通常可为证明其的一方法。如果使用其他更经典局部特性,如不 变量时,它们也自然应该证明。
[0059] 值得注意的是,当第一程序已被保护或验证,如果要保护的程序可通过不断的语 义转换,比如再现所述第一程序的结构,进行修改,则第一个程序的验证要被传播到要被保 护的程序中。这可以特别用于前述识别软件。此外,更常见,两个程序等效为了使用一个用 于另一个的验证是不必须的。更宽松的特性可用于该目的。
[0060] 为了更好地理解这个计算机软件和执行方法的操作,现在将使用实施例。
[0061] 1.描述性语言介绍
[0062] 为了便于理解,将推出一个称为SM的算法描述语言。这使得很容易表达由该实施 例实现的不同原理成为可能。然而,值得注意的是,任何计算机语言也可作为用于本发明的 实施的基础。
[0063] 尽管它们将以SM的语言举例,下文描述的实施例旨在用于以非常多样的语言或 形式编写程序程序,无论是否是例如执行语言、逻辑或规范语言,图形语言。它简单地假设, 这种语言可设置有在一定条件下的语义,例如当程序是可执行时的操作语,但这种语言也 典型地具有逻辑性状,例如全称或存在量词。碰巧的是SM语言的情况下,然而,它的各方面 既不引入也不用于这里。这里,其将被简单地和一般假定形式化的描述(语言或形式)可 以转化成一个如后述(第2. 1段)的带注释图和潜在的呈现"叉状"和"联接"使得可以描 述并行性和/或并发性。为简单起见,与逻辑量词的组合将不会在这里阐述和SM同步和并 行基元将不会被引入。
[0064] 作为一个例子,SM语言的子集在此阐明使用一个FIFO队列的一些基元,被称为 "seq"。
[0065] 让我们首先考虑在以下序列中定义的程序"成员":
[0066]
[0067]
[0068] 如在相反的情况下果它发现该元素元素和"false",程序"成员"在序列"e"搜索 一个值元素"X"并返回" true "。程序"成员"开始于将" e "的数值放于变量" f",然后扫描 "f"在搜索具有搜寻价值的第一元素中使用一循环。
[0069] I. 1退出情况
[0070] 该程序,按照惯例主要情况下,如果该元素被发现,通常通过退出"true"中止元 素,并在相反的情况下特定退出"false"。所有的程序都有一个隐含的"ture"退出,并可能 此外(它是语言的特殊性)包括不少于所需的特定退出情况。这些退出的情况可采用所希 望的名称。所谓的"error"的情况下被限制用于说明如后面所示的一退出或分支的假定的 不可能的性。退出情况列表(不同于所隐含的"true")在程序签名处列出。这里,该列表 仅包括一个元素,"假"("false")。
[0071] 程序"成员"因此包括有限数量的程点(这里称作点/标记为1,2和3,此外还没 有真正的语法本文件为了给程序点命名/标记所被引入)。
[0072] L 2公理化隐式程序
[0073] 为了解析序列,程序"成员"使用"removeFirst"消除该序列的第一个元素,返回 到变量"y"和在变量"f"中的生成序列。"removeFirst"也是一个程序(或predicate), 且它已在另一个程序"成员"的定义中被使用。它被定义为:
[0074] public removeFirst(elt x+,seq e, seq f+)
[0075] implicit program-)[empty]
[0076] 关键词《隐含》表示程序的定义是隐含的的(以某种方式不言自明的),因此不包 含显性体如先前程序《成员》。默认情况下一个程序是明确的,并包含一个主体。
[0077] 因此这个程序对两种情况之间区分,隐含的"真"("true")并且被认为是主要的 情况,以及在特定的情况下为"空"。直观地,当序列为空,并且没有元素可以从序列中去除, 将"removeFirst"的调用导致该情况并且因此退出"空"。
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1