CN114995809A - 一种可证明的高安全软件构造方法及系统 - Google Patents

一种可证明的高安全软件构造方法及系统 Download PDF

Info

Publication number
CN114995809A
CN114995809A CN202210855845.3A CN202210855845A CN114995809A CN 114995809 A CN114995809 A CN 114995809A CN 202210855845 A CN202210855845 A CN 202210855845A CN 114995809 A CN114995809 A CN 114995809A
Authority
CN
China
Prior art keywords
model
software
requirement
field
language
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.)
Granted
Application number
CN202210855845.3A
Other languages
English (en)
Other versions
CN114995809B (zh
Inventor
杨林
张龙
杨峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Network Engineering Institute of Systems Engineering Academy of Military Sciences
Original Assignee
Institute of Network Engineering Institute of Systems Engineering Academy of Military Sciences
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Network Engineering Institute of Systems Engineering Academy of Military Sciences filed Critical Institute of Network Engineering Institute of Systems Engineering Academy of Military Sciences
Priority to CN202210855845.3A priority Critical patent/CN114995809B/zh
Publication of CN114995809A publication Critical patent/CN114995809A/zh
Application granted granted Critical
Publication of CN114995809B publication Critical patent/CN114995809B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/316Aspect-oriented programming techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种可证明的高安全软件构造方法及系统,所述方法包括:获取待构造的软件需求,基于自定义的需求语言表述所述软件需求,得到表述后的软件需求;基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型;基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型,得到实例化后的模型;对所述实例化后的模型进行形式化验证,基于验证结果,对所述实例化后的模型进行修正或保持,得到验证后的模型;由AADL语言描述所述验证后的模型,得到AADL模型;生成与所述AADL模型对应的C语言代码。根据本发明的方案,提高了高安全要求的嵌入式软件系统的质量和研发效率。

Description

一种可证明的高安全软件构造方法及系统
技术领域
本发明涉及软件研发技术领域,尤其涉及一种可证明的高安全软件构造方法及系统。
背景技术
嵌入式系统(Embedded System)是以应用为中心、以计算机技术为基础、软硬件可定制的专用计算机系统,该系统对功能、可靠性、成本、体积、功耗等均有严格要求。嵌入式系统包括嵌入式微处理器、硬件平台、嵌入式操作系统和应用程序等组成部分。
国际标准化组织(ISO)对计算机系统安全的定义给出的建议是:“为数据处理系统建立和采取的技术和管理的安全保护,保护计算机系统硬件、软件、数据不因偶然和恶意的原因而遭到破坏、更改和泄露”。嵌入式系统的安全问题也符合以上定义,表现为系统硬件、软件、数据因偶然的或人为的原因而遭到破坏、更改和泄露”。
嵌入式系统广泛应用于航空航天、医疗、电力、轨道交通、金融等安全攸关应用领域,系统失效可能导致灾难性的后果,软件是嵌入式系统的重要组成部分,设计开发高质量的软件是安全攸关系统的迫切要求。
形式化方法是基于数学基础和逻辑,对系统软件和硬件进行形式规约、开发和验证的技术。基于形式语言构建所开发的软件系统的规约,刻画系统不同抽象层次的模型和性质,采用形式化验证技术,证明不同形式规约之间的逻辑关系,确保软件开发不同阶段软件制品的抽象模型和性质的正确性均满足。
形式验证就是给出形式化/数学证据,来说明一个程序的执行效果满足对它的期望的过程。与之对应的是软件测试,在软件开发过程中通常采用软件测试技术来说明一个程序的执行效果与期望一致。软件测试的定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
如图1所示,传统的软件构造流程主要包括需求分析、架构设计、详细设计、编码实现和测试5个阶段。
需求分析阶段,通过调研和分析,理解用户和项目的功能、性能、可靠性等具体要求,将用户的需求表述转化为完整的需求定义,从而确定软件系统必须实现的功能。一般采用自然语言通过需求文档的形式呈现。
架构设计阶段,又称概要设计,将软件需求转化为数据结构和软件的系统结构,确定系统接口和全局数据结构。
详细设计阶段,又称过程设计,通过对架构设计进行细化,得到软件的详细的数据结构和算法;采用伪代码等形式表示算法和数据结构的细节。
编码实现阶段,根据系统的详细设计,选择合适的编程语言,实现各类数据结构的定义和算法。
软件测试阶段,是指在软件投入运行前,对软件需求分析、设计和编码的最终复审。根据软件需求设计测试用例,通过输入测试向量并观察输出结果,确定需求是否得到满足。如果存在未通过的测试用例,则需要分析原因并修改设计,直到所有测试用例通过。
传统软件开发过程中,需求分析、架构设计和详细设计等阶段通常采用自然语言描述的文档为主,图表等作为辅助,通过质量管理流程等手段来确保各个阶段能够保持一致,达到提升软件质量的目标。
但采用传统的软件构造流程,有以下四方面的问题:
(1)需求描述的不准确。传统的开发过程中,需求多是以自然语言描述,自然语言的优点是即使是不熟悉领域知识的人也能基本读懂需求含义,而且使用方便。但是自然语言缺少规范的语法和精确的语义,当需求条目增多时,难免会产生歧义、不一致、不完全等错误。而且,使用自然语言描述的需求,需求确认、需求分析和检查等工作会变得相当繁琐且容易出错,如果能有规范语法和精确语义的标准语言来描述需求,不仅能够最大限度的减少错误率,而且,后期的需求分析和检查过程,甚至可以用完全自动的方式完成。
(2)不可避免地引入人为错误。传统的设计和编码过程,主要通过编程人员完成,软件需求分析、软件架构设计以及软件编码过程中,因为功能的复杂性,可能会引入大量人为的错误。如果能够使用辅助工具开展软件设计、仿真,使用工具自动生成代码,这些过程的错误率会减少很多。
(3)测试不完备的问题。测试的目标就是保证软件实现了预先被定义的功能而且不存在未被定义的功能。测试方法可以发现并排除软件一部分的错误和缺陷,但是,它却具有以下问题:测试方法无法穷举,只能发现软件有错误和缺陷,却不能证明软件没有错误和缺陷。
(4)开发成本较高。测试必须要等到软件源代码开发之后才能进行。由于发现错误较晚,发现错误后可能需要重新开展架构设计、详细设计和编码实现工作,错误更改费用巨大。测试自动化程度低,主要由人工完成,即便使用某些自动化测试工具,测试用例的生成还是非常依赖于验证人员的经验,很难完全自动化。
发明内容
为解决上述技术问题,本发明提出了一种可证明的高安全软件构造方法及系统,用以解决高安全等级要求的软件质量保证和开发效率等技术问题。
根据本发明的第一方面,提供一种可证明的高安全软件构造方法,所述高安全是指按照国际信息技术安全评估通用标准ISO/IEC 15408中定义的计算机系统的安全等级中的最高等级 EAL 7,所述可证明是指能够证明,所述方法包括:
步骤S1:获取待构造的软件的软件需求,基于自定义的需求语言表述所述软件需求,得到表述后的软件需求;
步骤S2: 基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0;基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1;对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2
步骤S3:由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码。
进一步地,所述自定义的需求语言包括编号字段、名称字段、描述字段、类型字段、层级字段、假设字段、保证字段、以及自定义字段,其中,所述编号字段的类型为自然数,从1开始编号,每条需求对应一个唯一的编号;所述名称字段的类型为字符串,每条需求对应一个名称;所述描述字段的类型为字符串,用于对需求进行说明,说明需求对应的组件、包含的子组件、子组件间的链接关系、组件与其它组件的链接关系;所述类型字段的类型为字符串,类型字段对应的值为P11、P12、P13、P14、P15、P16、P21、P22中的一个,P11、P12、P13、P14、P15、P16、P21、P22分别表示功能性、可靠性、可用性、效率、可维护性、可移植性、领域专家提供赛博安全需求、生成的赛博安全需求;所述层级字段类型为自然数,表示需求所处的软件层级,软件层级是指软件按自顶向下设计的模式,该需求对应的模块所处的层级,最顶层模块的层级为0;假设字段类型为字符串,假设字段用于表征需求的前提假设,即该需求对应的功能模块的输入变量必须满足的约束条件,其中,假设字段对应的字段值能够解析为一阶逻辑公式,且假设字段为可选字段,默认值为假,表示没有前提约束;保证字段类型为字符串,用于表征该需求对应的功能模块的输出变量满足的属性,其中,保证字段对应的字段值能够解析为一阶逻辑公式,且保证字段为可选字段,默认值为真,表示所有属性均能满足;假设和保证成对出现,一条需求包括一个假设以及一个保证;一个功能模块可对应一条或多条需求;所述自定义字段能够根据需要定义类型,用于描述复杂数据类型,自定义字段为可选字段,默认为空。
进一步地,所述步骤S2,所述基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0,包括:
基于所述表述后的软件需求,按照自顶向下的设计方法建立所述待构造的软件对应的AADL模型作为初始模型M0,所述初始模型M0中的系统组件对应于需求层级为0的软件需求的描述字段的属性值指示的组件;所述初始模型M0中的进程组件对应于需求层级大于0的软件需求的描述字段的属性值指示的包含子组件的组件和/或子组件;所述初始模型M0中的线程组件对应于不包括子组件的组件和/或子组件;所述初始模型M0中具有层次化关系,根据软件需求的层数属性值,确定软件需求在所述初始模型M0中的层级,根据软件需求的描述字段的属性值,确定所述初始模型M0中各组件的链接关系;所述初始模型M0中的各个组件的名称与其对应的表述后的软件需求的名称字段的属性值一致。
进一步地,所述基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1,包括:
步骤S21:对每条表述后的软件需求,均执行以下操作:
步骤S211:获取所述表述后的软件需求的类型字段的属性值,若属性值为P12、P13、P14、P15、P16中的一个,则所述表述后的软件需求通过人工的方式采用其他工具进行验证,不在所述初始模型M0中实例化;
若属性值为P11、P21、P22中的一个,则所述表述后的软件需求,转换为AADL语言的附件规约,所述附件规约包括假设字段及保证字段,将所述表述后的软件需求的保证字段对应的属性值赋值给附件规约对应的保证字段的属性值,将所述表述后的软件需求的假设字段对应的属性值赋值给附件规约对应的假设字段的属性值;
步骤S212:获取所述表述后的软件需求的名称,在所述初始模型M0中查找与所述表述后的软件需求的名称一致的组件,在所述初始模型M0中增加附件规约,其中,附件规约的假设字段的属性值赋值为所述表述后的软件需求的假设字段的属性值,附件规约的保证字段的属性值赋值为所述表述后的软件需求的保证字段的属性值;
步骤S22:将M0的各个组件全部增加附件规约后得到的模型作为实例化后的模型M1,模型M1中全部的附件规约组成附件规约集合A。
进一步地,所述对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2,包括:
步骤S23:若附件规约集合A不为空,从所述附件规约集合A获取一条附件规约a,进入步骤S24;否则,进入步骤S28;
步骤S24:解析所述附件规约a,得到待验证属性p,所述附件规约a中的待验证属性p为SMT公式描述的软件需求,表示所述软件需求对应的软件模块应满足的部分性质;
步骤S25:以规约a在所述实例化后的模型M1中对应的组件为根组件;从所述根组件出发,按照自顶向下层次化展开,获取子模型,所述子模型为所述规约a对应的待验证子模型Ma;调用模型检测工具,将所述待验证属性p以及待验证子模型Ma作为所述模型检测工具的输入,进行自动化验证;
步骤S26:若验证通过,则从所述附件规约集合A中删除所述附件规约a,进入步骤S23;否则,所述模型检测工具将反例信息作为输出,返回给设计人员,设计人员基于所述反例信息确定模型M1中不能满足附件规约a的原因,进入步骤S27;
步骤S27:基于所述反例信息,修正所述实例化后的模型M1,修正后的模型M1作为验证后的模型M2,进入步骤S23;
步骤S28:将所述模型M1作为验证后的模型M2
进一步地,所述步骤S3:由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码,包括:
步骤S31:基于所述验证后的模型M2的结构,自顶向下用AADL语言逐层生成与所述验证后的模型M2对应的代码框架,即AADL模型;所述AADL模型中的每层均包括该层对应的组件的名称、对外接口、以及该层对应的各组件包括的子组件的连接关系;针对AADL模型M2,按照自顶向下逐层处理当前层包含的每个组件,如果组件不是末端组件,则生成组件的代码框架;若组件是末端组件,采用编程语言实现所述末端组件;
步骤S32:对所述AADL模型对应的C语言代码进行源代码级验证,包括:
步骤S321:对每条需求,在所述AADL模型对应的C语言代码中采用C语言断言描述的方式插入源代码级别的验证属性Pc
步骤S322:采用C语言形式化验证工具,基于所述AADL模型对应的C语言代码,得到验证模型Mc
步骤S323:采用限界模型检测方法验证Pc是否满足Mc,如果满足,验证通过,完成软件安全构造;如果不满足,返回反例信息cex1,根据cex1修改所述AADL模型对应的C语言代码,进入步骤S322。
根据本发明的第二方面,提供一种可证明的高安全软件构造系统,所述高安全是指按照国际信息技术安全评估通用标准ISO/IEC 15408中定义的计算机系统的安全等级中的最高等级 EAL 7,所述可证明是指能够证明,其特征在于,所述系统包括:
软件需求表达模块:配置为获取待构造的软件的软件需求,基于自定义的需求语言表述所述软件需求,得到表述后的软件需求;
模型生成模块:配置为基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0;基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1;对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2
代码生成模块:配置为由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码。
根据本发明的上述方案,本发明构建了精确的需求描述语言,采用基于模型的设计方法,将可证明的形式化方法应用于软件开发全流程,解决传统软件开过过程中需求描述不准确、人工编码容易引入错误、测试不完备等问题,降低了软件开发成本,减少了软件缺陷,提高了高安全要求的嵌入式软件系统的质量和研发效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明提供如下附图进行说明。在附图中:
图1为现有技术中传统软件设计开发方法流程图;
图2为本发明一个实施方式的可证明的高安全软件构造方法流程示意图;
图3为本发明一个实施方式的软件构造方法基本流程图;
图4为本发明一个实施方式的嵌入式终端功能示意图;
图5为本发明一个实施方式的基于假设/保证的组合推理验证方法流程示意图;
图6为本发明一个实施方式的可证明的高安全软件构造系统结构示意图。
具体实施方式
名词解释:
AADL:Architecture Analysis and Design Language,体系结构分析与设计语言,用于在基于模型的工程实践中,进行系统体系结构的建模和模型转换,进而借助系统设计模型实现系统的软件验证。
形式化方法:形式化方法是基于数学基础和逻辑,对系统软件和硬件进行形式规约、开发和验证的技术。
构造即正确:correct by construction,基于形式化方法,证明形式规约之间的等价转换和精化关系,以系统的形式模型为指导,逐步精化,开发出满足需要的系统,称之为构造即正确的开发方法。
安全攸关系统:广泛应用于航空航天、医疗、电力、轨道交通、金融等安全攸关应用领域,系统失效可能导致灾难性的后果。嵌入式软件系统是安全攸关系统的重要组成部分,设计开发高质量的软件是安全攸关系统的重要保障。
赛博需求:Cyber Requirements。由于嵌入式系统呈现网络化等特点,赛博空间的需求,尤其是赛博安全需求成为现代嵌入式系统设计必须考虑的因素。
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先结合图2-图3说明为本发明一个实施方式的可证明的高安全软件构造方法流程图。其中,所述高安全是指按照国际信息技术安全评估通用标准 Common Criteria(简称CC)ISO/IEC 15408中定义的计算机系统的安全等级中的最高等级 EAL 7。
如图2-图3所示,所述方法包括以下步骤:
步骤S1:获取待构造的软件的软件需求,基于自定义的需求语言表述所述软件需求,得到表述后的软件需求;
所述自定义的需求语言包括编号字段、名称字段、描述字段、类型字段、层级字段、假设字段、保证字段、以及自定义字段,其中,所述编号字段的类型为自然数,从1开始编号,每条需求对应一个唯一的编号;所述名称字段的类型为字符串,每条需求对应一个名称;所述描述字段的类型为字符串,用于对需求进行说明,说明需求对应的组件、包含的子组件、子组件间的链接关系、组件与其它组件的链接关系;所述类型字段的类型为字符串,类型字段对应的值为P11、P12、P13、P14、P15、P16、P21、P22中的一个,P11、P12、P13、P14、P15、P16、P21、P22分别表示功能性、可靠性、可用性、效率、可维护性、可移植性、领域专家提供赛博安全需求、生成的赛博安全需求;所述层级字段类型为自然数,表示需求所处的软件层级,软件层级是指软件按自顶向下设计的模式,该需求对应的模块所处的层级,最顶层模块的层级为0;假设字段类型为字符串,假设字段用于表征需求的前提假设,即该需求对应的功能模块的输入变量必须满足的约束条件,其中,假设字段对应的字段值能够解析为一阶逻辑公式,且假设字段为可选字段,默认值为假,表示没有前提约束;保证字段类型为字符串,用于表征该需求对应的功能模块的输出变量满足的属性,其中,保证字段对应的字段值能够解析为一阶逻辑公式,且保证字段为可选字段,默认值为真,表示所有属性均能满足;假设和保证成对出现,一条需求包括一个假设以及一个保证;一个功能模块可对应一条或多条需求;所述自定义字段能够根据需要定义类型,用于描述复杂数据类型,自定义字段为可选字段,默认为空;
步骤S2: 基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0;基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1;对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2
步骤S3:由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码。
按照国际信息技术安全评估通用标准 Common Criteria(简称CC)ISO/IEC 15408中定义的计算机系统的安全等级,从EAL 1级到EAL 7级。本发明提出的方法可以达到最高等级 EAL 7。按照CC的评估标准要求,如果要达到EAL5级以上,必须采用形式化方法,其中最高等级EAL7必须在需求和设计阶段采用形式化方法,在实现阶段采用部分形式化方法。本发明的软件安全构造方法,在需求、设计和实现阶段均采用形式化方法,采用本发明的软件构造方法开发的软件系统具备EAL7最高安全等级。CC的安全评估标准对应的国家标准是:GB/T183362015《信息技术安全技术信息技术安全评估准则》。
进一步地,所述软件需求包括软件性能需求及赛博需求,其中,所述软件性能需求为依据软件质量标准,待构造的软件的功能性、可靠性、可用性、效率、可维护性、可移植性的需求;所述赛博需求由领域专家提供或基于公开的网络安全漏洞库,采用机器学习与自然语言处理相结合的方式获得。
本实施例中,所述软件性能需求的描述字段为字符串类型;如果该软件性能需求可以描述为约束求解问题,则该需求的描述字段能够解析为SMT公式,并且支持基于SMT的形式化验证。SMT公式是结合了背景理论的一阶逻辑公式,可以采用基于SMT约束求解器的形式化验证工具对软件性能需求进行验证。如果该软件性能需求不能描述为约束求解器问题,则由设计人员选择需求描述方式。
本实施例中,赛博需求,特别是是赛博安全需求,在软件研发的最开始阶段将赛博需求作为软件的内在需求。
获取赛博需求有两种方式:
1、领域专家提供赛博安全需求。安全领域专家通过与设计人员沟通,理解软件系统功能、使用场景的基础上,基于专业领域知识,提出该软件的赛博安全需求,形成赛博安全需求文档。
2、基于公开的网络安全漏洞库,采用机器学习与自然语言处理相结合的方式获得赛博安全需求。即基于公开的网络安全漏洞库,采用自然语言处理方式预处理漏洞数据集,通过机器学习训练漏洞集,最后再通过自然语言处理方式生成赛博安全需求,形成结构化的赛博安全需求。
所述步骤S1,基于自定义的需求语言表述所述软件需求,包括:
获取软件需求的描述,设计开发人员基于自定义的需求语言,逐条描述软件需求,将软件需求转换成自定义需求语言,消除需求描述的二义性。
其中,转化后的基于自定义的需求语言以如下形式存储:
R{ id,name,text,type,level,assume,guarantee,userdef }
R是需求的标识符,一条需求的表述形式为R{ id,name,text,type,level,assume,guarantee,userdef },
id为需求R的编号,name为需求R的名称,text为需求R的描述,type为需求R的类型,level为需求R所处的层级,assume为需求R的假设字段,guarantee为需求R的保证字段,userdef为需求R的自定义字段。以R.id为例,表示需求R的编号字段。
本实施例中,采用JSON格式作为自定义需求语言的存储格式,所有的需求语言要素按照JSON格式定义。JSON支持结构嵌套,可以用于自定义字段的复杂数据类型扩展描述。
本实施例中的复杂数据类型,例如C语言中的结构体或者面向对象语言中的类的描述。
所述步骤S2:基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0;基于所述表述后的软件需求中各条需求描述字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1,对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2,其中:
软件系统的AADL模型包括系统组件、进程组件和线程组件三类。系统组件能够包括多个子系统组件、和/或多个进程组件;一个进程组件能够包括多个线程组件;线程组件为末端组件。
所述基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0,包括:
基于所述表述后的软件需求,按照自顶向下的设计方法建立所述待构造的软件对应的AADL模型作为初始模型M0,所述初始模型M0中的系统组件对应于需求层级为0的软件需求的描述字段的属性值指示的组件;所述初始模型M0中的进程组件对应于需求层级大于0的软件需求的描述字段的属性值指示的包含子组件的组件和/或子组件;所述初始模型M0中的线程组件对应于不包括子组件的组件和/或子组件;所述初始模型M0中具有层次化关系,根据软件需求的层数属性值,确定需求在所述初始模型M0中的层级,根据软件需求的描述字段的属性值,确定所述初始模型M0中各组件的链接关系;所述初始模型M0中的各个组件的名称与其对应的表述后的软件需求的名称字段的属性值一致。
所述基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1,包括:
步骤S21:对每条表述后的软件需求,均执行以下操作:
步骤S211:步骤获取所述表述后的软件需求的类型字段的属性值,若属性值为P12、P13、P14、P15、P16中的一个,则所述表述后的软件需求通过人工的方式采用其他工具进行验证,不在所述初始模型M0中实例化;
若属性值为P11、P21、P22中的一个,则所述表述后的软件需求,转换为AADL语言的附件规约,所述附件规约包括假设字段及保证字段,将所述表述后的软件需求的保证字段对应的属性值赋值给附件规约对应的保证字段的属性值,将所述表述后的软件需求的假设字段对应的属性值赋值给附件规约对应的假设字段的属性值;
步骤S212:获取所述表述后的软件需求的名称,在所述初始模型M0中查找与所述表述后的软件需求的名称一致的组件,在所述初始模型M0中增加附件规约,其中,附件规约的假设字段的属性值赋值为所述表述后的软件需求的假设字段的属性值,附件规约的保证字段的属性值赋值为所述表述后的软件需求的保证字段的属性值。
步骤S22:将M0的各个组件全部增加附件规约后得到的模型作为实例化后的模型M1,模型M1中全部的附件规约组成附件规约集合A;
所述对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2,包括:
步骤S23:若附件规约集合A不为空,从所述附件规约集合A获取一条附件规约a,进入步骤S24;否则,进入步骤S28;
步骤S24:解析所述附件规约a,得到待验证属性p,所述附件规约a中的待验证属性p为SMT公式描述的软件需求,表示所述软件需求对应的软件模块应满足的部分性质;
步骤S25:以规约a在所述实例化后的模型M1中对应的组件为根组件;从所述根组件出发,按照自顶向下层次化展开,获取子模型,所述子模型为所述规约a对应的待验证子模型Ma;调用模型检测工具,将所述待验证属性p以及待验证子模型Ma作为所述模型检测工具的输入,进行自动化验证;
步骤S26:若验证通过,则从所述附件规约集合A中删除所述附件规约a,进入步骤S23;否则,所述模型检测工具将反例信息作为输出,返回给设计人员,设计人员基于所述反例信息确定模型M1中不能满足附件规约a的原因,进入步骤S27;
步骤S27:基于所述反例信息,修正所述实例化后的模型M1,修正后的模型M1作为验证后的模型M2,进入步骤S23;
步骤S28:将所述模型M1作为验证后的模型M2
本实施例中,反例信息cex包含了导致当前属性p验证不通过的原因,指导开发人员修改模型M1。在步骤S28,即所有需求规约验证通过,证明当前的设计模型能够完全满足所有需求规约,将所述实例化后的模型M1作为验证后的模型M2
所述步骤S3:由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码,包括:
步骤S31:基于所述验证后的模型M2的结构,自顶向下用AADL语言逐层生成与所述验证后的模型M2对应的代码框架,即AADL模型;所述AADL模型中的每层均包括该层对应的组件的名称、对外接口、以及包括的子组件的连接关系;针对AADL模型M2,按照自顶向下逐层处理当前层包含的每个组件,如果组件不是末端组件,则生成组件的代码框架;若组件是末端组件,采用编程语言实现所述末端组件。
本实施例中,所述代码框架以C函数为单元,即非末端组件生成的代码对应一个C函数,函数名称为组件名称,函数参数为组件的对外接口,函数的调用关系为组件的链接关系。代码生成工具保证了模型与生成代码的一致性。
本实施例中,如果当前末端组件为内存相关功能,为了实现内存安全,避免C语言常见的数组越界、悬挂指针、空指针引用等内存访问安全问题,采用内存安全编程语言实现该末端组件。Ivory是常见的内存安全编程语言,采用Ivory语言实现该末端组件的功能,并完成Ivory代码的形式化验证,然后自动生成C语言。
如果末端组件为非内存相关的功能,由开发人员采用C语言按照模型M2的要求编码实现。
如果末端组件的功能能够复用,即所述末端组件的功能通过测试或者在已有系统上实际运行并且未发现问题,则进行代码复用,其中,复用的代码类型为C语言,函数名称和函数接口与模型M2的相关描述保持一致。
步骤S32:对所述AADL模型对应的C语言代码进行源代码级验证,包括:
步骤S321:对每条需求,在所述AADL模型对应的C语言代码中采用C语言断言描述的方式插入源代码级别的验证属性Pc
软件构造的主要思想就是逐层细化,从而达到构造即正确的目的。本实施例中,每一个组件上的具体需求都采用AADL的附件规范进行了描述;编码实现或者代码生成的时候,也是根据AADL模型生产对应的实现代码,所以每一个需求都可以由设计开发人员编写成断言类型的属性Pc。本实施例中,插入的C语言断言与需求描述的属性一致,描述的层次分别在设计层和源代码层。
步骤S322:采用C语言形式化验证工具,基于所述AADL模型对应的C语言代码,得到验证模型Mc;
步骤S323:采用限界模型检测方法验证Pc是否满足Mc,如果满足,验证通过,完成软件安全构造;如果不满足,返回反例信息cex1,根据cex1修改所述AADL模型对应的C语言代码,进入步骤S322。
以下结合图4-图5,说明本发明的实施方式。
根据本发明实施例的嵌入式终端的软件安全构造为例,如图3所示为典型的嵌入式终端的功能组成,包括任务区和通信区两大主要功能,其中任务区包括登录认证模块和业务处理模块,通信区包括消息接收和消息发送模块。
步骤S1,获取需求。包括获取一般需求、获取赛博需求、需求描述。
步骤S11,获取一般需求。嵌入式终端设备的一般需求如下:
功能需求包括登录认证、业务处理、消息接收、消息发送功能。
可靠性、可用性、效率、可维护性、可移植性的要求,按照软件质量通用标准要求。
通过与用户方沟通确认,最终形成自然语言描述的需求文档。一般需求的获取方式与传统的软件开发流程中的需求分析相同。
步骤S12,获取赛博需求。获取赛博需求,特别是是赛博安全需求,在软件研发的最开始阶段将赛博需求作为软件的内在需求。
获取赛博安全需求有两种方式:
1、领域专家提供赛博安全需求。安全领域专家通过与设计人员沟通,理解软件系统功能、使用场景的基础上,基于专业领域知识,提出该软件的赛博安全需求,形成赛博安全需求文档。本系统为了确保安全通信,要求“所有通信的消息必须加密传输”。
2、生成的赛博安全需求。采用机器学习和自然语言处理相结合的方式生成的赛博安全需求。基于公开的网络安全漏洞库,采用自然语言处理方式预处理漏洞数据集,通过机器学习训练漏洞集,最后再通过自然语言处理方式生成赛博安全需求,形成结构化的赛博安全需求。已公开的漏洞集,例如CVE和CWE等为训练样本,首先获取嵌入式终端的漏洞集合,然后进行训练,最终形成适用于本系统的赛博安全需求。
步骤S13,需求描述。按照定义的需求语言进行需求描述,自然语言描述为“只有合法用户才可以发送消息”,描述如下:
R{
id=“1”,
name=“worksystem”,
text=“只有合法用户才可以发送消息”,
type=“P11”,
level=“1”,
assume=“(0<=faceid<=1000) and (300<=zhudong<=1200)”,
guarantee=“if (0<=faceid<=5) to_ext=zhudong else to_ext= -1”,
userdef=“未定义”
}
to_ext表示发送的消息长度,如果为-1表示不能发送消息。
步骤S2,设计与验证。
步骤S21,系统初始建模;
根据步骤13生成的需求描述R,采用支持层次化的建模语言,由软件设计人员建立系统的初始模型M0。本发明所述层次化建模语言为AADL语言,建立嵌入式系统模型,top_system即嵌入式终端系统,extsystem即通信区,包括消息接收和消息发送等模块,负责与外部通信;worksystem即任务区包括登录认证和业务处理等模块。
步骤S22,需求分配;遍历步骤13生成的需求描述。
根据需求R的描述,结合初始模型,对需求细化分配,包括了3条附件规约,分别对应worksystem、task_process、be_preocess三个组件。附件规约集合A={a1,a2,a3}。
步骤S23,需求验证;输入为所有附件规约集合A和初始模型M0,采用基于假设/保证的组合推理技术进行形式化验证。具体算法如下:
步骤S23.1,设置初始模型M0作为当前模型M;
步骤S23.2,如果集合A不为空,则从集合A中获取一条附件规约a;如果集合A为空,直接跳转至步骤S25。
步骤S23.3,解析规约a,得到待验证属性p。
步骤S23.4,以规约a在当前模型M中所在的组件为根组件,按照自顶向下层次化展开的方式,得到一个子系统模型,作为验证模型Mv
步骤S23.5,调用模型检测工具,以p和Mv为输入,进行自动化验证;
步骤S23.6,如果验证通过,则从集合A中删除规约a,跳转至步骤S23.2;如果验证不通过,则记录模型检测工具返回的反例信息cex,并跳转至步骤S24。
步骤S24,模型修改。反例信息cex包含了导致当前属性p验证验证不通过的原因,指导开发人员修改当前模型M,修改后的模型M’。设置模型M’作为当前模型M,然后跳转至步骤S23.2。
当前模型中的a1、a2、a3均验证通过,无需修改模型,验证通过。
对于每一条附件规约,AADL模型的基于假设/保证的组合推理技术验证方法如图5所示。
根据输入的AADL模型和附件规约,得到验证模型;然后将验证模型型解析成抽象语法树;通过分析器,将抽象语法树转换成同步语言Lustre程序;调用模型检测工具对生成的Lustre程序进行验证;如果验证结果为通过,则表示验证完成;如果验证结果产生了反例信息cex,则修改AADL模型,重新进行验证。
步骤S25,模型确认。所有需求规约验证通过,证明当前的设计模型能够完全满足所有需求规约。将当前模型M作为设计阶段的最终模型Mf
步骤S3,编码与验证。输入为设计阶段的最终模型Mf,该模型采用AADL语言描述,自动生成的代码为C语言代码。
步骤S31,自动生成框架代码;根据最终模型Mf,采用支撑AADL语言的代码生成工具生成组件的框架代码,按照模型自定向下的层次化方法,逐层生成代码框架。每一层生成的代码包括的当前组件的名称、对外接口,当前组件包括的子组件的链接关系。生成代码的代码以C函数为单元,每个组件生成的代码对应一个C函数,函数名称为组件名称,函数参数为组件的对外接口,函数的调用关系为组件的链接关系。代码生成工具保证了模型与生成代码的一致性。如果当前组件是末端组件,跳转至步骤S32。
步骤S32,末端组件代码实现;
如果当前末端组件为内存相关功能,为了实现内存安全,避免C语言常见的数组越界、悬挂指针、空指针引用等内存访问安全问题,采用内存安全编程语言实现该末端组件。Ivory是常见的内存安全编程语言,采用Ivory语言实现该末端组件的功能,并完成Ivory代码的形式化验证,然后自动生成C语言。
如果当前组件为非内存相关的功能,按照设计模型Mf采用C语言编码实现。
如果当前组件的功能可以采用已经经过大量测试或者在已有系统上实际运行并且未发现问题,则直接采用该代码,代码类型应为C语言。
步骤S33,源代码级验证。根据步骤S31和步骤S32生成的代码,采用C代码形式化验证工具进行验证。
步骤S33.1,根据需求R逐条定义采用C语言断言描述的验证属性Pc
步骤S33.2,采用C语言形式化验证工具CBMC,读入步骤S31和步骤S32生成的代码,得到验证模型Mc
步骤S33.3,采用限界模型检测技术验证Pc是否满足Mc;如果满足,验证通过,完成软件安全构造;如果不满足,返回反例信息cex,根据cex修改源代码实现,跳转至步骤S33.2,重新验证。
采用本发明的嵌入安全构造方法,能够运用基于数学和逻辑的形式化方法,保证软件的安全性,并且能够提供证明,提升了软件的质量的同时,能够给出可证明的可信证据链。
图6为本发明一个实施方式的可证明的高安全软件构造系统的结构示意图,如图6所示,所述高安全是指按照国际信息技术安全评估通用标准ISO/IEC 15408中定义的计算机系统的安全等级中的最高等级 EAL 7,所述可证明是指能够证明,其特征在于,所述系统包括:
软件需求表达模块:配置为获取待构造的软件的软件需求,基于自定义的需求语言表述所述软件需求,得到表述后的软件需求;
模型生成模块:配置为基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0;基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1;对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2
代码生成模块:配置为由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码。
本发明实施例进一步给出一种系统,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如前所述的方法。
本发明实施例进一步给出一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如前所述的方法。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,实体机服务器,或者网络云服务器等,需安装Windows或者Windows Server操作系统)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

