软件系统的自动验证的制作方法

文档序号:11450668阅读:718来源:国知局
软件系统的自动验证的制造方法与工艺



背景技术:

当用户将个人数据提交给远程服务(例如,基于云的服务)时,不保证个人数据将保持安全或者甚至服务将产生正确的结果。在最好的情况下,服务可能具有隐私政策,并在数据泄露的情况下限制服务的责任。然而,最近的头条已经提供在操作系统、库或应用(例如软件应用)中的易受攻击性如何可以使得个人数据被访问的示例。



技术实现要素:

提供本发明内容以简化的形式介绍概念的选择,其在下面的具体实施方式中被进一步描述。本发明内容不旨在标识所要求保护的主题的关键或基本特征;也不用于确定或限制所要求保护的主题的范围。

一些实现可以包括用于验证软件代码符合相应规范的技术。可以使用编译器来编译软件系统的高级语言实现以创建汇编语言实现。软件系统可以具有对应的高级规范。可以被表达为有限状态机的高级规范可以转换为低级规范。汇编语言实现的属性可以被验证为符合低级规范。以这种方式,可以在低水平(例如,汇编语言水平)上验证系统作为整体的正确性(例如,完整的软件栈)。

附图说明

参考附图描述具体实施方式。在附图中,附图标记的最左边的数字标识参考数字在其中首次出现的图形。不同图中相同的参考数字标识相似或相同的项目。

图1是根据一些实现的包括规范转换器的说明性架构。

图2是根据一些实现的包括应用的说明性架构。

图3是根据一些实现的包括可信增量(trinc)应用的说明性架构。

图4是根据一些实现的包括差分隐私应用的说明性架构。

图5是根据一些实现的已验证软件系统的说明性架构。

图6是根据一些实现的可信计算基础(tcb)的说明性架构。

图7是根据一些实现的包括确定与软件代码相关联的属性的示例过程的流程图。

图8是根据一些实现的包括验证软件代码的属性符合对应的规范的示例过程的流程图。

图9是根据一些实现的包括执行初步验证的示例过程的流程图。

图10是包括已验证的软件系统的说明性架构。

具体实施方式

理论上,服务的软件代码的完整形式验证可以提供一个服务精确匹配正式指定的安全标准的数学保证。不幸的是,虽然软件验证可以提供关于软件代码的可靠性的强有力的保证,但是计算成本可能会很高,以至于服务提供商可能无法执行他们的整个系统的软件验证。因此,服务提供商最多可以提供关于以通过大量未验证的软件代码围绕的高级语言编写的小程序的强大的保证。例如,已验证的传输层安全协议实现可以依赖于未验证的操作系统和未验证的软件库。作为另一个例子,针对rsa密码系统的正确性的机器检查的证明可以假定实现rsa密码系统的加密库、对应的运行时库和操作系统的正确性。作为另一示例,依赖于可信汇编代码的微内核可能不会对应用级语义的正确性租出任何声明。因此,服务可能无法执行服务的软件代码的完整的形式验证,并且因此可能不能提供服务精确地匹配正式指定的安全标准的数学保证。

本文所描述的系统和技术可以被用于创建已被验证为端到端安全的应用,使得验证覆盖可以被执行的所有软件代码(“代码”),例如,已验证的代码不仅包括应用,还包括操作系统、库(运行时库、程序库、动态库)以及可被执行的驱动程序。因此,在一些示例中,不需要假设在一个或多个服务器上执行的软件的任何部分是正确的。经过验证的代码是被执行的汇编代码,而不是在其中可以编写代码的任何(一种或多种)高级语言。验证过程可以假设硬件是正确的,但是不对编译器的正确性或代码的运行时执行做出任何假设。因此,验证过程可以证明整个系统实现代码的高级抽象状态机的功能正确的版本。验证过程可以证明安全的远程等效,例如,远程用户可以建立到代码的安全信道,其输出不能与高级抽象状态机的输出区分开。

验证在服务器上执行的代码是功能上正确的并且证明远程等效可以使验证过程能够为整个系统的行为提供完整的规范和证明,详细描述系统(例如,软件代码和硬件)将如何在每个可能的情况下表现。证明远程等效可以包括(i)证明属性的功能正确性和(ii)非干扰证明,其涉及证明代码的关系属性(例如,关于具有不同输入的相同代码的两次运行如何相互关联的属性)。此外,经由可信计算(trustedcomputing)(例如,由可信计算组(trustedcomputinggroup,开发和公布由行业实现的规范的国际行业标准组织)规定)远程等同性可以被加强以提供安全的远程等效。例如,诸如可信平台模块(tpm)的安全硬件可用于(例如,通过认证)证明公共密钥对应于仅对正在(一个或多个)服务器上被执行的代码已知的私有密钥。远程用户可以使用公钥创建到代码的安全通道,从而实现与代码的抽象状态机的直接通信相称的安全性。因此,将认证与完全验证的代码相结合可以提供端到端安全性的极高保证。

与使用常规技术相比,本文描述的技术和系统可以使软件开发人员能够以适度的开发者努力开发可验证的安全应用。例如,常规技术通常需要几十个人年来验证单个软件层,因此使用常规技术来验证完整的软件栈(例如应用、操作系统、驱动程序等)可能是计算上禁止的。为了减少开发人员的努力,本文所描述的技术和系统可用于执行系统软件的快速、自动化的端到端软件验证。

为了在汇编级(例如,以适度的开发者努力)正确地验证代码,软件开发者可以使用本文所描述的两个新工具。第一,规范转换器可以使软件开发人员以高级语言有效地写入规范,并且然后验证对应的汇编代码是否符合规范。例如,规范转换器可以将高级规范(例如,有限状态机)转换为低级规范以使得验证能够被执行。第二,可以使用将高级语言中的可验证代码编译成可验证汇编语言的编译器将代码和相应的证明从高级语言转换为低级汇编代码(或机器代码)。这样的编译器可以使软件开发人员能够快速地写入和检查高级代码并且证明与可执行的汇编代码相关联的属性。例如,整个系统(或其任何子集)的软件(包括应用、库、驱动程序和操作系统)可以被编译为包括可验证汇编代码的单个程序。整个系统代码(例如,作为整体)的正确性被验证,使得在整个系统代码中不存在未验证的代码,并且系统的不同组件之间没有未验证的间隙。作为间隙的示例,假设第一分量x被描述为执行q,并且将第二分量y被描述为使用执行q的另一分量(x)执行r。如果x表示与y不同的q,则y保证y执行r可能不成立,从而造成间隙。验证过程验证系统的两个(或多个)组件之间没有未验证的间隙。

