下载
第1章
计算机与
网络安全基础
确保计算机安全的三条黄金法则:不要拥有计算机;不要打开计算机;不要使用计算机.——Robert(Bob)T.Morris安全,就是确保不发生有危害的事情.这个简洁的阐述很容易使人迷惑.实际上,安全有非常复杂的解释,对它们进行剖析有助于理解安全的真正含义.通常情况下,某些经验性法比较适用于安全这个概念.首先,安全总是和效用有关.要想不发生危险,最好就是什么事都不做.打个比方,存放在车库里的车不可能发生交通事故,但是,汽车不跑路并不是我们的意图.我们真正的目的是保障有利的事情发生,而避免有危害的事情.其次,安全与危险是共存的.例如,前门加锁的有效性很大程度上取决于你所要防卫的窃贼类型.对于小贼,有一定的防卫意义,而对工具齐全,熟于此道的老贼则是毫无意义的.第三,必须从整个
系统的角度去考虑安全
问题.系统的安全程度由系统的最薄弱环节决定.也就是说,只保证前门安全是不够的,狡猾的小偷会从所有可能疏于防备的地方潜入房子,尤其是远离装有牢固的锁的那些地方.第四,实施安全的措施必须简单.试想,如果你每次进门需花30分钟的艰辛去打开一个复杂的锁,你也许会不锁门.第五,安全的实现必须注意性能价格比.例如,如果你加锁的费用比所防护的内容的价值还昂贵,那是毫无意义的.由于每个人对价值的认定是不同的,事情就变得很复杂.最后一点但也是很重要的一点就是,安全措施必须尽可能简单.正如专家所说,越复杂的系统就容易出错.使安全系统既简单又可靠是我们的宗旨.通过对本书的
学习,你将会体会到这些符合计算机安全的经验法则.
1.1密码学与计算机安全
在讨论特定话题之前,应先明确密码学(cryptography)与计算机安全(computersecurity)这两个课题间的差别.密码学是一种以秘密的方式编码信息,使只有特定的接收者才可以访问被编码的信息的方法.经过一段很长的时间,密码术的应用有了很大的发展,从古老的凯撒密码到第二次世界大战时广泛应用的密码机,一直发展到用计算机软硬件实现的现代密码系统.直到1960年,分时用户计算机操作系统,如剑桥大学早期的计算机系统
[69][80]
和麻省理工大
学的Multics系统初次问世,计算机安全才首次成为研究热点.但是自那以后,除了70年代中期,计算机安全技术一直未受到重视[3,32,36,75],而且在这段时期内,计算机安全大部分是基于军事上的需求.到了90年代,Internet和电子商务得到广泛应用,尤其是
Java技术的发展才使计算机安全在商业上广为应用并成为主流技术.安全机制常常得益于密码学的应用,如基于网络的用户登录协议.不过,它也并不是必须依赖于密码学的应用,例如UNIX系统中对文件的访问控制.反过来,密码学也依赖于系统的安全性.密码算法常
常用软件或硬件实现,它们能否正
2
使Java2平台安全技术—结构,API
设计和实现
下载
常运作关键取决于是否有一个安全的系统.比如,如果系统缺乏访问控制的安全性,攻击者可以修改密码系统的软件算法.可见,安全性的缺乏会直接影响密码术的效用.
1.2危险和防护
在有关计算机安全的文献中,危险或攻击通常分为三类:(1)秘密攻击(secrecyattack).攻击者试图窃取口令,医疗记录,电子邮件(E-mail)日志,薪水册等机密数据.其攻击手段很多,如贿赂安全卫士,寻求系统的安全漏洞和密码算法的不足之处等.(2)完备性攻击(integrityattack).攻击者企图非法更改部分系统.例如,某位银行雇员为了把顾客的资金存入自己的个人帐户,修改帐户系统从而危及整个交易系统安全性会为了隐藏"脚印"而删除系统日志.(3)可得性攻击(availabilityattack).攻击者企图中断系统正常运作,通常也称这种攻击为拒绝服务攻击(denial-of-serviceattack).如用大量的IP包"轰炸"机器,使机器与网络的其余部分隔离.这类攻击者通过破坏计算机控制系统引起
通信流量阻塞.这三类攻击是息息相关的.也就是说,某一类攻击的技术和后果经常作为另一类攻击的辅助手段.比如,一个攻击者通过秘密攻击获知口令,这样就有权访问这个系统,然后修改系统资源,最终完成拒绝服务攻击.当遭受攻击时,系统会出错,但大多数系统由于缺乏安全机制仍认为是安全的,例如,有时系统冲突导致在公开的可读目录下倾倒机密的内核信息.同样地,这些攻击的防护机制之间也是紧密相关的.一般来讲,防护有一种或多种目的:防止攻击,检测是否遭受攻击或恢复系统.正如本章下面讲解的,一种防护机制并不是万能的.为了保护秘密数据,可以把数据存储到不易让攻击者发现的地方,或者是安装严密的访问控制
程序拒绝非法访问;也可以用加密技术加密数据使攻击者不能访问到真正数据,除非他能破译加密系统或窃取到密钥,通常破译加密系统是极其困难的.当然,可以同时采用多种防护机制.应注意到:对于秘密数据,大多数重要技术是防止遭受攻击,因为检测数据是否丢失非常困难,而恢复数据几乎是不可能的.为了保护数据的完备性,可以再次利用前面讲述的任何一种或所有机制.对于数据的完备性,检测是否遭受攻击较为简单,恢复数据也是可能的.比如,对于文件x,可以用著名的单向散列函数f计算其散列值,并分开存储f(x),当x被修改为x'时,可以计算f(x)值,与f(x')作比较,如果两者不一致,就表明数据的完备性已被破坏.当然如果对应的f(x)也被破坏,检测也许是不可能的.如果存储f(x)的地方不够安全,可以利用带有密钥的单向散列函数,并把f(x,k)与x存储在一起.如果k的保密性很好,攻击者很难于修改x和散列值[22,52].为了数据的完备性被破坏后,能够恢复数据,可以提前备份数据并在安全的地方存储备份数据[61].在安全的网络中,也可以用更复杂的分布式计算技术来备份数据