闲话安全关键系统系统(五)" F6 n- g/ `) V' g' ?- p
2 w- l& W+ ^/ X! Q' Y# l任何理论的发展最终到实际中都要以某种形式固定下来,这些形式的东西,术语称之为“过程”。比如软件开发过程、项目管理过程等等。- ]6 s% H1 ?% |8 y
安全系统也不例外,它也有一个过程,我们称为“安全过程”,更时髦一点,叫“安全生命周期”。6 K# S" n `" O
, O2 q P$ g, t8 S& U/ S% q+ u! E5 ^3 w0 y如果你对软件开发很熟悉,那么这些概念并不陌生,常见的软件生命周期模型有瀑布模式,螺旋模型,V模型。一般来说,从V&V的角度看,V模型更合适。我们也可以对照V模型,把安全生命周期套用一下。如下图所示。
6 P( b i' P( `: \. W' `9 T* b' G
8 S: c5 n1 C$ v图1. 安全生命周期与系统开发生命周期示意图
/ V! F9 ` l: ?# ]2 K( A
+ Y4 v; d- f3 A1 K/ F5 H/ X5 W& f) {1 Z. F& f4 | u0 J) R9 |
对于开发安全系统来说,这两个过程是相互关联和相互影响的,不过现实中,往往只是重视了开发过程的生命周期,而把安全生命周期忽略了,或者认为在开发过程中嵌入一些安全生命周期的内容就可以了,这些都是不正确的方法。严格来说,安全生命周期要有一个独立的团队来完成,通常意义上的软件工程师或硬件工程师是不能胜任这个工作的,需要安全工程师这个重要的角色。$ h/ |: P! A v& M* l3 K# @' F
上图中的系统开发过程中的活动的含义和内容你很容易google到,这里就不废话了。我们说说与之对应的安全生命周期中的相关活动。
1 g* x% @: A2 m2 A
( ^, X C' y8 I6 S6 B: U安全生命周期包括6个阶段:& G( V- M* R1 ^: {6 a9 z( C
1.危害识别(Hazard Identification)
" b! u+ W1 x2 f, f3 v; g安全系统开发一开始,就要考虑如何识别基本的危害。开发人员要管理、消除这些危害,并在整个系统开发过程中进行记录。危害的记录一般采用危害列表或危害日志的形式。这些危害往往是通过对开发阶段中需求分析或规格进行研究得到的。' O/ a' j5 r2 K& ]& O U
" S: ` n( Q8 f/ h- ^! F" ]
2.风险评估(Risk Assessment)( K2 s6 x3 K8 _4 h
风险评估阶段要对识别出的危害进行研究,确定它们的严重程度和可能性。根据安全标准的不同,这个阶段采用的方法也有所不同。这个阶段是产生系统安全需求的源头,而且产生的安全需求对软硬件需求和设计也存在影响。风险评估的一个重要概念就是“可容忍的风险”(tolerable risk)。达到可容忍的分析的一个方法就是把风险降低到尽可能的小(ALARP原则,还记得我们第三讲中提到的这个概念吗?)。) E' H' y, M8 y6 _3 ~* G4 k8 v
4 o/ j( ?4 Y: y+ ~* s( _; i4 n5 C3.初步系统安全评估(Preliminary System Safety Assessment, PSSA)8 H" a1 a# s( [" e7 {
PSSA要对系统体系结构进行系统的评估来确定失效是如何导致已识别的危害。这个阶段你可以使用FTA或FMEA或HAZOP这些方法。这个过程有助于确认系统设计是否满足安全需求,也有助于更准确的阐述安全需求。这个阶段对软硬件体系结构和设计都有影响。
* d2 C! j1 l. |& R
- m2 x4 `. `0 b' R# F: {8 P4.共因分析(Common Cause Analysis, CCA)% c1 b7 d- o% v8 f
事实上,共因分析在整个系统开发过程中都是要做的。CCA主要是为了识别功能的独立性或功能之间的依赖关系。一般常用3种方法:区域分析(zonal analysis),检查系统是否存在一个特定位置使得故障影响独立性;特殊风险分析(particular risks analysis)检查系统对环境事件是否免疫;共因模式分析(common mode analysis)识别系统失效是否独立,包括检查软硬设计缺陷。6 r3 A o3 l0 A& e$ U; b& D
* ~7 N2 B7 X9 O+ d$ L2 X5.系统安全评估(System Safety Assessment, SSA) E$ P5 V( f: I* G. `( g# c9 d* D
SSA是安全生命周期的确认阶段。在这个阶段中,要搜集那些能够证明安全需求得到满足、达到所希望的完整性的证据。这个阶段与软件开发过程联系比较紧密,比如,通过软件测试保证实现与需求符合,开发过程符合安全标准, 这些都属于证据。( p# `2 w4 G. h9 j! ]; N7 ~$ r: P8 |) p
5 z# | y6 B- [, O7 l( m" C8 b6.提交安全案例(Delivery of Safety Case)% v# I4 Z% ?0 X' [0 F
事实上,这个阶段大部分都是文档性质的工作。安全案例就是一个文档,它描述了整个系统的安全相关的重要内容,为系统的安全性提供论据和论证。这个文档是给评估机构的,目的就是让别人确信你的系统是安全的。这个文档实际上是整个安全生命周期过程的总结,是对整个安全生命周期过程的关键点的索引。" {7 g, B3 B& ]/ k, v$ M1 D1 C
* C4 E( k3 U/ ]8 u参考文献:Philippa Mary Conmy,Safety Analysis of Computer Resource Management Software, PhD Thesis, University of York, 2005. |