此外,验证过程验证系统的每个组件不能破坏系统的另一个组件的规范。例如,可以验证应用以不破坏操作系统的存储器管理子系统,并且可以验证操作系统的存储器管理子系统以不破坏应用。

此外,本文描述的系统和技术包括提供增量验证、不透明功能和自动需求生成的验证工具。除了验证工具之外,本文中描述了还可以使用用于操作比特、字节和单词的数组的正确库、用于证明系统编程中常见的数学表述的工具(例如,关于如何在将字节转换为字时价值增长的推理)、以及用于加密图形操作的工具,诸如加密(例如,rsa最优非对称加密填充(oaep))、签名(例如,rsa概率签名方案(pss))、认证(例如散列消息认证码(hmac))和散列(例如,安全散列算法(sha))在此描述。

作为可验证软件代码的示例,提供了各自用作独立服务的几个软件应用。例如,描述了将逻辑时间戳安全地分配给对象(例如,文件,文档等)以使得它们可以被最终排序的公证应用。公证应用包括包含单调递增计数器的状态,以及响应于通过递增计数器、对链接计数器值到该请求的状态进行签名(例如,使用签名)并且响应该语句和签名的公证请求的状态。其他三个应用包括密码散列器、由多个用户使用的可信计数器、以及在最小化标识数据库记录的机会时最大化对数据库查询的准确性的差异化专用数据库。

因此,以下参考附图描述了技术和系统,其通过自动全系统验证,在汇编级提供外部可检查的完全验证的软件。还描述了用于构建相对较大规模的端到端验证系统的示例工具、技术和软件工程的集合。另外,描述了证明经由关系属性的验证的基于信息流的汇编级代码的示例方法和用于系统开发者针对正式验证使用的示例技术。

说明性架构

图1是根据一些实现的包括规范转换器的说明性架构100。在一些实现中,架构100可以用于提供远程等效和端到端验证。

远程等效提供了关于每个应用与其对应的状态机之间的等效的保证。例如,通过不可信网络与应用通信的远程设备可以被确保接收与远程设备通过不可信网络与对应的(例如对应于应用)状态机通信将接收的消息序列相同的消息序列。例如,公证应用的规范可能指示公证应用签署单调增加的计数器。知道系统与本规范相匹配,远程设备可以被提供保证,例如,运行系统(i)不允许将计数器回滚,(ii)不共享私钥,(iii)不提供除公证之外针对任何事情的签名声明,(iv)正确计算签名,以及(v)不受缓冲区溢出、整数溢出或其他实现级漏洞的影响。

架构100可以使远程设备能够建立到应用的安全信道。建立到应用的安全通道可能会消除不可信网络干扰远程设备与应用之间通信的能力。例如,公证应用的规范可以指出,公证应用使用可信平台的随机性来计算密钥对,然后从可信平台获得公开密钥和应用代码的证明。因此,接收证明的远程设备可以确定通过公证应用的代码在可信赖的平台上生成用对应私钥签名的公证,并且因此可以被对待为犹如对应的私钥签名的公证是由对应于公证申请的状态机产生。

除了安全保证之外,在系统上运行的任何软件应用中都没有隐含的信任。因此,每个软件部件(i)被验证为安全的,或(ii)在防止软件部件影响系统其他部件的安全性的已验证的沙盒环境中执行。

此外,不是仅仅独立地验证系统中的每个组件,而是整个系统作为整体可以被验证。通过这样做,系统的安全性可以避免关于系统的软件部件如何交互的不正确的假设。在用于生成要执行的软件的编译器中没有隐含的信任。因此,待执行的指令(例如,汇编代码)被验证,而不仅仅是要被编译以创建指令的高级源代码。

用于系统的代码可以用被设计为支持验证的语言(例如,而不是常规的计算机语言)来编写。当设计代码时,促进正确性证明(例如而不是性能)的算法和代码模式可以被选择以提供易于验证的系统。代码可以被优化而不用担心优化可能会引入错误,这是因为验证工具被设计以捕获通过优化技术可能引入的任何错误。

已验证的系统可以提供针对基于软件的攻击的安全性。例如,对手可以在验证的应用执行之前和/或验证的应用终止之后在服务器上执行软件。对手可能会损害服务器的固件、基本输入/输出系统(bios)或外围设备(例如网卡)。在一些情况下,系统可以假设中央处理单元(cpu)、存储器、芯片组和可信平台模块的行为正确,并且假定对手不会发生物理攻击(例如,电探测存储器总线等)。

架构100可以包括高级规范102、规范转换器104、低级规范106、验证器108、验证结果110、高级语言实现112、编译器114、汇编语言实现116、汇编器118和机器代码实现120。例如,用户可以创建高级规范102和高级语言实现112。规范转换器104可以将高级规范102(例如,有限状态机)转换成低级规范106。

编译器112可以将高级语言实现112编译成汇编语言实现114。验证器108可以自动(例如,在没有人工交互的情况下)执行各种功能,例如验证汇编语言实现116对应于低级规范106。在汇编语言实现114已被验证器108验证为对应于低级规范106之后,汇编语言实现116可以由汇编器118转换为机器代码实现116的形式的可执行代码。汇编语言是用于计算机或其他可编程设备的低级语言的示例,其中由硬件处理器执行的汇编语言和机器代码指令之间通常具有一对一的对应关系。

可以使用验证栈(例如,基于floyd-hoare或类似推理)来证明代码的功能正确。高级规范102和高级语言实现112可以使用被设计为可验证的高级语言来实现。高级语言可能具有内置的规范构造。验证器108可以是可用于验证以高级语言编写的软件程序的功能正确的静态程序验证器。高级语言可以被设计以支持程序的静态验证。高级语言可能包括各种特征,例如强制性、顺序性,支持通用类,提供动态分配和归纳数据类型,并具有内置的规范构造。高级语言规范可以使用户能够指定前置条件、后置条件、帧规范(读取和写入集合)和终止度量。高级语言可以提供可更新的重构变量、递归函数和类型,诸如集合和序列。在验证期间,通过验证器108可以使用规范和重构构造,并且当编译器114创建汇编语言实现116时,通过编译器114可以省略规范和重构构造。

在一些实现中,验证器108可以作为编译器114的一部分运行。程序员可以以类似于静态类型检查器的方式与验证器108交互,例如,当验证器108产生错误时,程序员可以通过更改高级实现112中的类型声明、规范或描述中的一个或多个进行响应。验证器108可以自动填充低级证明细节。