Claims (7)

1.一种可证明的高安全软件构造方法,所述高安全是指按照国际信息技术安全评估通用标准ISO/IEC 15408中定义的计算机系统的安全等级中的最高等级 EAL 7,所述可证明是指能够证明,其特征在于,所述方法包括:
步骤S1:获取待构造的软件的软件需求,基于自定义的需求语言表述所述软件需求,得到表述后的软件需求;
步骤S2: 基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0;基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1;对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2
步骤S3:由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码。
2.如权利要求1所述的软件构造方法,其特征在于,所述自定义的需求语言包括编号字段、名称字段、描述字段、类型字段、层级字段、假设字段、保证字段、以及自定义字段,其中,所述编号字段的类型为自然数,从1开始编号,每条需求对应一个唯一的编号;所述名称字段的类型为字符串,每条需求对应一个名称;所述描述字段的类型为字符串,用于对需求进行说明,说明需求对应的组件、包含的子组件、子组件间的链接关系、组件与其它组件的链接关系;所述类型字段的类型为字符串,类型字段对应的值为P11、P12、P13、P14、P15、P16、P21、P22中的一个,P11、P12、P13、P14、P15、P16、P21、P22分别表示功能性、可靠性、可用性、效率、可维护性、可移植性、领域专家提供赛博安全需求、生成的赛博安全需求;所述层级字段类型为自然数,表示需求所处的软件层级,软件层级是指软件按自顶向下设计的模式,该需求对应的模块所处的层级,最顶层模块的层级为0;假设字段类型为字符串,假设字段用于表征需求的前提假设,即该需求对应的功能模块的输入变量必须满足的约束条件,其中,假设字段对应的字段值能够解析为一阶逻辑公式,且假设字段为可选字段,默认值为假,表示没有前提约束;保证字段类型为字符串,用于表征该需求对应的功能模块的输出变量满足的属性,其中,保证字段对应的字段值能够解析为一阶逻辑公式,且保证字段为可选字段,默认值为真,表示所有属性均能满足;假设和保证成对出现,一条需求包括一个假设以及一个保证;一个功能模块可对应一条或多条需求;所述自定义字段能够根据需要定义类型,用于描述复杂数据类型,自定义字段为可选字段,默认为空。
3.如权利要求1所述的软件构造方法,其特征在于,所述步骤S2,所述基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0,包括:
基于所述表述后的软件需求,按照自顶向下的设计方法建立所述待构造的软件对应的AADL模型作为初始模型M0,所述初始模型M0中的系统组件对应于需求层级为0的软件需求的描述字段的属性值指示的组件;所述初始模型M0中的进程组件对应于需求层级大于0的软件需求的描述字段的属性值指示的包含子组件的组件和/或子组件;所述初始模型M0中的线程组件对应于不包括子组件的组件和/或子组件;所述初始模型M0中具有层次化关系,根据软件需求的层数属性值,确定软件需求在所述初始模型M0中的层级,根据软件需求的描述字段的属性值,确定所述初始模型M0中各组件的链接关系;所述初始模型M0中的各个组件的名称与其对应的表述后的软件需求的名称字段的属性值一致。
4.如权利要求3所述的软件构造方法,其特征在于,所述基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1,包括:
步骤S21:对每条表述后的软件需求,均执行以下操作:
步骤S211:获取所述表述后的软件需求的类型字段的属性值,若属性值为P12、P13、P14、P15、P16中的一个,则所述表述后的软件需求通过人工的方式采用其他工具进行验证,不在所述初始模型M0中实例化;
若属性值为P11、P21、P22中的一个,则所述表述后的软件需求,转换为AADL语言的附件规约,所述附件规约包括假设字段及保证字段,将所述表述后的软件需求的保证字段对应的属性值赋值给附件规约对应的保证字段的属性值,将所述表述后的软件需求的假设字段对应的属性值赋值给附件规约对应的假设字段的属性值;
步骤S212:获取所述表述后的软件需求的名称,在所述初始模型M0中查找与所述表述后的软件需求的名称一致的组件,在所述初始模型M0中增加附件规约,其中,附件规约的假设字段的属性值赋值为所述表述后的软件需求的假设字段的属性值,附件规约的保证字段的属性值赋值为所述表述后的软件需求的保证字段的属性值;
步骤S22:将M0的各个组件全部增加附件规约后得到的模型作为实例化后的模型M1,模型M1中全部的附件规约组成附件规约集合A。
5.如权利要求4所述的软件构造方法,其特征在于,所述对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2,包括:
步骤S23:若附件规约集合A不为空,从所述附件规约集合A获取一条附件规约a,进入步骤S24;否则,进入步骤S28;
步骤S24:解析所述附件规约a,得到待验证属性p,所述附件规约a中的待验证属性p为SMT公式描述的软件需求,表示所述软件需求对应的软件模块应满足的部分性质;
步骤S25:以规约a在所述实例化后的模型M1中对应的组件为根组件;从所述根组件出发,按照自顶向下层次化展开,获取子模型,所述子模型为所述规约a对应的待验证子模型Ma;调用模型检测工具,将所述待验证属性p以及待验证子模型Ma作为所述模型检测工具的输入,进行自动化验证;
步骤S26:若验证通过,则从所述附件规约集合A中删除所述附件规约a,进入步骤S23;否则,所述模型检测工具将反例信息作为输出,返回给设计人员,设计人员基于所述反例信息确定模型M1中不能满足附件规约a的原因,进入步骤S27;
步骤S27:基于所述反例信息,修正所述实例化后的模型M1,修正后的模型M1作为验证后的模型M2,进入步骤S23;
步骤S28:将所述模型M1作为验证后的模型M2
6.如权利要求5所述的软件构造方法,其特征在于,所述步骤S3:由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码,包括:
步骤S31:基于所述验证后的模型M2的结构,自顶向下用AADL语言逐层生成与所述验证后的模型M2对应的代码框架,即AADL模型;所述AADL模型中的每层均包括该层对应的组件的名称、对外接口、以及该层对应的各组件包括的子组件的连接关系;针对AADL模型M2,按照自顶向下逐层处理当前层包含的每个组件,如果组件不是末端组件,则生成组件的代码框架;若组件是末端组件,采用编程语言实现所述末端组件;
步骤S32:对所述AADL模型对应的C语言代码进行源代码级验证,包括:
步骤S321:对每条需求,在所述AADL模型对应的C语言代码中采用C语言断言描述的方式插入源代码级别的验证属性Pc
步骤S322:采用C语言形式化验证工具,基于所述AADL模型对应的C语言代码,得到验证模型Mc
步骤S323:采用限界模型检测方法验证Pc是否满足Mc,如果满足,验证通过,完成软件安全构造;如果不满足,返回反例信息cex1,根据cex1修改所述AADL模型对应的C语言代码,进入步骤S322。
7. 一种可证明的高安全软件构造系统,所述高安全是指按照国际信息技术安全评估通用标准ISO/IEC 15408中定义的计算机系统的安全等级中的最高等级 EAL 7,所述可证明是指能够证明,其特征在于,所述系统包括:
软件需求表达模块:配置为获取待构造的软件的软件需求,基于自定义的需求语言表述所述软件需求,得到表述后的软件需求;
模型生成模块:配置为基于所述表述后的软件需求,采用AADL语言建立与所述待构造的软件对应的初始模型M0;基于所述表述后的软件需求中各条需求的类型字段对应的属性值,实例化所述初始模型M0,得到实例化后的模型M1;对所述实例化后的模型M1进行形式化验证,基于验证结果,对所述实例化后的模型M1进行修正或保持,得到验证后的模型M2
代码生成模块:配置为由AADL语言描述所述验证后的模型M2,得到AADL模型;生成与所述AADL模型对应的C语言代码。
CN202210855845.3A 2022-07-21 2022-07-21 一种可证明的高安全软件构造方法及系统 Active CN114995809B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210855845.3A CN114995809B (zh) 2022-07-21 2022-07-21 一种可证明的高安全软件构造方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210855845.3A CN114995809B (zh) 2022-07-21 2022-07-21 一种可证明的高安全软件构造方法及系统

