网络安全中认证协议的分析与比较
( 2004/5/8 00:00 )
龚晶,邓元庆
1认证技术简介
随着网络时代的到来,人们可以通过网络得到需要的信息。但不幸的是,由于网络的开放性,它正面临着许多安全威胁,如计算机病毒、人为的恶意攻击、网络软件的漏洞和“后门”、非授权访问等。因此,网络安全越来越受到重视。
作为网络安全的第一道防线,某种程度上也是最重要的一道防线,身分认证技术普遍受到关注。认证技术提供了关于某个人或某个事物身分的保证,这意味着当某人(或某事)声称具有一个特别的身分(如某个特定的用户名称)时,认证技术将提供某种方法来证实这一声明是正确的。一般方法是输入个人信息,经特定的公式和算法运算所得的结果与从数据库中存取的信息经公式和算法运算所得结果进行比较,得出结论。
身分认证可分为用户与系统间的认证和系统与系统之间的认证。身分认证必须做到准确无误地将对方辨认出来,同时还应该提供双向的认证,即相互证明自己的身分。目前研究比较多的是用户与系统间的身分认证,即身分证实,它只需单向进行,只由系统对用户进行身分认证。系统是用户所信赖的,而对于系统就必须采用身分认证技术来判断用户是否是合法的,以及该用户的权限等。随着计算机网络化的发展,大量的组织机构涌入国际互联网,以及电子商务与电子政务的大量兴起,系统与系统之间的身分认证也变得越来越重要。
身分认证的基本方式可以基于下述一个或几个因素的组合:
所知(Knowledge),即用户所知道的或所掌握的知识,如口令;
所有(Possesses),用户所拥有的某个秘密信息,如智能卡中存储的用户个人化参数,访问系统资源时必须要有智能卡;
个人特征(Characteristics),用户所具有的生物及动作特征,如指纹、声音、视网膜扫描等。
根据在认证中采用的因素的多少,可以分为单因素认证、双因素认证、多因素认证等方法。身分认证系统所采用的方法考虑因素越多,认证的可靠性就越高。
人们最常采用的身分认证方式是基于静态口令的认证方式,它是最简单、目前应用最普遍的一种身分认证方式,但它存在很多安全问题:它是一种单因素的认证,安全性仅依赖于口令,口令一旦泄露,用户即可被冒充;易被攻击,采用窥探、字典攻击、穷举尝试、网络数据流窃听、重放攻击等很容易攻破该认证系统。安全性较高的方法是双因素认证,即标记(Token)和口令相结合的方式,标记是一种个人持有物,标记上记
录着用于系统识别的个人信息。
在维护网络安全的实际操作中,常常是将身分认证的几个基本方式加以组合,并加以数据加密,来构造实际的认证系统,提高认证的安全性和可靠性。下面分析比较几种常见的认证协议,它们都是比较完善、较具优势的协议。
2一次性口令认证
在网络环境下,窃取系统口令文件和窃听网络连接获取用户ID和口令是最常见的攻击方法。如果网上传递的口令只使用一次,攻击者就无法用窃取的口令来访问系统,一次性口令系统(OTP:One Time Password)就是为了抵制这种重放攻击而设计的。一次性口令认证也称为动态口令认证。
一次性口令认证的主要思路:在登录过程(即身分认证过程)中加入不确定因素,使每次登录过程中传送的信息都不相同,以提高登录过程的安全性。例如:登录密码=Hash(用户名+口令+不确定因子),系统接收到登录口令后做一个验算即可验证用户的合法性。Hash指单向杂凑函数,这样即使攻击者窃听到网络上传输的数据,采用重放攻击方式试图进入系统时,由于不确定因子的变化,使之不能登录。
根据不确定因子选择方式的不同,一次性口令系统大致分为以下几种:
(1)口令序列:口令为一个单向的前后相关的序列,系统只用记录第N个口令。用户用第N-1个口令登录时,系统用单向算法算出第N个口令与自己保存的第N个口令匹配,以判断用户的合法性。由于N是有限的,用户登录N次后必须重新初始化口令序列。1991年贝尔通信研究中心(Bellcore)开发的S/KEY产品就采用了口令序列,它是一次性口令系统的首次实现。
(2)挑战/回答:用户要求登录时,系统产生一个随机数发送给用户作为挑战(Challenge),用户用某种单向Hash函数将自己的秘密口令和随机数混合起来计算出一个杂凑值发送给系统作为回答(Response),系统用同样的方法进行验算即可验证用户身分。由于Hash函数的单向性,用户和系统都很容易算出杂凑值(hash值)来传输和判断;而对于攻击者来说,由hash值来推出用户的口令是不可能的。目前,挑战/回答机制已经得到了广泛使用,Windows NT的用户认证就采用了这一技术,IPSec协议中的密钥交换(IKE)也采用了该识别技术。该技术的流程示意图如图1所示(x为用户的秘密口令,该口令也为服务器所已知)。
(3)时间同步:指以用户登录时间作为随机因素。美国RSA公司的产品SecureID中就采用了这种一次性口令技术。每个用户发给一个身分令牌,该令牌以一定的时间间隔产生新的口令,验证服务器会跟踪每一个用户的ID令牌
产生的口令相位。这种方式对双方的时间准确度要求较高,一般采取以分钟为时间单位的折中办法。在SecureID 产品中,对时间误差的容忍可达±1 min。
(4)事件同步:这种方法以挑战/回答方式为基础,将单向的前后相关序列作为系统的挑战信息,以避免用户每次输入挑战信息。但当用户的挑战序列与服务器产生偏差后,需要重新同步。
3Kerberos认证
Kerberos是MIT为分布式网络设计的可信第三方认证协议。网络上的Kerberos服务起着可信仲裁者的作用,它可提供安全的网络认证,允许个人访问网络中不同的机器。Kerberos基于对称密码技术(采用DES进行数据加密,但也可用其他算法替代),它与网络上的每个实体分别共享一个不同的密钥,是否知道该密钥便是身分的证明。Kerberos常见的有两个版本:第4版和第5版,其中版本5弥补了版本4中的一些安全缺陷,并已经发布为Internet建议标准(RFC1510)。Microsoft公司在Windows 2000中也实现了这一认证系统。
Kerberos是一种受托的第三方认证服务(Trusted Thirdparty Authentication Service),它是建立在Needham和Schroeder认证协议基础上,它要求信任第三方,即Kerberos认证服务器(Authentication Server,AS)。AS为客户和服务器提供证明自己身分的票(Ticket)以及双方安全通信的会话密钥(Session Key)。Kerberos还引入了一个新服务器,叫作票据授予服务器(TicketGranting Server,TGS),TGS向AS的可靠用户发出票据。除客户第一次获得的初始票(Initial Ticket)是由Kerberos认证服务器签发外,其他票都是由TGS签发的,一个票可以使用多次直至期限。客户方请求服务方提供一个服务时,不仅要向服务方发送从票据授予服务器领来的票,同时还要自己生成一个证(Authenticator,Ac)一同发送,证是一次性的。
具体过程分3个阶段6个步骤进行(以下是代码提示):
c:用户C身分码
s:应用服务器S身分码
ADx:x的网络地址
tgs:TGS身分码
Kx:x的密钥
Kx,y:x与y的会话密钥
{…}Kx:以Kx加密扩号中的信息
life:生存周期
阶段一:客户C从AS处申请及取得初始票(步骤1,2);
初始票Tc,tgs={Kc,tgs, c, ADc, tgs,}Ktgs
阶段二:客户C从TGS处申请及取得应用服务器S的票(步骤3,4);
此处Ac={c, ADc}Kc,tgs,可多次使用的票Tc,s={Kc,s, c, ADc, s, life}Ks
阶段三:客户C向应用服务器S请求服务(步骤5,6)。
此处Ac={c, ADc, s, timestamp}Kc,s,其中timestamp是时间戳,其作用是使客户C确信与它会话的确实是应用服务器S(只有S才知道Kc,s,故只有S才能发回这个信息)。
Kerberos的特点:
①与授权机制相结合。
②实现了一次性签放的机制,并且签放的票据都有一个有效期。
③支持双向的身分认证,即服务器可以通过身分认证确认客户方的身分,而客户如果需要也可以反向认证服务方的身分。
④支持分布式网络环境下的认证机制,通过交换“跨域密钥”来实现。
⑤Kerberos在分布式网络环境中具有比较强的安全性,能防止攻击和窃听,能提供高可靠性和高效的服务,具有透明性(用户除了发送Password外,不会觉察出认证过程),可扩充性好。但是,在Kerberos认证机制中也存在一些安全隐患,例如攻击者可以采用离线方式攻击用户口令,如果用户口令被破获,系统将是不安全的。又如,如果系统的login程序被替换,则用户的口令会被窃取。Kerberos机制的实现要求一个时钟基本同步的环境,这样需要引入时间同步机制,并且该机制也需要考虑安全性,否则攻击者可以通过调节某主机的时间实施重放攻击,这都是在实际使用中需要注意的问题。另外,在分布式系统中,认证中心星罗棋布,域间会话密钥的数量惊人,密钥的管理、分配、存储都是很严峻的问题。
4公钥认证体系
采用前述两种认证协议其主要特点是必须拥有一个密钥分配中心(KDC)或中心认证服务器,该服务器保存所有系统用户的秘密信息,这对于一个比较方便进行集中控制的系统来说是一个较好的选择。当然,这种体制对于中心数据库的安全要求是很高的,因为一旦中心数据库被攻破,整个系统将崩溃。
随着网络应用的普及,对系统外用户进行身分认证的需求不断增加,即某个用户没有在一个系统中注册,但也要求能够对其身分进行认证,尤其是在分布式系统中,这种要求格外突出。这种情况下,公钥认证技术就显示出它独特的优越性。
公钥认证协议中每个用户被分配给一对密钥(也可由自己产生),称之为公钥和私钥,其中私钥由用户妥善保管,而公钥则向所有人公开。这一对密钥必须配对使用,因此,用户如果能够向验证方证实自己持有私钥,就证明了自己的身分。当它用作身分认证时,验证方需要用户方对某种信息进行数字签名,即用户方以用户私钥作为加密密钥,对某种信息进行加密,传给验证方,而验证方根据用户方预先提供的公钥作为解密密钥,就可以将用户方的数字签名进行解密,以确认该信息是否是该用户所发,进而认证该用户的身分。
公钥认证体制中要验证用户的身分,必须拥有用户的公钥,而用户公钥是否正确,是否是所声称拥有人的真实公钥,在认证
体系中是一个关键问题。常用的办法是找一个值得信赖而且独立的第三方认证机构充当认证中心(Certificate Authority,CA),来确认声称拥有公开密钥的人的真正身分。任何想发放自己公钥的用户,可以去认证中心申请自己的证书。CA中心在认证该人的真实身分后,颁发包含用户公钥的“数字证书”,数字证书又叫“数字身分证”、“数字ID”,它是包含用户身分的部分信息及用户所持有的公钥相关信息的一种电子文件,可以用来证明数字证书持有者的真实身分。CA利用自身的私钥为用户的“数字证书”加上数字签名,可以保证证书内容的有效性和完整性。其他用户只要能验证证书是真实且完整的(用CA的公钥验证CA的数字签名),并且信任颁发证书的CA,就可以确认用户的公钥。
所有CA以层次结构存在,每个CA都有自己的公钥,这个公钥用该CA的证书签名后存放于更高一级CA所在服务器。但是由于“Root CA”即公认权威机构位于最顶端,没有上一级节点,故不受此限。在两方通信时,通过出示由某个CA签发的证书来证明自己的身分,如果对签发证书的CA本身不信任,则可验证CA的身分,依次类推,一直到“Root CA”处,就可确定证书的有效性。
要建立安全的公钥认证系统,必须先建立一个稳固、健全的CA体系,尤其是公认的权威机构,即“Root CA”,这也是当前公钥基础设施(PKI)建设的一个重点。CA 目前采用的标准是X.509,X.509中定义的证书结构和身分认证协议已经在各种环境中实际使用了,它对所用具体加密、数字签名、公钥密码以及Hash算法未作限制,必将会有广泛的应用,已纳入PEM(Privacy Enhanced Mail)系统中。X.509是定义目录服务建议X.500系列的一部分,其核心是建立存放每个用户的数字证书的目录(仓库)。用户数字证书由可信赖的CA创建,并由CA或用户存放于目录中供检索。
在实际应用中,若验证方想获得用户的公钥,验证方先在目录中查找用户的“数字证书”,利用CA的公钥和Hash算法验证用户“数字证书”的完整性,从而判断用户的公钥是否正确。
采用数字证书进行身分认证的协议有很多,SSL(Secure Socket Layer)和SET(Secure Electronic Transaction)是其中的两个典型样例,它们向验证方证实自己身分的方式如图3所示。验证方向用户提供一随机数,用户以其私钥Kpri对随机数进行签名,将签名和自己的证书Cert提交给验证方,验证方验证证书的有效性,从证书中获得用户公钥Kpub,以Kpub验证用户签名的随机数。
5结论
以上分析比较了几种常见的认证协议,从目前的发展来看,一次性口令认证协议实现最为简便,而Kerbe
ros实现起来较为繁琐,用户方和服务器方共享一个秘密信息,以加密的方式传送该秘密信息,服务器方保存所有用户的秘密信息以备进行认证,两者都适用于系统对用户的单向认证。随着电子商务的广泛开展,对于系统与系统之间的双向认证,公钥认证显得越发重要,而要安全正确地使用公钥认证,就必须大力加强PKI建设。PKI是在公开密钥理论和技术基础上发展起来的一种综合安全平台,能够为所有网络应用透明地提供采用加密和数字签名等密码服务所必需的密钥和证书管理,从而达到保证网上传递信息的安全、真实、完整和不可抵赖的目的。为了加强我国的信息化建设,必须努力搞好我国的PKI建设。