编译器114可以采用对应于高级规范102的高级语言实现112并且自动地(例如,没有人工交互)将高级语言实现112转换为可验证的汇编语言实现116。汇编语言实现116可以使用用来描述证明义务的中间验证语言(ivl)以通过推理引擎被放出,诸如可满足性模理论(smt)求解器。ivl可以包括将汇编语言实现116作为输入、生成用于证明义务的验证条件以及将vc传递给推理引擎的验证引擎(例如验证器108)。整个系统的代码可以使用验证器108在汇编级别(例如,汇编语言实现116)进行验证。在高级语言实现112或编译器114中的任何错误可由验证器108标识。由于一些安全属性不能通过功能正确倍表达,所以描述了用于验证代码的关系属性(例如,高级语言实现112)的技术。当验证结果110指示汇编语言实现116已被验证为正确时,可信汇编器118可用于将汇编语言实现116转换为机器代码实现120(例如,可执行代码)。

使用推理来验证代码

验证器108可以使用一种类型的推理(例如,floyd-hoare推理或其他类似推理)来执行汇编语言实现116的验证。高级语言实现112可以关于程序可能进入的状态的断定而被注释,并且针对到程序的所有可能的输入,当程序运行时,验证过程可以证明断定是有效的。作为第一示例,以下程序用关于在最终的程序状态(例如,后置条件状态)被注释有断定,指示输出o必须是偶数:

proceduremain(s,i)returns(o)ensureseven(o);

{o:=(s+s)+(i+i);}

在第一示例中,验证器108可以验证后置条件“even(o)”对于所有可能的输入s和i保持真实。相反,如果计算“o:=(s+s)+(i+i)”被替换为“o:=s+i“,则验证结果110可以指示验证失败,这是因为对于一些输入i和s,输出o可以是奇数。

对于生成多个输出的程序,可以使用多个输出通过使用前置条件注释输出方法来验证程序的规范,该前置条件在执行程序代码的任保时间必须是真的。作为第二个例子:

在第二示例中,“不变量偶数(计数)”针对待信任的输出指定输出是偶数。断定“不变量(计数)”(例如,循环不变量)提供信息以使验证器108能够验证程序。如果没有提供这样的信息(例如,循环不变),则验证器108可能不会将有效程序自动识别为正确。因此,为了使验证器108能够验证汇编语言实现116,高级语言实现112可以指定一个或多个前置条件、后置条件、循环不变量或其任何组合。高级语言实现中的前置条件、后置条件、循环不变量可能是高级规范102中被包括的前置条件和后置条件的补充。

撰写可信赖规范

为了实现系统的端到端验证,可以使用两种类型的规范,例如硬件规范和软件规范。对于硬件规范,指定了可执行的每个汇编指令,以启用低级验证。硬件规范描述了系统上的该指令的期望(例如,将多个寄存器相加的add可能期望对多个寄存器求和不会引起溢出),以及指令的影响(例如,add将多个寄存器的和写回到目标寄存器)。

软件规范可以包括对应软件应用的期望行为的抽象描述。抽象描述可以根据较低级别的库规范被模块化编写。例如,公证申请的软件规范可以描述:(i)公证申请的状态机如何前进,以及(ii)每个状态中允许的输出。为了说明,规范可以指示特定状态中的一个输出是被定义为用于rsa签名的签名消息。

由验证器108执行的验证过程可以通过证明tcb满足对应的高级规范来从可信计算基础(tcb)中移除实现代码。然而,规范可能是tcb的一部分,因此规范本身必须被验证为可信赖。因此,系统的设计可以利用规范开始,通过参考应用规范,应用惯用规范和/或应用规范检查。因此,可以在开始高级语言实现112之前写入高级规范102。

高级规范102可以使用惯用类型的规范,其指定由系统使用的那些特征子集,例如,而不需要指定未使用的特征。例如,可信平台模块(tpm)可能具有数百页的相关文档。然而,使用tpm的功能的子集的特定系统可以指定tpm的功能的子集,而不需要指定在特定系统中未使用的tpm的功能。编写高级规范102以包括由系统使用的功能,同时排除未使用的功能可能导致针对高级规范102的更小的大小(例如,与如果包括未使用的功能相比较),从而使得能够更容易和更准确地进行规范的人员审核。

可以使用各种附加技术来减少规范(例如,高级规范102)中的错误/问题。例如,包括由系统使用的功能的较小规范可以被更容易和更快地验证。作为另一个例子,以比实现代码更抽象、声明性方式编写的规范可能使规范错误不太可能发生,并且当它们发生时更容易找到。

产生可验证的汇编语言

为了在低级别验证软件代码的同时例得能够快速、大规模的软件开发,可以相互验证规范和相应的汇编语言。例如,高级规范102可以被转换成低级规范106,高级语言实现112可以被编译成汇编语言实现116,并且验证器108可以验证汇编语言实现116表现为由低级规范106指定。这使得能够将高级语言用于高级实现112而不需要信任编译器114,并且不需要信任运行时环境(例如,可以使用各种库、运行时组件、操作系统实用程序等)。

编译器114可以是或可以不是可信组件。例如,如果编译器114不是可信组件,则编译器114可能不保证汇编语言实现116对应于高级语言实现112(例如,以100%的准确性)。编译器114可以将高级别语言实现112和任何包含的证明转换成验证器108自动验证的汇编语言实现116。因为由验证器108验证由编译器114创建的汇编语言实现116,编译器114可能不是可信部件。这使得软件开发人员能够增加复杂的功能和优化,而不会影响安全保证。相反,验证器108可以用于标识编译器114中的错误。

当将高级语言实现112转换成汇编语言实现时,编译器114可以执行代码优化。例如,以下高级语言代码可能会将一个数组复制到另一个数组:

编译器114可以为上述生成汇编语言代码,其中汇编语言代码不在数组循环内执行数组边界检查,这是因为不变量0<=k<=n提供每个数组中的索引k是在0和n的范围内。

在软件开发期间的初步验证

为了减少软件开发者的验证负担,高级规范102和高级语言实现112可以被写入执行初步验证124的软件开发环境122。例如,初步验证124可以将具有高级规范102的高级语言实现112验证为正在被写入的高级语言代码。为了说明,当它根据高级语言规范被写入时(例如,在写入之后立即),在高级语言实现112被转换为可验证的汇编语言实现116之前,高级语言开发环境可以检查高级语言实现112的代码。

