軟體系統安全性(software system safety)也稱為軟體安全(Software safety),要確保用在生命攸關系統的軟體,不會讓系統產生危害。
許多不同領域的安全標準,會指導安全相關軟體如何開發和如何測試。大部分會依軟體應用的關鍵程度為軟體分級,並針對不同等級的軟體,說明在開發和驗證過程需要用的技術和量測方式:
- 通用電子安全關鍵系統的軟體:IEC 61508(標準中的第3部份)
- 車用軟體:ISO 26262 (標準中的第6部份)
- 鐵路軟體:EN 50716
- 飛航軟體:
- 空中交通管理軟體:DO-278A/ED-109A
- 醫療軟體:
- 核電廠:IEC 60880
詞語
系統安全是總體性的要求,目的是要將技術系統中的風險降到可接受的程度,以此實現安全性。根據功能安全標準IEC 61508和MIL-STD-882E就使用此一詞語)。後者強調軟體只會造成其技術系統的傷害(參考NASA Software Safety Guidebook, chapter 2.1.2),而其傷害會對系統周圍有影響。
軟體安全的目的是確保軟體不會造成所在系統的危害,而且此事可以確認並且證明。這一般是用指定軟體的「安全等級」,並且選擇適當的開發程序以及證認程序來達到。
指定安全等級
創建安全相關軟體時的第一步是依照其安全關鍵程度來分類。不同安全標準有各自的分類:像是的軟體等級A-E。IEC 25010提出流程會影響內在的軟體品質屬性(程式碼品質),因此也會影響外在軟體品質屬性(像是功能性和可靠度)。
以下是一些安全軟體的開發流程中會提到的活動和概念。
文件
在本質上,所有軟體安全標準都會要求針對開發流程和驗證流程全面且完整的文件。通常這些文件需經過第三方的評審和核可,是安全相關軟體核可的前提。文件包括許多的計劃文件、需求規格、軟體架構以及設計文件、不同抽象程度的測試案例、工具鑑定報告、評審證據、驗證和確認(verification and validation)結果等。在EN 50716的圖C.2),但現有的軟體安全標準沒有要求使用其中任何一種方法,甚至是不鼓勵使用,例如 DO178C的4.1.2條款提到軟體設計錯誤「和硬體失效不一樣。硬體失效有失效率,而軟體錯誤的機率無法量化。」
Safety和security
軟體安全性(Software safety)和保安(security,保證資訊只會被授權使用者使用,保證資訊不會被破壞)注重的層面不同。若安全相關的軟體,可能會被修改盜用(secure相關問題),就可能會出現保安(security)的隱患。另一方面,有些保安(security)上的實務(例如頻繁且定期的更新補丁),和已實務的安全實務相衝突(在已運作的系統要變更任何事務,都需要嚴謹的測試以及驗證)。
人工智慧
使用人工智慧技術(例如机器学习)的軟體,其生命週期和傳統軟體差異很大。相對於以傳統方式開發的系統,上述軟體的行為不容易預測。現今仍在探討是否要在安全領域使用這類軟體,以及如何使用。目前,相關標準普遍不認可人工智慧和機器學習的應用。例如,EN 50716(表 A.3)指出,不建議在任何安全完整性等級中使用人工智慧和機器學習。
敏捷开发方法
敏捷软件开发其特徵是會有非常多次的迭代,有時仍被認為過於混亂,不適用於安全相關的軟體開發。這一部份可能是因為敏捷開發宣言中提到的「可工作的軟體勝過詳盡的文件」。大部份軟體安全相關標準是類似傳統瀑布模型的生命週期,有些標準則允許更靈活的作法。DO-178C中提到「軟體生命週期的過程可以是迭代的,即可以重複進入和重新進入。」 EN 50716的附錄C有說明如何使用迭代式的開發週期,同時符合該標準的要求。
相關條目
*
- IEC 61508 - 電子/電機/可程式電子安全關鍵系統的功能安全
- ISO 26262 - 道路車輛 – 功能安全
- 功能安全
- 软件质量保证
*
腳註
參考資料
此條目使用美軍的[http://www.monmouth.army.mil/cecom/safety/sys_service/software_handbook.htm Software handbook] 裡的公開領域文件。
评论 (0)