セキュリティ要件=機能要件?

yousさんが「分散アプリケーションのセキュリティ」について解説されていたので、便乗/誘発されてセキュリティについて考えてみた。

まずよくわからないのはセキュリティ要件は機能要件なのか、非機能要件なのかということだ。Functionality=機能要件?を参照してほしい。FRUEMP(ISO 9126)では非機能要件であり、FURPSでも非機能扱いのようではある。しかし、セキュリティ要件に対する解決策は機能として実現するという面があるからややこしい。

話はすこし変わるが、セキュリティがわかりにくい状況は実はきちんと体系的に語られないことが多いからではないかと思う。セキュリティ要件があって、それに対して対策・解決策がある。セキュリティ要件は機能要件と保証要件に分類される。対策・解決策は、技術(アーキテクチャやメカニズムなど)で対応するものと、運用/管理で対応するのものがある。これらは網羅的に語られるべきと思うが、往々にセキュリティ技術に偏重してしまうのだ。

  +-- セキュリティ要件
  |   +-- 機能要件     # 機密性、完全性、可用性など
  |   +-- 保証要件
  +-- セキュリティ対策
      +-- 技術面での対応
      +-- 運用/管理面での対応

特にわかりにくいのはセキュリティ機能要件(機能クラス)というものだ。FRUEMPやFURPSでは非機能要件として扱っているにも関わらず、セキュリティ機能要件などと言ったりする。これはセキュリティ要件に対して技術的な機能として追加実装することで対応するためのようだ。このようにセキュリティは要件と対策である追加機能がごっちゃに語られることが多いのだ。

また、セキュリティの主要な要素は、機密性(Confidentiality)、完全性(Integrity)、可用性(Availability)であるが、要件を定義するときはいつも逆説的/否定的である。たとえば「完全であること」と規定したいのに「完全性が破られないこと」といった定義になる。これらは保守性、拡張性などの非機能要件が肯定的な表現になるのと対照的である。セキュリティは「負の機能」かといいたくなる。この辺りにもセキュリティの紛らわしさがある。