此外,初步验证124可以执行验证结果高速缓存,使得对高级语言实现112的编辑导致对编辑的代码的重新验证。软件开发环境122可以包括诸如visualstudioide的集成开发环境(ide),以提供关于验证的接近实时反馈。随着开发人员输入和编辑用于高级语言实现112的代码,软件开发环境122可以标识错误并使得开发者能够查看与每个错误相关联的详细错误消息。例如,选择错误消息可能导致突出显示失败的前置条件和初步验证124已经确定不满足前置条件的具体条款。这种详细的反馈可以使得开发者在编写针对高级语言实现112的代码时作出反应,而不是在写入高级语言实现112之后尝试更正问题,类似于事后拼写检查和连续拼写检查之间的差异。在通过高级语言实现112的代码传播错误之前,这样的开发环境可以使开发人员能够快速识别和解决错误,推理错误等。此外,当初步验证124请求开发者提供信息以证明为高级语言实现112编写的代码与高级规范102匹配时,开发者可能会被警告潜在的问题。开发人员可以提供信息,例如,不变量的内联断定,以及初步验证验证124可以提供即时反馈,其指示所提供的信息是否使得能够根据高级规范102对所写入的代码进行验证。

软件开发环境122可以提供模块验证,其中第一代码文件可以导入先前验证的第二代码文件的接口,而不会导致第二文件中的代码被重新验证。在开发者之间的层级,软件开发环境122可以通过诸如基于云的存储设施的公共存储设施来共享验证结果。例如,开发人员可能会改变代码,运行验证并提交更改后的代码。当另一个开发人员检出代码时,可以根据高速缓存的结果立即验证代码。

软件开发环境122可以包括自动需求传播。例如,写入高级规范102的用户可以将特定功能指定为自动请求(autoreq)。该指定指示软件开发环境122自动添加前置条件以使得特定功能能够满足被叫方的要求(例如,该特定功能所呼叫的其他功能)。

验证关系属性

除了功能正确性之外,验证器108可以验证应用不提供关于秘密数据的信息(例如,要保持为私有的或被限制访问的数据)的信息(“不泄漏”),如私钥。关于秘密数据的不泄露信息的属性被称为不干扰。假设变量s表示应用内的秘密数据,而i代表到应用的公共输入。如先前所述,声明o:=(s+s)+(i+i)满足功能正确性规范,例如even(0)。然而,输出o使得外部(例如,未经授权的程序)能够确定秘密s,例如通过计算o/2-i。在该示例中,秘密s泄漏到外部。相反,声明o:=(s-s)+(i+i),满足even(o),但不提供在输出o中关于s的信息,这是因为被存储在o中的值取决于i中的值但是独立于s。为了验证程序不提供关于秘密数据的信息,验证器108可以分析程序的多个执行并比较程序的执行的输出以确定输出依赖于哪个值。假设公共输入i被传递给程序的所有执行,但秘密s在程序的执行中是不同的。如果程序的所有执行都产生与s无关的相同的输出o,则o独立于s,并且程序不提供关于s的信息。如果程序的至少一次执行产生与剩余程序的执行不同的输出程序,那么程序可以提供关于s的信息。因此,通过证明当给定相同的i但是不同的s时,程序的两次执行不产生不同的o,可以证明o独立于s。数学上,想法是证明对于所有可能的执行对(在每个对l和r中调用两个执行,用于左和右),如果公共输入i相等但是秘密s可能不同,则输出o可以是相等的,例如,sr。il=ir=>ol=or。虽然语句o:=(s-s)+(i+i)满足条件,但是o:=(s+s)+(i+i)不满足条件(例如,使用反例il=ir=1和sl=2和sr=3)。

为了确定应用不公开秘密数据,开发人员可以用显式关系注释来注释代码。例如,xl可以写为left(x)并且xr可以写成right(x):

在该示例中,关系前置条件left(i)==right(i)指示验证器108确定是否il=ir,无论在哪儿test被调用,并且关系后条件left(o)==right(o)指示验证器108确定是否il=ir=>ol=or。对于我们的代码的大多数,验证器108可以利用现有的功能正确性注释,因此开发者可能不提供关系注释。例如,验证器108可以使用代码中的功能后置条件:

programcomputeipchecksum(i)returens(o)ensureso==ipchecksum(i);

以确定如果il=ir,则ipchecksum(il)=ipchecksum(ir),因此ol=or。

提供安全属性

程序的输出不依赖于程序中的秘密数据的要求(和验证)对于大多数现实世界系统来说可能过于严格(例如,不实际和不必要的)条件。通常,程序可以允许秘密数据对输出的有限影响,例如使用秘密密钥对输出进行签名。这种程序的安全策略可以明确地解密某些值(例如签名),使得签名可以包含在输出中。

图2是根据一些实现方式的包括客户端、网络、应用和解密器的说明性架构200。架构200图示了已验证的系统的架构,包括客户端202、网络204、应用206和解密器208。解密器208可以授权从秘密数据获得的所选择的输出的释放。应用的解密策略可以被表示为对应于由应用规范指定的高级行为的状态机。客户端202可以通过网络204与(已验证的)应用206通信。例如,客户端202可以通过网络204发送输入数据i。网络204可以丢弃、延迟、复制或篡改输入数据i。网络204可以不具有对应用206的秘密数据的访问。应用206可以接收输入数据i的被破坏版本i*,并且跨网络204发送输出o来进行响应。网络204可以破坏输出o并向客户端提供一个破坏版本的o*。

当计算输出o时,应用206可以调用解密器208策略一次或多次。每次调用解密器208时,应用206可以将秘密数据s、输入i和期望的解密输出d传递给解密器208。为了成功验证,期望的解密输出d将等于根据指定:d=statemachineoutput(s;i)的状态机的解密策略的输出。当验证器108执行静态验证并确定状态机的解密策略被满足时,解密器208产生应用206可以用作输出o的一部分的解密输出o。

在一些实现中,o可以等于d,使得解密器208在运行时期间是无操作(没有操作)。然而,解密器208是无操作的信息可能不会被公开给验证器108,使得可以在不公开dl=dr的情况下公开ol=or。在某些情况下,例如,可以使用d上的暴力破解(例如,通过分解rsa公开密钥)来确定秘密数据s,dl=dr可能意味着sl=sr,这是不期望的。

安全应用示例

讨论了验证的安全应用(例如,称为ironclad应用)的四个示例。每个应用的证明建立在以前已证明的较低级别的库、驱动程序和操作系统上。每个应用可以编译为经由诸如例如用户数据报协议(udp)的协议与其他机器通信的独立系统映像。每个示例应用都是一个有用和完整的应用,其可以在数据中心中至少使用一台专用机器。对细粒度安全执行环境的硬件支持可以使得能够复用多个ironclad应用。

公证应用

