以下文章来源于汽车知识共享空间 ,作者不贰
在聊安全软件之前,我们首先来看两个非常重要的概念:
完整性(Integrity): 软件或者系统用来表示其可以正确工作(work correctly)的定量或者定性的属性,它有时会用系统不满足功能正确的概率来表示。
可用性(Availability):软件或者系统用来表示其在给定的时间点上处于功能状态的定量或者定性的属性,它有时会用系统不能提供它的有效输出的概率来表示。
如果系统完整性丧失会导致系统出现不正确操作即故障功能(malfunction),例如汽车上的误导性提示信息,汽车的意外加速或者意外制动转向,民航上的TCAS系统(防撞系统)错误推荐等等。为了保持系统的完整性,通常会要求架构设计时采取一些措施来预防或者中和故障(fault)。这些架构措施包括 异构冗余(不同的算法实现同样的功能),故障检测,功能降级等来阻止这些完整性相关故障或者从这些完整性故障中保护系统。所以,系统设计时需要提出故障检测和响应或者故障控制需求,这些就是汽车行业常见的安全需求和安全目标。
在自动驾驶不断推进的今天,系统不仅要保持完整性还需要保持可用性。可用性和完整性的不同在于,可用性要求系统在所有可预见的操作条件下(无论是正常的还是异常的)持续保持功能或者可恢复。也就是说无论是随机的硬件故障还是软件出现的系统性故障,在故障发生时或者发生后,关键功能必须保持可用。高可用性通常要求系统具备高可靠性的冗余设计。如果通过冗余来保证可用性,那么系统需要能够检测故障并能快速恢复。这就要求系统设计时提出冗余管理和故障管理的需求。
那么回到本文的主题-什么样的软件算是功能安全软件?软件本身并没有安全与否的说法,举个生活中的例子。我们可以把软件看作水,水可以存在于江河湖海,也可以存在于沟渠茅舍。水可以用来灌溉也可以用来养鱼浇花,但是,一旦我们把水给人喝,那么它必须达到直饮的标准。软件也是如此,一旦软件被用于安全关键系统比如汽车、高铁或者飞机,软件就具备了安全属性的要求。而安全本身一定是有上下文的,脱离上下文来谈安全就像是脱离应用来谈水质一样,最终极可能造就饮用水重金属超标,灌溉水需要达到直饮标准的闹剧。
很多人或许会说,我开发的是商用现货软件(commercial off the shelf -COTS),最典型的比如数据库或者办公软件,企业做完市场调查,设计好后直接拿出来销售,没有上下文。其实不然,如果这些软件被应用与安全关键系统,企业有责任也有义务去对安全关键的功能进行假设和分析(在汽车行业就是所谓的SEooc).
说了这么多,我们可以直白的概括一下,所谓的功能安全软件即在上下或者假设应用中,进行了充分安全分析并且采用了当前最新技术水平进行开发的高可靠性高可用性软件。这概括中包含了两个概念和一个目的。两个概念一个是软件必须进行安全分析,另一个是软件必须采用当前最新的技术水平(state of art)进行开发。一个目的是,达到高可靠性和高可用性的要求。
所谓的软件安全分析,概括来看可以细分为两个大类一个是概念设计的安全分析,一个相关失效的安全分析。
概念设计的安全分析通常会有FTA,FMEA,ETA等,总的来说概念设计的安全分析又可以分成两类一个是针对单点失效的分析常见的如FMEA,另一个是针对多点失效的分析常见的如FTA。以FMEA为例的软件概念安全分析,到底分析什么呢?在说明这个之前我们首先搞清楚安全分析的目的。软件安全分析主要是识别设计中可能存在的缺陷并针对这些设计缺陷设计对应的策略。以FMEA为例,软件概念安全分析可以概括为三类,功能概念分析,接口设计分析,详细设计分析(目前这个层次的分析在很多标准如26262中是不做要求的)。它们涵盖常见的软件功能性故障如活锁,死锁,数据崩溃,和信息传递故障如信息延迟,信息错误等还有设计故障如算法奇异性,变量错误等。
相关性失效分析主要是因为软件中存在不同影响级别的功能,需要通过分析进行识别和保护。相关失效分析通常会包含两个大类,一个是级联失效分析,一个是共因失效分析。这个地方很容易出现混淆,因为一个故障是共因的还是级联的在上下文中是可以相互转换的。一般来说对于没有安全属性分解(ASIL 分解)分析级联失效就可以了,如果进行了分解,必须进行共因失失效分析。针对这两种类型一些标准中都给了很多最佳实践进行参考,比如软件级联考虑时间、内存和信息三个方面。软件共因可以从资源、通讯,系统耦合等六个方面进行分析。
采用安全分析还不能够充分保证软件安全,还需要采用当前最新技术水平进行开发,为什么会这样。主要是因为软件规模不断增加,而彻底的详细分析和穷举测试执行起来也不太可能。这时候,我们需要借助当前的最新技术水平来帮助我们实现更高的可靠性。最新技术水平可以分两个大类一个是流程的最佳实践如ASPICE,CMMI等,一个技术层面的基本要求如高内聚、低耦合的架构,MISRA C等语言子集的使用。
现代社会技术发展越来越快,软件规模不断增长,我们对安全的要求也在同步提升,从传统汽车领域的失效分析,到万物互联带来的安全攻击分析。作为从业者,我们对功能安全的要求不只是对产品负责,也是对我们自己的家人和朋友负责,通过越来越多安全从业人员的努力,我们希望可以让越来越多人从容的享受交通的便利,生活的便捷,无需为不知何时会降临的意外忧心忡忡。
已完成
数据加载中