计算机安全(computer security)是计算机与网络领域的信息安全(information security)的一个分支。其目的是在保证信息和财产可被授权用户正常获取和使用的情况下,保护此信息和财产不受偷窃,污染,自然灾害等的损坏。计算机系统安全是指一系列包含敏感和有价值的信息和服务的进程和机制,不被未得到授权和不被信任的个人,团体或事件公开,修改或损坏。由于它的目的在于防止不需要的行为发生而非使得某些行为发生,其策略和方法常常与其他大多数的计算机技术不同。
计算机安全技术的基础是逻辑学。安全性并非是大部分的计算机应用的主要目的,而在设计时就考虑程序的安全性常常会对程序的运行有所限制。
在计算机应用上有四种安全设定,通常会结合使用:
许多系统无意中使用了以上的第一种设定。由于第二种方法成本昂贵和不确定性,其使用受到很大限制。第一种和第三种方法会导致失败。第四种方法更具实用性,这是由于它通常基于硬件机制,避免了抽象性和自由性。
设计安全系统有很多技巧和技术。但很少有有效的方法能够在设计完成后提高安全性。有一种技术能最大程度地执行最小权限原则,即一个实体只能拥有它所需要的权限。在这种方式下,即使攻击者能够进入系统的某一部分,也难以进入到其他部分。
另一方面,将系统划分为小的组件可降低各部分的复杂性,并可以使用定理机器证明(automated theorem proving)来证明关键的软件子系统的正确性。因此,当单一的有特点的特性可以作为关键点被分离出,而此特性可被数学评估时,安全的解析解(closed form solution)才会有效。在这种正确性证明不存在时,严谨的代码审查(code review)和单元测试(unit testing)是最好的保证模块安全的方式。
设计时应使用纵深防御(Defense in depth),即当多于一个子系统被误用时,系统的完整性和其存储的信息才会受损。当对一种安全措施的破坏不会使得对另一种措施的破坏变成更容易时,纵深防御有效。同时,串行原则表明,几个简单的保护措施不能连接成为一个复杂的保护措施。
子系统应被默认在安全设置下,并应尽可能设计为fail secure而非fail insecure。理想地,一个安全系统应当在合法用户特意地,自由地决定之下才能使其不安全。
另外,安全不应是全有或全无的问题。系统的设计者和操作者应假定安全性的违反是不可避免的。系统活动应有完整的审计日志,在违反安全性的活动发生后才可确定其机制和程度。远程存储审计日志可保护系统日志不被侵入者修改。最后,充分公布(full disclosure)有助于在系统漏洞被发现时,尽可能地缩短此安全隐患存在的时间。
安全体系结构定义为描述安全措施如何放置,如何与整个信息技术体系结构关联的设计作品。这些安全控制措施旨在维护系统质量参数,包括机密性,完整性,可用性,问责制,保险性。
辅助计算机安全的硬件为仅基于软件的计算机安全提供了另一个选择。由于被损坏时要求物理接入,因此诸如dondle的设备被认为更安全。