公证应用将逻辑时间戳安全地分配给文档,以便可以最终排序文档。在常规系统中,这样的时间戳服务的用户假设机器正在执行正确的软件。本文所描述的公证应用不需要这样的假设。

公证远程等效。公证应用相当于具有以下状态的状态机:

·a(publickey,privatekey)对,其使用从tpm读取的第一个连续的随机字节序列中的rsa密钥生成算法来被计算。

·tpm,其中平台配置寄存器(例如pcr19)已经与密钥对的公共部分一起被扩展;和

·计数器,被初始化为0;

和以下转换:

·给定输入(connect,nonce),tpm状态通过经过pcr17-19获取的引用quote和外部随机数nonce被改变。输出是(publickey;quote)。

·给定输入(notarize,hash),递增计数器counter并返回sigprivatekey(op-ctr-adv||rfc4251encode(counter)||hash)。

pcr是允许安全存储和报告安全相关度量的寄存器。针对公证应用的规范的一部分可能包括在out_sig被解密之前要满足的断定(否则由于依赖于秘密数据而无法输出)。这种断定的简化示例是:

证明公证等价可以包括(1)输入不干扰、(2)程序的连接操作的功能正确性、(3)程序的公证操作的功能正确性、以及(4)输出不干扰的证明。(1)输入不干扰:公证应用传递给解密器208的随机数和消息基于公共数据。(2)连接的功能正确性:应用从随机性正确地获得密钥,tpm引用应用获取来自tpm,当它的pcrs处于所需状态时。(3)公证的功能正确性:应用递增计数器并正确计算签名。(4)输出不干扰:写入不受保护的存储器仅取决于公共数据和计算的状态机输出。

trinc应用

图3是根据一些实现的包括trinc应用302的说明性架构300。

被称为trinc302的可信增量应用将一般化为公证应用。trinc302维护每个用户(例如,每应用)计数器,使得每个用户(例如,每个应用)接收连续的值,其间没有间隙。trinc302是分布式系统中的通用工具,trinc302可用于各种功能,诸如例如防篡改审核日志,拜占庭容错复制状态机,验证不受信任的文件服务器正常运行等。trinc302可以包括创建计数器304模块以使得能够创建计数器306。计数器306可以包括n个计数器(其中n>0),诸如第一计数器308到第n计数器310。trinc302可以包括私钥模块312、公钥证书模块314、密码处理模块316、元计数器318和trinc状态指示符320。

trinc远程等效。trinc应用302远程等同于诸如公证应用之类的状态机,除了trinc具有多个计数器,每个元组(ki;vi)和最初设置为0的元计数器。代替公证过渡trinc具有:

·给定输入(creat,k),

ο设置i:=meta_counter,

ο递增meta_counter,以及

ο设置(ki,vi)=(k,0)。

·g定输入(advance;i,vnew,msg,usersig),令vold=计数器tuplei中的vi。

ο如果vold<=vnew且verifysigki(vnew||msg,usersig),则设置vi:=vnew并且输出sigprivatekey(op-ctr-adv||encode(i)||encode(vold)||encode(vnew)||msg)。

密码散列(“passhash”)应用

密码散列应用可能致使密码数据库的丢失成为无害的。例如,攻击者可能会窃取数据库并挂载脱机攻击。即使数据库被正确地散列和盐化,低熵密码也使数据库变得脆弱。通过使用密码散列,未经授权的访问散列密码不会危及安全性。

密码散列远程等效。passhash应用远程等同于以下状态机。状态由一个字节字符串secret组成,初始化为从tpm读取的第一32个随机字节。给定输入(哈希、盐、密码),passhash应用输出sha256(secret||salt||password)。

基于该规范,散列密码对于脱机攻击者是无用的,这是因为没有秘密,即使对低熵密码的强力猜测攻击是不可行的。

差异隐私(“diffpriv”)服务

图4是根据一些实现的包括差分隐私应用402的说明性架构400。差分隐私应用402可以包括密钥对404、一个或多个数据库406和隐私预算408。

差分保密应用402提供差分隐私服务,并且是具有更长和更复杂的抽象规范的较大应用(例如,与trinc等相比)的示例。差分隐私应用402可以从贡献者收集敏感数据,并允许分析者研究聚合数据库406。差分隐私应用402可以保证每个贡献者的差异隐私,例如,如果贡献者的数据被省略,则提供给分析者的答案几乎与本来已经被回答的答案无法区分。算法a是具有隐私∈的差异隐私,如果对于任何一组答案s和通过单行不同的任何对数据库d1和d2,则p[a(d1)∈s]<=λ●[a(d2)∈s],其中隐私参数λ=e

具有小隐私参数的多个查询可以等同于具有参数的乘积的单个查询。开始具有到贡献者保证的隐私预算408b=λ,具有参数λq的每个查询q划分预算b':=b/λq(例如,具有λq>b的查询可能被拒绝)。对于噪声计算,计算查询的灵敏度δ,如果单个数据库行发生变化,则查询结果可能会改变最多。分析人员收到正确答案的总和通过δ从参数化的分布中抽取的随机噪声值。可以使用仅包括有理数的噪声分布,这是因为可以使用指令集(例如,x86指令集)精确地采样噪声分布。

diffpriv远程等效。diffpriv应用远程等效于具有如下状态的状态机:

·密钥对和tpm被初始化为类似于公证应用;

·剩余预算b,实数;以及

·一系列行,每行由重复检测的随机数和整数列值的列表组成;并且包括连接到应用、初始化数据库、添加行和执行查询的转换。

灵敏度。在规范的噪声计算公式中用作灵敏度参数的值δ可以是查询结果的实际灵敏度。例如,如果我们将a(d)定义为应用在数据库为d时计算的答案,则对于任何两个数据库d1和d2,|a(d1)-a(d2)|δ。

为了可验证,可以使用查询,其中每个查询是将行转换为单个值的映射器,以及聚合结果集合的减速器(reducer),使得只有减速器影响敏感度。分析人员可以提供任意的映射器,diffpriv可以为单个减速器总和提供灵敏度属性。diffpriv应用可能会采用rowmin和rowmax参数,将每个映射器输出值剪切到一个范围。例如:

diffpriv应用被验证以满足将减速器输出灵敏度与噪声产生中使用的δ相关联的断定。

全系统验证

图5是根据一些实现的已验证的软件系统500的说明性体系架构。软件系统500包括一个或多个应用502、一个或多个通用应用库504、用户数据报协议/因特网(udp/ip)508协议模块、以太网510协议模块、网络驱动器512、一个或多个数据类型514、安全散列(sha)516模块、可信平台模块(tpm)驱动器518、rsa520库、bignum库522(例如,用于执行加密功能))、coremath库524(例如,执行科学,工程或计算密集型计算)和操作系统526(例如,已验证的微内核)。应用502可以包括在已验证(例如,沙箱)环境532中执行的已验证应用528和未验证应用530。

应用502可以包括passhash、notary、trinc、diffpriv、另一应用或其任何组合。操作系统526可以包括对后期启动、iommu、分段、页表、另一操作系统实用程序或其任何组合的支持。软件代码可以包括注释,例如循环不变量,前置条件和后置条件以使得能够验证软件代码。注释可以被看作是建立在高级定理上的引理。

为了说明系统500的端到端验证的步骤,描述了若干命题。为了易于理解下面这些命题简单地用简单的英文说明。应当理解,实际命题可以采用高级语言实现112中的注释的形式。下面描述的命题是在验证系统500时可以使用的几个关键命题。

iommu配置。已验证的应用(例如,ironclad应用)可以配置输入-输出存储器管理单元(iommu),以将存储器划分为设备可访问和应用专用私有存储器,使得非设备操作访问应用专用私有存储器。汇编语言指令规范可以用于确定非设备存储器操作仅访问通过硬件设备专用向量(简单iommu)保护的应用专用存储器。

一些中央处理单元(cpu)可以提供诸如用于测量的动态信任根(drtm)的特征,也称为后期启动。drtm可以重置cpu为已知状态,存储由指令的参数指向的存储器内代码的测量(例如,哈希代码),并跳转到该代码。在后期启动之后,硬件可以提供cpu的软件程序控制连同受保护的存储器的64千字节(kb)。为了使用超过64kb,软件程序可以基于与iommu的配置相关联的规范,首先扩展iommu的保护。在扩展iommu的保护之后,程序可能满足针对汇编语言指令的前置条件以访问64kb区域以外的存储器器。

设备看不到秘密数据,例如,只有非秘密数据可以被传递到设备。汇编语言指令规范可以指示将数据存储到设备可访问存储器,即iommu允许设备访问的存储器,只能存储非秘密数据o(例如,ol=or)。更具体地,左和右执行可以产生相同的设备存储序列:与相同地址相同的值、模数定时和活动性。非正式地,活动是在系统或算法(即,系统“进步”)中“好事情最终发生”的要求。数据库的最终一致性就是一个活性的属性的示例。

为了证明ol=or,实现代码的输入路径和输出路径可以用关系注释来注释。输入路径和输出路径可以包括应用事件循环和网络栈。例如,以太网、因特网协议(ip)和udp层可以维持数据包的关系属性。

tpm中的密钥。应用可以将公钥正确地扩展到tpm的pcr(例如pcr19)中。私钥可以使用tpm随机来生成并且不离开平台。

认证。应用可以在将其公钥扩展到pcr后产生正确的tpm认证。

推论2-安全通道。如果客户端接收到公钥和证明,并且证明的pcr代码值(例如pcr17、pcr18)与已验证的应用的代码值相匹配,并且所证实的pcr数据值(例如,pcr19)与公钥匹配,并且证书显示证明来自合法的硬件tpm制造商,则客户端可以使用公共密钥直接建立到已验证的应用的安全通道。

加密库

散列。sha514可以符合各种标准(例如,fips180-4和fips198-1)。

rsa操作。rsa518可以使用来自tpm的连续随机性(例如,未选择性地采样)来生成rsa密钥,并且通过原始测试(例如,miller-rabin原始或类似测试)。rsa518可以包括rsa加密、rsa解密、rsa符号和rsa验证,包括填充,并且可以产生符合标准(例如,pkcs1.5和rsa标准)的字节数组。

对于诸如散列函数的一些类型的加密原语(primitives),验证器108可以验证功能正确性。从rfc2313派生的rsa规范将加密和签名操作定义为由理想整数构成的密钥上的模幂运算。密钥生成规范可以使用从两个随机素数获得的密钥。大数(bignum)520库可能用于实现加密原语。大数520库可以使用32位字的数组来实现任意精度整数,提供诸如用于rsa等的划分和模数等的操作。大数520库可能包括大鼠(bigrat),它将提供的操作扩展为有理数,其可被用于差异隐私。

大数/大鼠正确性。每个大数/大鼠操作可以产生一个表示正确的无限精度整数或实数的值。

在一些实现中,编译器114可以不被包括在可信计算库(tcb)中。如果编译器114不是tcb的一部分,则可以由验证器108验证汇编语言实现116。验证器108可以使用由编译器114产生的若干不变量,诸如类型安全性、数组边界安全性和传递栈安全。

类型安全。可以验证每个值和堆对象的内容以根据由高级语言所使用的类型系统准确地表示预期内容,使得对每个值和堆对象的操作不会导致运行时类型错误。

阵列边界安全。数组操作可以使用位于数组边界内的索引。

过渡堆叠安全。当一个特定程序被调用时,栈有足够的栈空间用于由特定程序调用的栈操作和特定程序可能调用的任何附加程序。栈可以包括用于存储关于程序的信息的数据结构。例如,当程序调用子程序(例如子例程)时,程序的快照可以在子程序被调用之前存储在栈中。例如,快照可以包括由程序使用的变量的值等。当子程序已经完成执行时,可以使用被存储在栈中的快照来恢复程序的状态,使得程序的执行可以恢复。

即使高级语言是类型安全的语言,验证器108也可以不假定编译器114保持类型安全性。因此,验证器108可以通过建立表示高级语言值的数据结构的类型不变量来在汇编语言级别验证类型安全性。例如,数据结构中的指针可以指向预期类型的值,并且任意整数可以不被用作指针。这种类型不变量可以在整个汇编语言代码中被维持并且可以在循环不变量、前置条件、后置条件或其任何它们的组合中存在。因此,可以不使用外部汇编语言类型检查器来检查编译的汇编语言实现116。相反,针对手动编写的汇编语言代码和编译代码(例如,汇编语言实现116),可以使用单个验证过程(例如,由验证器108执行)。

高级属性保护。每个程序证明输出栈状态和给定高级语言前置条件的寄存器满足高级语言后置条件。编译器114可以保持高级语言注释,例如前置条件、后置条件和循环不变量。此外,编译器114可以将高级注释连接到低级栈和寄存器值,使得对栈和寄存器值的操作满足与高级语言实现112和相应的高级规范102相关联的正确性定理。

操作系统不变量。可以维护操作系统数据结构不变量。