Publications (2)

Publication Number Publication Date
CN114995809A true CN114995809A (zh) 2022-09-02
CN114995809B CN114995809B (zh) 2022-09-30

Family

ID=83021322

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210855845.3A Active CN114995809B (zh) 2022-07-21 2022-07-21 一种可证明的高安全软件构造方法及系统

Country Status (1)

Country Link
CN (1) CN114995809B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140019943A1 (en) * 2012-07-10 2014-01-16 Honeywell International Inc. Systems and methods for verifying expression folding
CN108196827A (zh) * 2017-12-08 2018-06-22 南京航空航天大学 非形式化需求规约模板到形式化设计模型的自动转换方法
CN109634600A (zh) * 2018-10-30 2019-04-16 西安电子科技大学 一种基于安全扩展SysML和AADL模型的代码生成方法
CN114385501A (zh) * 2022-01-12 2022-04-22 中航机载系统共性技术有限公司 一种安全关键软件验证方法、装置、设备及介质
CN114756213A (zh) * 2022-06-14 2022-07-15 军事科学院系统工程研究院网络信息研究所 一种智能控制系统代码自动生成方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140019943A1 (en) * 2012-07-10 2014-01-16 Honeywell International Inc. Systems and methods for verifying expression folding
CN108196827A (zh) * 2017-12-08 2018-06-22 南京航空航天大学 非形式化需求规约模板到形式化设计模型的自动转换方法
CN109634600A (zh) * 2018-10-30 2019-04-16 西安电子科技大学 一种基于安全扩展SysML和AADL模型的代码生成方法
CN114385501A (zh) * 2022-01-12 2022-04-22 中航机载系统共性技术有限公司 一种安全关键软件验证方法、装置、设备及介质
CN114756213A (zh) * 2022-06-14 2022-07-15 军事科学院系统工程研究院网络信息研究所 一种智能控制系统代码自动生成方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李勇等: "基于需求的形式化建模与验证方法研究", 《计算机技术与发展》 *

