摘要:本文总结并分析了身份认证的理论和应用,列举了一些对身份认证的攻击方法,并根据课堂学习和课后阅读,自己设计了一个利用数字签名实现的简单的身份认证方案。
认证技术是信息安全中的一个重要内容,在“网络与信息安全”课程中我们学习了两种认证技术:消息认证与身份认证,消息认证用于保证信息的完整性与抗否认性,身份认证则用于鉴别用户身份。在网上商务日益火爆的今天,从某种意义上说,认证技术可能比信息加密本身更加重要。因为,很多情况下用户并不要求购物信息保密,只要确认网上商店不是假冒的(这就需要身份认证),自己与网上商店交换的信息未被第三方修改或伪造,并且网上商家不能赖帐(这就需要消息认证),商家也是如此。由于认证技术是一项包含很广泛的技术,集中于某一方面可能更有针对性,所以,在这篇论文中我没有涉及消息认证技术。运用课堂学到的理论、课后阅读获得的知识根据自己的分析,我对身份认证技术作了总结分类,并针对每一种认证技术分析了优点和漏洞,然后剖析了一些应用,最后提出了自己想到的一个简单的利用数字签名实现的身份认证方案。
一、 身份认证的方法及可能的漏洞
身份认证的本质是被认证方有一些信息(无论是一些秘密的信息还是一些个人持有的特殊硬件或个人特有的生物学信息),除被认证方自己外,任何第三方(在有些需要认证权威的方案中,认证权威除外)不能伪造,被认证方能够使认证方相信他确实拥有那些秘密(无论是将那些信息出示给认证方或者采用零知识证明的方法),则他的身份就得到了认证。
根据被认证方赖以证明身份的秘密的不同,身份认证可以分为两大类:基于秘密信息的身份认证方法和基于物理安全性的身份认证方法。
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可能被因数分解。
RSS订阅






收 藏
推 荐