垃圾收集正确性。操作系统526的存储器管理器可以创建符合高级语言语义的高级语言中的对象的表示。操作系统526的垃圾收集器可以保持正确的对象数据,并且即使当垃圾收集器在对象周围的存储器中移动对象时,也可能不会留下悬挂的指针。垃圾收集器可以回收被存储在存储器中的垃圾,例如已经被分配但不再使用的存储器中的对象。例如,如果系统没有指向分配的存储器部分的任何指针,则分配的存储器部分可以被垃圾收集器回收以供另一程序使用。

图6是根据一些实现的包括可信计算基础(tcb)602的说明性架构600。用于tcb602的各种组件的规范可以包括服务规范604、一个或多个驱动器规范606、一个或多个库规范608、操作系统规范和硬件规范612或其任何组合。服务规范604可以提供针对由tcb602提供的服务的规范,例如输入/输出操作,通信实用程序,文件系统操作实用程序,资源分配实用程序等。驱动器规范606可以指定由tcb602提供的各种驱动器的功能。库规范608可以指定由tcb602提供的各种库的功能,诸如运行时库。操作系统规范610可以指定与由tcb602提供的操作系统相关联的操作。硬件规范612可以提供关于硬件的操作的信息。

验证器(例如,图1的验证器108)可以使用证明来验证软件代码符合规范604、606、608、610和612。例如,验证器可以验证服务代码和证明614符合服务规范604,驱动程序代码和证明616符合驱动程序规范606,库代码和证明618符合库规范608,微内核(例如,操作系统)代码和证明620符合操作系统规范610和可信硬件符合硬件规范612。

示例过程

在图7,8和图9的流程图中,每个块表示可以以硬件,软件或其组合来实现的一个或多个操作。在软件的上下文中,块表示计算机可执行指令,当由一个或多个处理器执行时,指令使处理器执行所描述操作。通常,计算机可执行指令包括执行特定功能或实现特定抽象数据类型的例程、程序、对象、模块、组件、数据结构等。描述块的顺序不旨在被解释为限制,并且任何数量的所描述的操作可以以任何顺序和/或并行组合来实现该过程。为了讨论的目的,如上面所描述的,参考架构100、200、300、400或500来描述过程700、800和900,尽管其他模型、框架、系统和环境可以实现这些过程。

图7是根据一些实现的包括确定与软件代码相关联的属性的示例过程700的流程图。过程700可以由软件开发环境的一个或多个组件执行,诸如图1的软件开发环境122。

在702,可以创建指定软件代码的属性的规范。例如,在图1中,高级规范102可以指定高级语言实现112的属性,诸如高级语言实现112如何表现。

在704,软件代码的属性可以被验证为符合规范。在706,可以提供软件代码已经被验证为符合相应规范的指示。例如,如图1所示,验证器108可以验证汇编语言实现116符合低级规范106。为了说明,验证器108可以将有限状态机(例如,低级规范106)的行为与汇编语言实现116相比较,并且在给定的(一个或多个)输入x时确定有限状态机和汇编语言实现116是否进入相同的状态。如果验证器108确定有限状态机和汇编语言实现116在给出(一个或多个)输入x之后进入相同状态,则验证器108可以指示汇编语言实现116已经通过验证。如果验证器108确定有限状态机和汇编语言实现116在给定(一个或多个)输入x之后进入不同的状态,则验证器108可以指示验证失败。

因此,验证器可以执行验证以确定汇编语言代码是否符合诸如有限状态机的低级规范。

图8是根据一些实现的包括验证软件代码的属性符合相应规范的示例过程的流程图。过程800可以由软件开发环境的一个或多个组件执行,诸如图1中的软件开发环境122。

在802,可以执行初步验证以验证高级语言实现符合高级语言规范。例如,在图1中,当其依据高级规范102正被编写(例如,直接在其写入之后)时,例如在高级语言实现112被转换成可验证的汇编语言实现116之前,初步验证124可以检查高级语言实现112的代码。

在804,高级语言实现可以被编译以创建汇编语言实现。例如,在图1中,编译器114可以通过编译高级语言实现112来创建汇编语言实现116。高级语言实现112可以是单个应用、两个或更多应用或整个软件系统(例如,包括应用、驱动程序、库、操作系统等)。

在806,高级规范102可以被转换成低级规范。例如,在图1中,高级规范102可以由规范转换器104转换以创建低级规范106。低级规范106可以包括至少一个有限状态机,其行为基于高级规范102。

在808,汇编语言实现的属性可以被验证以符合低级规范。例如,在图1中,验证器108可以验证汇编语言实现116符合低级规范106。为了说明,验证器108可以将有限状态机(例如,低级规范106)的行为与汇编语言实现116的行为相比较,并且在给定特定输入时确定有限状态机和汇编语言实现116是否进入相同的状态。如果验证器108确定有限状态机和汇编语言实现116进入相同状态,则验证器108可以指示汇编语言实现116已经通过验证。如果验证器108确定有限状态机和汇编语言实现116进入不同的状态,则验证器108可以指示验证失败。

在810,可以使用汇编器来创建基于汇编语言实现的机器代码实现。例如,如图1所示,汇编器118可以基于汇编语言实现116来创建机器代码实现120。

因此,高级语言开发环境可以提供各种工具。例如,可以在基本相同的时间指定高级语言实现和高级语言规范,并且可以执行初步验证以验证高级语言实现符合高级语言规范。高级规范可以被转换成低级规范,例如有限状态机,并且高级语言实现可以被编译为汇编语言实现。验证器可以验证汇编语言实现的行为符合低级规范。通过这样做,可以验证包括应用、库、驱动程序、操作系统等的整个软件系统以根据软件系统的高级规范来执行。

图9是包括根据一些实现执行初步验证的示例过程的流程图。过程900可以由软件开发环境的一个或多个组件执行,诸如图1的软件开发环境122。

示例计算设备和环境

图10图示了可以用于实现本文所描述的模块和功能的计算设备1000和环境的示例配置。计算设备1000可以包括至少一个处理器1002、存储器1004、通信接口1006、显示设备1008,其他输入/输出(i/o)设备1010和一个或多个大容量存储设备1012,它们能够例如经由系统总线1014或其他合适的连接而彼此通信。

处理器1002可以是单个处理单元或多个处理单元,其中所有处理单元可以包括单个或多个计算单元或多个核。处理器1002可以被实现为一个或多个微处理器、微计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令来操纵信号的任何设备。在其他能力中,处理器1002可以被配置为获取并执行存储在存储器1004、大容量存储设备1012或其他计算机可读介质中的计算机可读指令。