Also Published As

Publication number Publication date
CN114995809B (zh) 2022-09-30

Similar Documents

Publication Publication Date Title
US11416226B2 (en) System and method for compiling high-level language code into a script executable on a blockchain platform
US9063672B2 (en) Systems and methods for verifying model equivalence
Küster et al. Validation of model transformations–first experiences using a white box approach
US8041554B1 (en) Method and system for the development of high-assurance microcode
US11971808B2 (en) Generation of test models from behavior driven development scenarios based on behavior driven development step definitions and similarity analysis using neuro linguistic programming and machine learning mechanisms
CN112231205B (zh) 基于smt求解器的一阶逻辑公式程序验证方法及系统
CN114253860A (zh) 接口误用缺陷检测方法、装置、可读介质及电子设备
US20140366146A1 (en) Interactive analysis of a security specification
CN114153422A (zh) 一种基于形式化模型的智能合约代码设计生成方法及系统
Engels et al. Model-based verification and validation of properties
CN114995809B (zh) 一种可证明的高安全软件构造方法及系统
CN117113080A (zh) 数据处理和代码处理方法、装置、一体机和存储介质
CN114510414B (zh) 一种基于符号执行对智能合约功能属性进行形式化验证的方法及系统
CN115470152B (zh) 测试代码生成方法、测试代码生成装置以及存储介质
Wolf et al. Concise outlines for a complex logic: a proof outline checker for TaDA
US11442845B2 (en) Systems and methods for automatic test generation
CN111382066A (zh) 一种开发中软件定义网络应用安全属性测试方法
Jnanamurthy et al. Formal specification at model-level of model-driven engineering using modelling techniques
Pona et al. Formally-Verified ASN. 1 Protocol C-language Stack
US20240176722A1 (en) Automated public certification of specifications and software
Brucker et al. Model Transformation as Conservative Theory-Transformation
Zschaler et al. Towards using constructive type theory for verifiable modular transformations
Tschannen Automatic verification of Eiffel programs
Freitas et al. A Chain Datatype in Z.
Shin et al. Non-Functional Requirements Discovery and Quality Assurance Using Goal Model for Earthquake Warning System in Operation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant