In particular, when defining requirements, it is important to consider how the application will be used, who will be using the application, etc. With that knowledge, one can decide whether or not to support complex features like auditing, accounting, nonrepudiation, etc. Another potentially important issue is how to support naming. The rise of distributed systems has made naming increasingly important. For example, in a system such as a resource discovery system, both the resources and the individuals using those resources must be named.
Names can allow principals to play different roles in a particular system which can also be useful.
Software Reliability Software reliability means that a particular program must continue to work in the presence of faults. Faults can be related to design, implementation, programming, or usage faults. As systems become increasingly complex, however, the number of possible faults which must be defended against increases, and the likelihood of a failure increases. As mentioned, it is incredibly hard to show that a particular system is secure. Ross Anderson has said that computer security is much like programming Satan's computer.