存储器1004和大容量存储设备1012是用于存储由处理器1002执行以执行上面所描述的各种功能的指令的计算机存储介质的示例。例如,存储器1004通常可以包括易失性存储器和非易失性存储器(例如,ram,rom等)。此外,大容量存储设备1012通常可以包括硬盘驱动器、固态驱动器、可移动介质、包括外部和可移动驱动器、存储卡、闪存、软盘、光盘(例如cd,dvd)、存储阵列、网络附接存储器、存储区域网络等。存储器1004和大容量存储设备1012可以在本文中统称为存储器或计算机存储介质,并且可以是能够存储计算机可读、处理器可执行的程序指令非暂时介质,所述计算机程序指令作为由处理器1002执行的计算机程序代码作为特定机器的被配置用于执行本文实现中所描述的操作和功能。

计算设备1000还可以包括用于与其他设备交换数据的一个或多个通信接口1006,例如经由网络、直接连接等,如上所述。通信接口1006可以促进在各种各样的网络和协议类型内通信,包括有线网络(例如,lan,电缆等)和无线网络(例如,wlan、蜂窝、卫星等)、因特网等。通信接口1006还可以提供与外部存储器(未示出)的通信,诸如存储阵列、网络附加存储器、存储区域网络等。

显示设备1008,包括诸如监视器,可以被包括在用于向用户显示信息和图像的一些实现中。其他i/o设备1010可以是从用户接收各种输入并向用户提供各种输出的设备,并且可以包括键盘、遥控器、鼠标、打印机、音频输入/输出设备等。

存储器1004可以包括可用于创建经过验证的软件系统的模块和软件部件。例如,在已经被验证的软件系统中,存储器1004可以包括应用502、公共应用504、udp/ip508、以太网510、网络驱动器512、数据类型514、sha516、tpm驱动器518、rsa520、大数522、核心数学524和操作系统526。在软件开发系统中,存储器1004还可以包括来自图1中的高级规范102、规范转换器104、低级规范106、验证器108、验证结果110、高级实现112、编译器114、汇编语言实现116、汇编器118以及机器代码实现120。

本文所描述的示例性系统和计算设备仅仅是适用于一些实现的示例,并且不旨在表示对实现本文所描述的过程、部件和特征的环境、架构和框架的使用或功能的范围任何的限制。因此,本文中的实现在许多环境或架构中操作,并且可以在通用和专用计算系统或具有处理能力的其他设备中被实现。通常,参考附图描述的功能的任何一个功能可以使用软件、硬件(例如,固定逻辑电路)或这些实现的组合来实现。本文所使用的术语“模块”、“机制”或“部件”通常表示软件、硬件或软件和硬件的组合,其可被配置为实现规定的功能。例如,在软件实现的情况下,术语“模块”、“机制”或“组件”可以表示当在处理设备上执行时执行指定任务或操作的程序代码(和/或声明型指令)设备(例如,cpu或处理器)。程序代码可以被存储在一个或多个计算机可读存储设备或其他计算机存储设备中。因此,本文描述的过程、部件和模块可以通过计算机程序产品来实现。

如本文所使用的,“计算机可读介质”包括计算机存储介质和通信介质。计算机存储介质包括在用于诸如计算机可读指令、数据结构、程序模块或其他数据的信息的存储的任何方法或技术中实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程rom(eeprom)、闪速存储器或其它存储器技术、光盘rom(cd-rom)、数字通用盘(dvd)或其他光存储器、磁带盒、磁带、磁盘存储器或其他磁存储设备、或可用于存储由计算设备访问的信息的任何其它非传输介质。

相反,通信介质可以实施诸如载波的调制数据信号中的计算机可读指令、数据结构、程序模块或其他数据。如本文所定义的,计算机存储介质不包括通信介质。

此外,本公开提供了各种示例实现,如图所图示的和所描述的。然而,本公开不限于本文所描述的和所图示的实现,而是可以扩展到其他实现,如对于本领域技术人员将是已知的或将变成已知的。在本说明书中对“一个实现”、“该实现”、“这些实现”、“一个示例”、“一些示例”、“一些实现”等的引用意味着所描述的特定特征、架构或特性被包括在至少一个实现或示例中,并且在说明书中的各个地方的这些短语的出现不必都指代相同的实现。除非另有说明,所提供的各种实现和示例不旨在相互排斥的,并且可以单独使用或彼此组合使用。

示例

可以创建包括包含多个应用中的一个应用、一个或多个设备驱动器和操作系统的软件栈的属性的规范。可以验证软件栈的属性符合规范。可以提供软件栈已经被验证为符合规范的指示。可以提供软件栈的属性符合规范的证明。例如,证明可能证明软件栈的功能正确性。作为另一个例子,证明可以证明软件栈的关系属性。该规范可以包括被表达为有限状态机的高级规范。高级语言代码可以被编译成汇编语言代码。可以验证汇编语言代码的属性以符合规范。在验证软件代码的属性符合规范之前,可以将规范转换为低级规范。

软件系统的高级语言实现可以被编译以创建汇编语言实现。对应于软件系统的高级规范可以转换为低级规范。汇编语言实现的属性可以被验证为符合低级规范。可以基于汇编语言实现来创建机器代码实现。可以在诸如可信硬件平台的可信或安全硬件上执行机器码实现。可以执行初步验证以验证高级语言实现符合高级规范。高级规范可以表示为至少一个有限状态机。验证汇编语言实现的属性符合低级规范可能包括确定汇编语言实现实现了低级规范的功能正确版本。软件系统的部件可以被验证为不能破坏软件系统的其他部件。

可以编译软件系统的高级语言实现以创建汇编语言实现。软件系统可以包括操作系统、一个或多个驱动器以及一个或多个应用。可以验证软件系统的功能正确性。可以验证汇编语言实现的关系属性。验证软件系统的功能正确性可能包括验证软件系统的信息流性质。证明可以保证:(1)公钥对应于私钥,(2)私钥仅对已验证的软件系统已知。可以通过验证软件系统的每个部件来验证软件系统的正确性。软件系统的汇编语言实现可以包括作为整体被验证的单个软件程序。软件系统的第一部件可以被验证为不能干扰软件系统的第二部件的第二规范。可以证明软件系统的远程等同性。

结论

已经用特定于架构特征和/或方法动作的语言描述虽然主题,但是在所附权利要求中定义的主题不限于上面所描述的特定特征或动作。相反,上面所描述的特定特征和动作被公开为实现权利要求的示例形式。本公开旨在涵盖所公开的实现的任何和所有修改或变化,并且所附权利要求不应被解释为限于说明书中公开的特定实现。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1