网络与信息安全身份证认证技术分析

认证技术是信息安全中的一个重要内容,在“网络与信息安全”课程中我们学习了两种认证技术:消息认证与身份认证,消息认证用于保证信息的完整性与抗否认性,身份认证则用于鉴别用户身份。在网上商务日益火爆的今天,从某种意义上说,认证技术可能比信息加密本身更加重要。因为,很多情况下用户并不要求购物信息保密,只要确认网上商店不是假冒的(这就需要身份认证),自己与网上商店交换的信息未被第三方修改或伪造,并且网上商家不能赖帐(这就需要消息认证),商家也是如此。由于认证技术是一项包含很广泛的技术,集中于某一方面可能更有针对性,所以,在这篇论文中我没有涉及消息认证技术。运用课堂学到的理论、课后阅读获得的知识根据自己的分析,我对身份认证技术作了总结分类,并针对每一种认证技术分析了优点和漏洞,然后剖析了一些应用,最后提出了自己想到的一个简单的利用数字签名实现的身份认证方案。

一、      身份认证的方法及可能的漏洞

身份认证的本质是被认证方有一些信息(无论是一些秘密的信息还是一些个人持有的特殊硬件或个人特有的生物学信息),除被认证方自己外,任何第三方(在有些需要认证权威的方案中,认证权威除外)不能伪造,被认证方能够使认证方相信他确实拥有那些秘密(无论是将那些信息出示给认证方或者采用零知识证明的方法),则他的身份就得到了认证。

根据被认证方赖以证明身份的秘密的不同,身份认证可以分为两大类:基于秘密信息的身份认证方法和基于物理安全性的身份认证方法。

1.基于秘密信息的身份认证方法

1.1口令核对

鉴别用户身份最常见也是最简单的方法就是口令核对法:系统为每一个合法用户建立一个用户名/口令对,当用户登录系统或使用某项功能时,提示用户输入自己的用户名和口令,系统通过核对用户输入的用户名、口令与系统内已有的合法用户的用户名/口令对(这些用户名/口令对在系统内是加密存储的)是否匹配,如与某一项用户名/口令对匹配,则该用户的身份得到了认证。

这种方法有如下缺点:其安全性仅仅基于用户口令的保密性,而用户口令一般较短且容易猜测,因此这种方案不能抵御口令猜测攻击[5];另外,攻击者可能窃听通信信道或进行网络窥探(sniffing),口令的明文传输使得攻击者只要能在口令传输过程中获得用户口令,系统就会被攻破。

尽管有许多漏洞,这种方法在非网络环境下还是经常被采用的,由于没有了传输的过程,所以这时上面列举的第二个缺陷不会被攻击者利用。

在网络环境下,明文传输的缺陷使得这种身份认证方案变得极不安全,一些网络环境中的服务,如FTP,虽然仍然使用了明文传输的用户名/口令身份认证方案,但多数时候这种服务已经退化为无需口令(或口令公开)的匿名文件传输服务。

解决的办法是将口令加密传输,这时可以在一定程度上弥补上面提到的第二个缺陷,但攻击者仍可以采用离线方式对口令密文实施字典攻击[5]。

加密传输口令的另一个困难是加密密钥的交换,当采用对称密钥加密方式时,要求认证方和被认证方共享一个密钥,但由于身份认证前双方的身份还不明确,不可能预先共享一个密钥,解决的办法是求助于第三方——一个可信任的权威机构,这就是下面要分析的认证方案的思想。当采用非对称密钥加密方式时,口令可以用认证方的公钥加密,由于公钥可以通过公开的渠道获得,这时不存在采用对称密钥加密时遇到的那种矛盾,当然,这也需要密钥分发机制的配合。由此,我们也看到,身份认证与密钥分发经常是联系在一起的,所以,下面提到的许多认证协议中也包含了密钥分发的功能。

1.2单向认证

如果通信的双方只需要一方被另一方鉴别身份,这样的认证过程就是一种单向认证,前面提到的口令核对法实际也可以算是一种单向认证,只是这种简单的单向认证还没有与密钥分发相结合。

与密钥分发相结合的单向认证主要有两类方案:一类采用对称密钥加密体制,需要一个可信赖的第三方——通常称为KDC(密钥分发中心)或AS(认证服务器),由这个第三方来实现通信双方的身份认证和密钥分发;另一类采用非对称密钥加密体制,无需第三方参与。

[1]需第三方参与的单向认证:

1、 A ® KDC :IDA||IDB|| N1

2 、KDC ® A :EKa[Ks || IDB || N1 || EKb [Ks || IDA]]

3 、A ® B    :EKb [Ks || IDA] || EKs[M]

[1]无需第三方参与的单向认证:

A ® B  :EKUb[Ks ]|| EKs[M]

[1]当信息不要求保密时,这种无需第三方的单向认证可简化为:

A ® B  :M || EKRa[H(M)]

(符号约定同课堂讲义)

1.3双向认证

在双向认证过程中,通信双方需要互相认证鉴别各自的身份,然后交换会话密钥,双向认证的典型方案是Needham/Schroeder协议。

[1]Needham/Schroeder Protocol [1978]

