网络认证技术是网络安全技术的重要组成部分之一。认证指的是证实被认证对象是否属实和是否有效的 一个过程。其基本思想是通过验证被认证对象的属性来达到确认被认证对象是否真实有效的目的。被认证对象的属性可以是口令、数字签名或者象指纹、声音、视网膜这样的生理特征。认证常常被用于通信双方相互确认身份,以保证通信的安全。认证可采用各种方法进行。
基于口令的认证方法
传统的认证技术主要采用基于口令的认证方法。当被认证对象要求访问提供服务的系统时,提供服务的认证方要求被认证对象提交该对象的口令,认证方收到口令后,将其与系统中的用户口令进行比较,以确认被认证对象是否为合法访问者。
这种认证方法的优点在于:一般的系统(如UNIX,Windows NT,等)都提供了对口令认证的支持,对于封闭的小型系统来说不失为一种简单可行的方法。
然而,基于口令的认证方法存在下面几点不足:
①用户每次访问系统时都要以明文方式输入口令,这时很容易泄密(如被"肩部冲浪者"即窥视者看见)。
②口令在传输过程中可能被截获。
③系统中所有用户的口令以文件形式存储在认证方,攻击者可以利用系统中存在的漏洞获系统的口令文件。
④用户在访问多个不同安全级别的系统时,都要求用户提供口令,用户为了记忆的方便,往往采用相同的口令。而低安全级别系统的口令更容易被攻击者获得,从而用来对高安全级别系统进行攻击。
⑤只能进行单向认证,即系统可以认证用户,而用户无法对系统进行认证。攻击者可能伪装成系统骗取用户的口令。
对于第②点,系统可以对口令进行加密传输。对于第③点,系统可以对口令文件进行不可逆加密。尽管如此,攻击者还是可以利用一些工具很容易地将口令和口令文件解密。
双因素认证
在双因素认证系统中,用户除了拥有口令外,还拥有系统颁发的令牌访问设备。当用户向系统登录时,用户除了输入口令外,还要输入令牌访问设备所显示的数字。该数字是不断变化的,而且与认证是同步的。
双因素认证比基于口令的认证方法增加了一个认证要素,攻击者仅仅获取了用户口令或者仅仅拿到了用户的令牌访问设备,都无法通过系统的认证。而且令牌访问设备上所显示的数字不断地变化,这使得攻击变得非常困难。因此,这种方法比基于口令的认证方法具有更好的安全性,在一定程度上解决了口令认证方法中的问题①、②和③。
提问握手认证协议CHAP
除双因素认证外,还可采用提问-响应(challenge-response)方法来解决上述问题。提问-握手认证协议CHAP(Challenge Handshake Anthentication Protocol)采用的就是提问-响应方法,它通过三次握手(3-way handshake)方式对被认证方的身份进行周期性的认证。其认证过程是:第一步,在通信双方链路建立阶段完成后,认证方(authenticator)向被认证方(peer)发送一个提问(challenge)消息;第二步,被认证方向认证方发回一个响应(response),该响应由单向散列函数计算得出,单向散列函数的输入参数由本次认证的标识符、秘诀(secret)和提问构成;第三步,认证方将收到的响应与它自己根据认证标识符、秘诀和提问计算出的散列函数值进行比较,若相符则认证通过,向被认证方发送"成功"消息,否则,发送"失败"消息,断开连接。在双方通信过程中系统将以随机的时间间隔重复上述三步认证过程。
CHAP采用的单向散列函数算法可保证由已知的提问和响应不可能计算出秘诀。同时由于认证方的提问值每次都不一样,而且是不可预测的,因而具有很好的安全性。
CHAP具有以下优点:
①通过不断地改变认证标识符和提问消息的值来防止回放(playback)攻击。
②利用周期性的提问防止通信双方在长期会话过程中被攻击。
③虽然CHAP进行的是单向认证,但在两个方向上进行CHAP协商,也能实现通信双方的相互认证。
④CHAP可用于认证多个不同的系统。
CHAP的不足之处是:CHAP认证的关键是秘诀,CHAP的秘诀以明文形式存放和使用,不能利用通常的不可逆加密口令。并且CHAP的秘诀是通信双方共享的,这一点类似于对称密钥体制,因此给秘诀的分发和更新带来了麻烦,要求每个通信对都有一个共享的秘诀,这不适合大规模的系统。
Kerberos
Kerberos是由美国麻省理工学院提出的基于可信赖的第三方的认证系统。Kerberos提供了一种在开放式网络环境下进行身份认证的方法,它使网络上的用户可以相互证明自己的身份。 Kerberos采用对称密钥体制对信息进行加密。其基本思想是:能正确对信息进行解密的用户就是合法用户。用户在对器进行访问之前,必须先从第三方(Kerberos服务器)获取该应用服务器的访问许可证(ticket)。
Kerberos密钥分配中心KDC(即Kerberos服务器)由认证服务器AS和许可证颁发服务器TGS构成。
Kerberos的认证过程如图1所示。
①用户想要获取访问某一应用服务器的许可证时,先以明文方式向认证服务器AS发出请求,要求获得访问TGS的许可证。
②AS以证书(credential)作为响应,证书包括访问TGS的许可证和用户与TGS间的会话密钥。会话密钥以用户的密钥加密后传输。
③用户解密得到TGS的响应,然后利用TGS的许可证向TGS申请应用服务器的许可证,该申请包括TGS的许可证和一个带有时间戳的认证符(authenticator)。认证符以用户与TGS间的会话密钥加密。
④TGS从许可证中取出会话密钥、解密认证符,验证认证符中时间戳的有效性,从而确定用户的请求是否合法。TGS确认用户的合法性后,生成所要求的应用服务器的许可证,许可证中含有新产生的用户与应用服务器之间的会话密钥。TGS将应用服务器的许可证和会话密钥传回到用户。
⑤用户向应用服务器提交应用服务器的许可证和用户新产生的带时间戳的认证符(认证符以用户与应用服务器之间的会话密钥加密)。
⑥应用服务器从许可证中取出会话密钥、解密认证符,取出时间戳并检验有效性。然后向用户返回一个带时间戳的认证符,该认证符以用户与应用服务器之间的会话密钥进行加密。据此,用户可以验证应用服务器的合法性。
至此,双方完成了身份认证,并且拥有了会话密钥。其后进行的数据传递将以此会话密钥进行加密。
Kerberos将认证从不安全的工作站移到了集中的认证服务器上,为开放网络中的两个主体提供身份认证,并通过会话密钥对通信进行加密。对于大型的系统可以采用层次化的区域(realm)进行管理。
Kerberos也存在一些问题:Kerberos服务器的损坏将使得整个安全系统无法工作;AS在传输用户与TGS间的会话密钥时是以用户密钥加密的,而用户密钥是由用户口令生成的,因此可能受到口令猜测的攻击;Kerberos使用了时间戳,因此存在时间同步问题;要将Kerberos用于某一应用系统,则该系统的客户端和服务器端软件都要作一定的修改。
X.509证书及认证框架
国际电信联盟的X.509建议(已成为事实上的标准)定义了一种提供认证服务的框架。
采用基于X.509证书的认证技术类似于Kerberos技术,它也依赖于共同信赖的第三方来实现认证。所不同的是它采用非对称密码体制(公钥制),实现上更加简单明了。这里可信赖的第三方是指称为CA(Certificate Authority)的认证机构。该认证机构负责认证用户的身份并向用户签发数字证书。数字证书遵循X.509标准所规定的格式,因此称为X.509证书。持有此证书的用户就可以凭此证书访问那些信任CA的服务器。
当用户向某一服务器提出访问请求时,服务器要求用户提交数字证书。收到用户的证书后,服务器利用CA的公开密钥对CA的签名进行解密,获得信息的散列码。然后服务器用与CA相同的散列算法对证书的信息部分进行处理,得到一个散列码,将此散列码与对签名解密所得到的散列码进行比较,若相等则表明此证书确实是CA签发的,而且是完整的未被篡改的证书。这样,用户便通过了身份认证。服务器从证书的信息部分取出用户的公钥,以后向用户传送数据时,便以此公钥加密,对该信息只有用户可以进行解密。
基于X.509证书的认证技术适用于开放式网络环境下的身份认证,该技术已被广泛接受,许多网络安全程序都可以使用X.509证书(如:IPSec、、SET、S/MIME等)。
由于这种认证技术中采用了非对称密码体制,CA和用户的私钥都不会在网络上传输,避免了基于口令的认证中传输口令所带来的问题。攻击者即使截获了用户的证书,但由于无法获得用户的私钥,也就无法解读服务器传给用户的信息。
基于X.509证书的认证实际上是将人与人之间的信任转化为个人对组织机构的信任,因此这种认证系统需要有CA的支持。目前上已有一些这样的认证机构,如Verisign、U.S.Postal Service和CommerceNet等。
CA在确信用户的身份后才为用户签发证书,而CA对用户身份的确认则遵循CA自己定义的称为CPS的规则,CA通过这些规则来判定用户是否存在和有效。证书将用户的唯一名称与用户的公钥关联起来。但这种关联是否合法,却不属于X.509所涉及的范畴。X.509声明:凡是与语义或信任相关的所有问题都依赖于CA的证书常规声明CPS(Certification Practice Statement),即关联的合法性取决于CA自己定义的CPS规则。显然,这种做法会导致各个CA对用户的确认方法和确认的严格程度上的差异。因此,建立全球性的统一的认证体系以及相关的规范就显得非常必要。