Internet安全
前言
90代早期,正是由于Internet的开放性和商业化才促使Internet迅速发展。但开放性却带来了系统入侵等安全性问题。基于TCP/IP协议并采用了Internet的通信标准和Web信息流通模式的Intranet也面临同样的问题,因此人们需要一个更安全的Internet。目前有两种安全服务:一是存取控制,禁止非法的通信和连网;二是通信安全服务,提供授权数据的完整性、可靠性,具有对同级通信者的访问否定权。
当用户连上Internet,就可在中间插入一个或几个中介系统的控制关联,防止通过网络进行的攻击,并提供单一的安全和审计的安装控制点,这些中间系统就是防火墙。防火墙包括分组过滤路由器(SR)和代理服务器(Proxy Server)两种。
SR是一个多端口的IP路由器;代理服务器则是代表网络内部用户的代理者,它实际上是一个应用层上的网关。当用户使用TCP/IP应用时,给Proxy提供合法身份和授权信息,Proxy 就和被访问主机联系,并在两个通信点之间中继传递IP数据包。IP包处理的过程对用户是透明的。
SR的优点是简单,成本低;缺点是很难准确地设置包过滤器,缺乏用户级的授权,路由器供应商正致力于解决这一问题,并提出了标准化的用户级授权协议Radius。Proxy的优点是有用户级的授权;缺点是对所有的应用程序须建立一个应用层信关,这会严重影响新应用程序的部署。
SR通常和代理服务防火器混合使用,它主要防止有关IP的攻击。防火墙中部署最广泛的是双穴防范网关(Dual homed)、过滤主机网关(Screened Host)和过滤子网网关(Screened Subnet)防火墙。防火墙提倡者认为防火墙把各种安全功能集于一身,简化了安装和管理;贬低者则认为,放火墙的多重注册、带外机制及它们之间的相互影响带来的一些问题和不便,以及对来自内部的攻击无能为力等越来越明显。虽然在Intranet内部可继续设置内部的防火墙,但是仍有很多问题和漏洞目前无法解决。另外防火墙不能阻止有问题(恶意)的数据的输入,如病毒。随着Java、Java Script的广泛使用,这个问题将越来越严重。防火墙的另一个缺点是供应商很少提供转键解法方案。
Internet层安全
在过去的10年中,为制定标准化的网络或Internet安全协议,国际社会提出了好几种方案,如美国NSA和NIST提出的SP3网络层安全协议,ISO提出的NLSP, 能同时为IP和CLNP服务的NIST 协 议I Nlsp,Ioannidis 和Blaze提出的另一个Internet层安全协议Swipe等。所有这些协议的共同之处多于不同之处,都把IP纳入使能技术,明文包被加密和封装在Out IP Header,在同级系统中Out IP Header被卸掉,包被解密和发往目的地。
The Internet Engineering Task Force建立了Internet安全协议工作组负责IPSP(IP Security Protocol)和IKMP(Internet Key Management Protocol)的标准化。IPSP 所建立的机制适用于目前的IP版本IPV4和新版本IPV6,而且独立于算法。该工作组提出了AH(Authentication Header)和ESP(Endapsulating Security Payload):AH提供信源认证和完整性保证;ESP 提供可靠性。IP AH是IP包发送前计算的消息码,发送者使用Cryptography Key计算AH,接收者使用相同的或另一个密钥来检验。
IP ESP的主要思想是把整个IP 包(隧道方式)封装或只封装ESP高层协议的数据(传输模式),并对大多数ESP加密隧道,模式中加密的ESP会添加一个新的IP首标,以确定在Internet上的路径。接受端去掉文本的IP首标和选项,解密ESP后就可处理IP包了。RFC1827定义了ESP 的形式,RFC1829定义了数据加密标准,它是用CBC(Cipher Block Chaining)方式对ESP加密和解密。AH和ESP机制可以分开或混合使用,但两种都不能提供流量分析。
1995年8月,IESG批准IPSP的RFC作为Internet的跟踪标准,用SHA(Secure Hash Algorithm)代替MD5,用Triple DFS代替DES。IP SEC工作组做了有关标准码管理协议的标准化工作,并提出一些参考方案:
IBM 的MKMP;
Sun Microsystem 的SKIP;
Phil Karn 的The Photuris Key Management Protocol;
Hugo Krawcyk 的Skeme; Nsa 的ISAKMP;
Hilarie Orman 的the Oakley Key Determination Protcol。
这些协议基本相同,但也有一些不同之处:除了MKMP外,它们都需要全操作公共码基础结构,但MKMP假设两端共享一个人工分布的主码;除了SKIP要求Diffie Hellman认证外,其余协议都要求RSA认证。1996年9月,ISAKMP框架中的Oakley被作为IP SEC的强制性码(Mandatory)管理方法。
Photuris 和Photuris Like协议的主要思想是把每一个新的对话系统的密码都用Diffie Hellman码变换出来,把签名子序列变成Diffie Hellman参数,防止任何人夹在中间进行攻击。假如入侵者破译了一个长期私人密码如Photurisd的RSA 码或SKIP的Diffie Hellman 码,那么入侵者只能伪装成拥有码的实体,但却不能 对过去或将来接发的消息进行解码。
SKIP没有提供BTP和PFS,而是使用Diffie Hellman Key Exchange,这种密钥交换不精确,即两个知道对方某个检验过的长期Diffie Hellman公共码的实体不精确地共享了一主码,并衍生出对包(包括IP包)加密的码。每个IP包可能会用不同的码解密和加密,SKIP被要求提供BTP和PFS后类似于Photuris和Photuris Like协议,两者的区别是Skip要求Diffie Hellman 检验。今天Internet的任何要求RSA认证的安全协议都很容易实现和部署。但问题是多数IPSP 的实现和密钥管理协议是基于Unix System源码的,而MS DOS和Windows系统却不能接受。
为解决这个问题,Wanger和Bellovin建立了一个完全在IP下的IP SEC模式。
Internet层安全的主要优点是具有透明性;主要缺点是分不清处理过程的软件包,因为它对发往同一地址的所有软件包使用相同的访问策略--加密钥,因此RFC1825允许面向用户的密钥应用稍作改进,但面向用户的密钥应用要求操作系统内核做较大调整。
传 输 层 安 全 Internet
应用程序通常使用IPC(Interporcess Communications Facility)与不同层次的安全协议打交道,在不同传输层协议中工作。最流行的IPC界面是Bsdsockets 和TLI。在Unix系统V命令里可以找到。在Internet中提供安全服务的首先一个想法便是强化它的IPC界面,如BSD Sockets等,具体做法包括双端实体的认证,数据加密密钥的交换等。Netscape通信公司遵循了这个思路,制定了建立在可靠的传输服务(如TCP/IP所提供)基础上的安全套接层协议(SSL:Secure Sockets Layer)目前能提供最可靠的传输服务。1995年11月出台的SSL V3有以下主要协议:
SSL记录协议,它涉及应用程序提供的信息的分段、压缩、数据认证和加密。SSL v3提供对数据认证用的MD5和SHA以及数据加密用的R4和DES等的支持,用来对数据进行认证和加密的密钥可以通过SSL的握手协议来协商。处理碎片,压缩数据,数据确认,对应用程序加密;RC4对DEC的数据加密;
SSL握手协议 用来交换版本号、加密算法、(相互)身份认证并交换密钥。SSL v3 提供对Deffie-Hellman密钥交换算法、基于RSA的密钥交换机制和另一种实现在 Fortezza chip上的密钥交换机制的支持。
SSL Handshake协议处理不同版本协议的转换,支持密码机(Ceyptography)算法。SLL V3支持Diffie Hellman和RSA的Key Exchange。
Netscape通信公司已经向公众推出了SSL的参考实现(称为SSLref)。另一免费的SSL实现叫做SSLeay。SSLref和SSLeay均可给任何TCP/IP应用提供SSL功能。Internet号码分配当局(IANA)已经为具备SSL功能的应用分配了固定端口号,例如,带SSL的 HTTP(https)被分配的端口号为443,带SSL的SMTP(ssmtp)被分配的端口号为465,带SSL的NNTP(snntp)被分配的端口号为563。
微软推出了SSL2的改进版本称为PCT(私人通信技术)。至少从它使用的记录格式来看,SSL和PCT是十分相似的。它们的主要差别是它们在版本号字段的最显著位(The Most Significant Bit)上的取值有所不同: SSL该位取0,PCT该位取1。这样区分之后,就可以对这两个协议都给以支持。1996年4月,IETF授权一个传输层安全(TLS:Transport Layer Security )工作组着手制定一个传输层安全协议(TLSP),以便作为标准提案向IESG正式提交。TLSP将会在许多地方酷似SSL。
前面已介绍Internet层安全机制的主要优点是它的透明性,即安全服务的提供不要求应用层做任何改变。这对传输层来说是做不到的。原则上,任何TCP/IP应用,只要应用传输层安全协议,比如说SSL或PCT,就必定要进行若干修改以增加相应的功能,并使用(稍微)不同的IPC界面,主要原因是传输层安全服务是以Process To Process,而不是以Host To Host为基础的。这个问题可通过应用层安全服务进一步改善。于是,传输层安全机制的主要缺点就是要对传输层IPC界面和应用程序两端都进行修改。可是,比起Internet层和应用层的安全机制来,这里的修改还是相当小的。另一个缺点是,基于UDP的通信很难在传输层建立起安全机制来。同网络层安全机制相比,传输层安全机制的主要优点是它提供基于进程对进程的(而不是主机对主机的)安全服务。这一成就如果再加上应用级的安全服务,就可以再向前跨越一大步了。
应 用 层 安 全
必须牢记(且须仔细品味): 网络层(传输层)的安全协议允许为主机(进程)之间的数据通道增加安全属性。本质上,这意味着真正的(或许再加上机密的)数据通道还是建立在主机(或进程)之间,但却不可能区分在同一通道上传输的一个具体文件的安全性要求。比如说,如果一个主机与另一个主机之间建立起一条安全的IP通道,那么所有在这条通道上传输的IP包就都要自动地被加密。同样,如果一个进程和另一个进程之间通过传输层安全协议建立起了一条安全的数据通道,那么两个进程间传输的所有消息就都要自动地被加密。
如果确实想要区分一个具体文件的不同的安全性要求,那就必须借助于应用层的安全性。提供应用层的安全服务实际上是最灵活的处理单个文件安全性的手段。例如一个电子邮件系统可能需要对要发出的信件的个别段落实施数据签名。较低层的协议提供的安全功能一般不会知道任何要发出的信件的段落结构,从而不可能知道该对哪一部分进行签名。只有应用层是唯一能够提供这种安全服务的层次。
一般来说,在应用层提供安全服务有几种可能的做法,第一个想到的做法大概就是对每个应用(及应用协议)分别进行修改。一些重要的TCP/IP应用已经这样做了。在RFC 1421至1424中,IETF规定了私用强化邮件(PEM:Privacy Enhanced Mail)来为基于SMTP的电子邮件系统提供安全服务。由于种种理由,Internet业界采纳PEM的步子还是太慢,一个主要的原因是PEM依赖于一个既存的、完全可操作的PKI(公钥基础结构)。PEM PKI是按层次组织的,由下述三个层次构成:
最高层:Internet安全政策登记机构(An Internet Policy Registration Authority)。
中间层:安全政策证书颁发机构(Policy Certification Authoritiy)。
第三层:证书颁发机构(Certification Authoritiy)。
建立一个符合PEM规范的PKI也是一个政治性的过程,因为它需要多方在一个共同点上达成信任。不幸的是,历史表明,政治性的过程总是需要时间的,作为一个中间步骤,Phil Zimmermann开发了一个软件包,叫做PGP(pretty Good Privacy)。PGP符合PEM的绝大多数规范,但不必要求PKI的存在。相反,它采用了分布式的信任模型,即由每个用户自己决定该信任哪些其他用户。因此,PGP不是去推广一个全局的PKI,而是让用户自己建立自己的信任之网。这就立刻产生一个问题,就是分布式的信任模型下,密钥废除了怎么办。
S-HTTP是Web上使用的超文本传输协议(HTTP)的安全增强版本,由企业集成技术公司设计。S-HTTP提供了文件级的安全机制,因此每个文件都可以被设成私人/签字状态。用作加密及签名的算法可以由参与通信的收发双方协商。S-HTTP提供了对多种单向散列(Hash)函数的支持,如: MD2,MD5及SHA; 对多种单钥体制的支持,如:DES,三元DES,RC2,RC4,以及CDMF; 对数字签名体制的支持,如: RSA和DSS。
目前还没有Web安全性的公认标准。这样的标准只能由WWW Consortium,IETF或其他有关的标准化组织来制定。而正式的标准化过程是漫长的,可能要拖上好几年,直到所有的标准化组织都充分认识到Web安全的重要性。S-HTTP和SSL是从不同角度提供Web的安全性的。S-HTTP对单个文件作“私人/签字”之区分,而SSL则把参与通信的相应进程之间的数据通道按“私用”和“已认证”进行监管。Terisa公司的SecureWeb工具软件包可以用来为任何Web应用提供安全功能。该工具软件包提供有 RSA数据安全公司的加密算法库,并提供对SSL和S-HTTP的全面支持。
另一个重要的应用是电子商务,尤其是信用卡交易。为使Internet上的信用卡交易安全起见,MasterCard公司(同IBM,Netscape,GTE和Cybercash一道) 制定了安全电子付费协议(SEPP),Visa国际公司和微软(和其他一些公司一道)制定了安全交易技术(STT)协议。同时,MasterCard,Visa国际和微软已经同意联手推出Internet上的安全信用卡交易服务。他们发布了相应的安全电子交易(SET)协议,其中规定了信用卡持卡人用其信用卡通过Internet进行付费的方法。这套机制的后台有一个证书颁发的基础结构,提供对X.509证书的支持。
上面提到的所有这些加安全功能的应用都会面临一个主要的问题,就是每个这样的应用都要单独进行相应的修改。因此,如果能有一个统一的修改手段,那就好多了。通往这个方向的一个步骤就是赫尔辛基大学的Tatu Yloenen开发的安全shell(SSH)。SSH允许其用户安全地登录到远程主机上,执行命令,传输文件。它实现了一个密钥交换协议,以及主机及客户端认证协议。SSH有当今流行的多种Unix系统平台上的免费版本,也有由Data Fellows公司包装上市的商品化版本。
把SSH的思路再往前推进一步,就到了认证和密钥分配系统。本质上,认证和密钥分配系统提供的是一个应用编程界面(API),它可以用来为任何网络应用程序提供安全服务,例如: 认证、数据机密性和完整性、访问控制以及非否认服务。目前已经有一些实用的认证和密钥分配系统,如: MIT的Kerberos(V4与V5),IBM的CryptoKnight和Netwrok Security Program,DEC的SPX,Karlsruhe大学的指数安全系统(TESS)等,都是得到广泛采用的实例。甚至可以见到对有些认证和密钥分配系统的修改和扩充。例如,SESAME和OSF DCE对Kerberos V5作了增加访问控制服务的扩充,Yaksha对Kerberos V5作了增加非否认服务的扩充。
关于认证和密钥分配系统的一个经常遇到的问题是关于它们在Internet上所受到的冷遇。一个原因是它仍要求对应用本身做出改动。考虑到这一点,对一个认证和密钥分配系统来说,提供一个标准化的安全API就显得格外重要。能做到这一点,开发人员就不必再为增加很少的安全功能而对整个应用程序大动手术了。因此,认证系统设计领域内最主要的进展之一就是制定了标准化的安全API,即通用安全服务API(GSS-API)。GSS-API(v1及v2)对于一个非安全专家的编程人员来说可能仍显得过于技术化了些,但德州Austin大学的研究者们开发的安全网络编程(SNP),把界面做到了比GSS-API更高的层次,使同网络安全性有关的编程更加方便了。