1、A ® KDC :IDA||IDB||N1

2 、KDC ® A :EKa[Ks||IDB||N1||EKb[Ks||IDA]]

3 、A ® B :      EKb[Ks||IDA]

4 、B ® A :      EKs[N2]

5 、A ® B :      EKs[f(N2)]

这种认证的漏洞和改进老师在课堂上已经讲过,这里就不重复了。

1.4身份的零知识证明

通常的身份认证都要求传输口令或身份信息(尽管是加密传输),如果不传输这些信息,身份也能得到证明就好了,这就需要身份的零知识证明技术。

零知识证明是这样一种技术,被认证方P掌握某些秘密信息,P想设法让认证方V相信他确实掌握那些信息,但又不想让V也知道那些信息(如果连V都不知道那些秘密信息,第三者想盗取那些信息当然就更难了)。

被认证方P掌握的秘密信息可以是某些长期没有解决的猜想问题的证明,如:费尔玛最后定理,图的三色问题,也可以是缺乏有效算法的难题解法,如:大数因式分解等,信息的本质是可以验证的,即可通过具体的步骤来检测它的正确性。

[2]下面是一个利用零知识证明技术认证身份的协议的例子:

设I(P)为被认证方P的身份信息,要求P可以不透露I(P)的一个比特使认证方确信P确实掌握I(P)。协议假定存在一个可信赖的机构,它的职责在于公布模数n,n等于两个大素数p和g之积,p和q都是mod 4与3同余。

I(P)必须包含P的许多信息。假定I(P)包含有P的秘密身份的k个数c[1],c[2],…,c[k],1<=c[i]<p,i=1,2,…,k;还有他的公开身份PI(P)的另外k个数d[1],d[2], …,d[k],1<=d[i]<p,i=1,2,…,k,而且满足

d[j]*c[j] 2 ≡ ±1 mod n        j = 1,2, …,k

认证方V知道n和PI(P)。P为了使V相信他掌握I(P),下面4个步骤算是一轮。通过轮数越多,P作假的概率越小。

S1.P选一随机数r,计算 ± r2 mod n,P取其中一个告诉V,称之为x 。

S2.V从{1,2,…,k}中选一子集S告诉P。

S3.P告诉V

y = rTc mod n

其中                                                Tc = ∏ c[j]  对所有的 j ∈s

S4.V验证

X = ± y 2 Td mod n ?

其中                                                Td = ∏ d[j]  对所有的 j ∈s

若等号成立,开始新的一轮验证或停止,否则予以拒绝。

由于d[j]*c[j] 2 ≡ ±1 mod n,j = 1,2, …,k。

所以             y 2 Td ≡ r2 Tc2 Td = r2 ∏ c[j] 2 d[j] ≡ ± r2 ≡ ±x mod n

随机数r是必要的,否则V选S = { j },从而找到c[j],对c[j]要求(c[j],n) = 1,j = 1,2, …,k,否则n可能被因数分解。

2.基于物理安全性的身份认证方法

尽管前面提到的身份认证方法在原理上有很多不同,但他们有一个共同的特点,就是只依赖于用户知道的某个秘密的信息。与此对照,另一类身份认证方案是依赖于用户特有的某些生物学信息或用户持有的硬件。

基于生物学信息的方案包括基于指纹识别的身份认证、基于声音识别的身份认证以及近来流行的基于虹膜识别的身份认证等。

基于智能卡的身份认证机制在认证时认证方要求一个硬件——智能卡(智能卡中存有秘密信息,通常是一个随机数),只有持卡人才能被认证。这样可以有效的防止口令猜测,但又引入了一个严重的缺陷:系统只认卡不认人,而智能卡可能丢失,拾到或窃得智能卡的人将很容易假冒原持卡人的身份。

为解决丢卡的问题,可以综合前面提到的两类方法,即认证方即要求用户输入一个口令,又要求智能卡。这样,既不担心卡的丢失(只要口令没有泄漏),又不担心口令的泄漏(只要卡没有丢)。

文献[4]提供了一个使用智能卡的单向认证协议的具体的例子,这里就不详述了。

三、身份认证的应用

1.Kerberos认证服务[7]

Kerberos认证服务老师在课堂上讲过,在课后我又读了介绍Kerberos认证服务的文献[7],在这里根据自己的理解简述一下。

Kerberos是一种受托的第三方认证服务(trusted third-party authentication service),它是建立在前面提到的Needham和Schroeder[1978]提出的模型基础上的,Kerberos要求信任第三方——即Kerberos认证服务器。Kerberos把网络划分成安全域,称为区域(realms),每个区域有自己的认证服务器并实现自己的安全策略。在每个区域内的认证过程是这样的:

Kerberos为客户和服务提供证明自己身份的票(ticket)以及双方安全通信的会话密钥(session key)。除客户第一次获得的初始票(initial ticket)是由Kerberos认证服务器(Kerberos authentication server,记作AS)签发外,其他票是由发票服务器(ticket-granting server,记作TGS)签发的,一个票可以使用多次直至过期。票的内容为:

{s,c,addr,timestamp,life,Ks,c} Ks  记作Tc,s

其中,s为服务名,c为客户名,addr为客户地址,timestamp为时间戳,life为生存周期,Ks,c为服务s与客户c之间的会话密钥,全部信息用服务s的密钥Ks加密。

客户方请求服务方提供一个服务时,不仅要向服务方发送从发票服务器领来的票,同时还要自己生成一个证(authenticator)一同发送。证是一次性的,内容如下:

{c,addr,timestamp} Ks,c  记作A c

其中,c为客户名,addr为客户所在工作站的地址,timestamp为工作站当前时间,全部信息用客户c与所要请求的服务s之间的会话密钥Ks,c加密。

具体过程分以下三步:

一、取得初始票

 

二、取得某项服务的票

 

三、请求该项服务

其中,timestamp是上一步中客户c发给服务s的证Ac中的timestamp,这样做的目的是使客户c确信与它会话的确实是服务s。(只有s才知道Kc,s,故只有s才能发回这个信息。)

              另外,文献[7]中具体介绍了一个在SUN NFS中加入Kerberos身份认证功能的例子。

2.HTTP中的身份认证[6]

HTTP协议目前已经有了三个版本HTTP 0.9、HTTP 1.0和HTTP 1.1,HTTP 0.9只定义了最基本的简单请求和简单回答;HTTP 1.0较完善,也是目前用得最广泛的一个版本,HTTP 1.1新增加了大量的报头域。

HTTP 1.0中提供了一个基于口令的基本认证方法,目前,所有的Web服务器都可以通过“基本身份认证”支持访问控制。当用户请求某个页面或运行某个CGI程序时,被访问对象所在目录下有访问控制文件(如NCSA用.haaccess文件)规定那些用户可以访问该目录, Web服务器读取该访问控制文件,从中获得访问控制信息并要求客户方提交用户名/口令组合,浏览器将用户输入的用户名和口令对经过一定的编码(一般是Base64方式),传给服务方,在检验了用户身份和口令后,服务方才发送回所请求的页面或执行CGI程序。可见,HTTP1.0采用的是前面讲述过的明文传输的口令核对方式(传输过程中尽管进行了编码,但并没有加密),这当然是很不安全的。

为增加安全性,用户可以选择使用SSL建立加密信道后再采用基本身份认证方式进行身份认证,当然,SSL中也有自己的更完善的身份认证机制,关于SSL老师在课堂上讲过。

HTTP 1.1在身份认证上,针对基本认证方式以明文传输口令这一最大弱点,补充了摘要认证方法,不再传递口令的明文,而是将口令经过散列函数变换以后传输它的摘要。使用摘要认证攻击者再也不能截获口令,他最多只能进行重放攻击,而且被限定在很短时间内,并只能用于同样的访问请求。尽管如此,摘要认证仍然不够安全,与基本认证一样,容易受到中间者攻击,如一个恶意的或被破坏的代理可能将服务方的摘要认证回答换成基本认证回答,从而窃得口令。

为HTTP提供更安全的认证方式需要与Kerberos服务相结合,如:CMU的Minotaur方案是结合特别的MIME类型和Plugin程序实现的。

3.IP中的身份认证

IP协议由于在网络层,无法理解更高层的信息,所以IP协议中的身份认证实际不可能是基于用户的身份认证,而是基于IP地址的身份认证。老师在讲IPSec时提到过其中的认证技术,这里就不讲了。

四、身份认证技术讨论

前面对身份认证技术的理论与应用进行了总结和分析,下面将结合自己的理解,进一步讨论一下身份认证的其他实现途径。

由于数字签名有一项功能是保证信息发出者的身份真实性,即信息确实是所声称的签名人签名的,别人不能伪造,这和身份认证的情形有些相似:身份认证的核心是要确认某人确实是他所声称的身份。那么,我想应该能借用数字签名机制实现身份认证,但这可能有一个困难,如果不预先进行密钥分发(即使是公钥,也要有一个机制将真实的公钥信息传递给每一个用户),可能数字签名也无从实现。(这可能就是前面总结的身份认证方法多与密钥分发结合进行的原因,可见,身份认证是众多安全要求中首先要解决的。)

但我们假设数字签名的公钥可从一个公认的权威处取得。

方案很简单:

1.双方首次与联系时,认证方先给被认证方发一条随机的信息,且对其进行签名。

2.被认证方检验认证方发来的信息的完整性,如完整,则去掉原签名,用自己的密钥重新进行签名,并发给认证方;如不完整,则要求重发(重发式认证方不能再用原来的信息,要换一条随机信息)。

3.认证方检验信息中被认证方的签名,如通过,则被认证,否则被拒绝。

这个方案可能不够完善,比如:由于都是明文传输,虽然信息都是一次性的,不怕暴露,但一旦信息的完整性遭破坏,认证就须重新进行;但,这个方案还是有一些优越性,如:秘密的信息不需在网络中传输、协议简单且可利用现成的数字签名机制等。

 本篇文章来源于【能人网】www.nengr.com  原文链接地址:http://www.nengr.com/article/7158.html

你可能感兴趣的:(网络与信息安全身份证认证技术分析)