随着计算机网络应用的迅速发展,网络在为人们的生活提供方便的同时,也带来了巨大的信息安全隐患,网络信息资源的安全访问控制显得愈来愈重要。而身份认证作为网络应用系统的安全屏障,通过验证通信双方的真实身份,可以达到防止非法用户假冒合法用户窃取数据资料的目的。目前国内很多数字图书馆系统、电子商务及电子政务网站以及部分网上银行系统等各个领域的网络信息资源系统多是采用用户名加静态口令的方式进行身份认证,这种认证方法是将用户信息存储到系统中。当用户登录时输入相应的用户名和口令,认证系统通过自身存储的信息和用户输入的信息相比较,最后得出是否授权用户的结论。这种认证方式的安全性完全依赖于口令的保密性,而一旦在输入密码时被盗号程序所记录或在传输过程中被攻击者嗅探到造成口令泄露,都会对系统安全造成威胁或给用户带来损失。随着技术的发展,近年来数字证书和一次性口令技术开始逐步推广使用,但从目前提出的比较典型的认证方案来看还存在一定的安全缺陷,有必要进行深入分析并寻求解决方案。
1 目前主要身份认证技术的比较分析
1.1 基于PKI数字证书的身份认证方案
1.1.1 PKI与数字证书。PKI(Public Key Infras—tructure)即公开密钥基础设施,它是一个用公钥概念与技术来实施和提供安全服务的具有普适性的安全基础设施。在PKI系统中,CA(Certificate Authority)是一个域中的信任中心,其他设备或人之间的通信和验证都依赖于CA所颁发的数字证书。数字证书是一个将用户身份信息与公开密钥绑在一起,用CA的私钥签名后得到的数据结构。在网络通信中,数字证书就是标识通信各方身份信息的一系列数据,它提供了一种验证身份的方式,其作用类似于日常生活中的身份证。
1.1.2基于PKI数字证书的身份认证。服务器利用PKI向每位系统用户颁发标识其合法身份的数字证书。当用户登录时,服务器使用该用户相应的证书公钥加密一段随机明文发送给用户,用户则利用自己的证书私钥对接收到的密文进行解密。由于数字证书的公钥加密过程是不可逆的,这就保证了只有相应的私钥才能解开密文;而以目前的计算能力,第三方要破解私钥是不可能的,且证书私钥由相应的系统用户唯一掌握,这就保证了只有合法用户才能拥有相应的证书私钥。基于以上两点,系统可以做出判断:如果用户能够利用私钥成功解开密文,则为合法用户,否则为非法用户。
目前在Web上广泛使用的支持数字证书的身份认证协议主要是Kerberos协议和SSL协议。Kerberos协议是一个比较完备的基于证书的认证技术,以完善的证书授权中心CA体系为基础,它需要一个法律上合法的公正的第三方参与认证。SSL协议工作在数字证书和私人密钥基础上,客户端与服务器建立连接后,服务器把自己的数字证书与公共密钥发送给客户端,客户端随机生成会话密钥,用从服务器得到的公共密钥对会话密钥进行加密,并把会话密钥在网络上传递给服务器,而会话密钥只有在服务器端用私人密钥才能解密。这样,会话双方不仅能鉴别对方身份,而且可以实现信息传递的保密性和完整性。
但是目前我国IKI体系和CA系统的建设才刚刚起步,CA认证的权威性、互通性和可靠性等还达不到要求。在制度层面上,国内尚未出台统一的PKI标准或相关的管理规范,也没有一个明确的法律上承认的公正的第三方CA管理机构,这种缺乏统一标准的态势必将造成多种技术标准共存的局面;在应用层面上,一些CA认证机构对证书的发放和审核不够严谨,为了抢占市场,没有进行严格的身份确认和验证就随意发放证书,难以保证认证的权威性和公正性;在分布格局上,很多CA认证机构还存在明显的地域性和行业性,无法满足充当面向全社会的第三方权威认证机构的基本要求;在用户操作上,当前的基于数字证书的Web身份认证机制通常由操作系统或web服务器内部提供,以Windows平台为例,IIS内部提供了用数字证书进行Web客户身份认证的功能,可以将客户数字证书与操作系统的用户帐号绑定从而进行身份认证。但具体操作对用户的专业知识要求较高,而且用户必须手工对IIS等各项权限进行设置,非常繁琐、且灵活性差。因此从总体来看,目前基于数字证书的身份认证方案大规模应用的条件还不够成熟。
1.2一次性口令身份认证方案
1.2.1一次性口令及其理论基础。所谓一次性口令是指用户在登录时虽然输入的是固定的明文口令,但随即在客户端就被转换成另一种加密形式,再通过网络发送给服务器用于登录验证,每次产生的登录口令都不相同并单次有效。一次性口令认证是针对静态口令的安全缺陷而开发的,典型代表是由贝尔通信研究中心(Ball core)在1991年研制出来的S/KEY,它通过单向Hash函数的迭代运算对用户口令进行了加密变换从而实现了一次性登录口令。Hash函数是把可变长度的输入字符串转换成固定长度(通常比输入短)的输出串(Hash值)的一种函数,而单向Hash函数是在一个方向上工作的Hash函数,从预映射的值很容易计算其Hash值,但已知一个Hash值,要找到预映射的值,使它的Hash值等于已知的Hash值在计算上是不可行的,因此单向Hash函数的安全性就在于它的单向性。数学家曾做过统计计算,如Hash值H(m)的长度为128位时,则任意两个分别为Ml和M2的明文数据报文具有完全相同的H(m)的概率为,即近于零的重复概率,它比人类指纹的重复概率还要小5个数量级,而当我们取H(m)为384位乃至1024位时,则更是不大可能重复了。单向Hash函数是公开的,对处理过程不用保密,目前应用最为广泛的单向Hash函数算法是MD5和SHAl。二者可以将明文数据分别摘要成128位(bit)和160位的数字摘要或称数字指纹。
1.2.2 S/KEY一次性口令身份认证的具体实现。S/KEY认证方案分为两个过程实现:注册过程和认证过程。对于用户而言,注册过程只执行一次,而认证过程则在用户每次登录时都要执行。
a.用户注册过程。新用户选择要在网络信息资源服务器上注册的用户ID和口令PW,并提交注册请求和用户ID给服务器,服务器为该ID选择随机种子密钥Seed和最大迭代次数N,并发送给用户;用户收到Seed和N后,使用客户端计算程序计算HN(Seed//PW),即对Seed//PW进行N次单向Hash函数运算,并将计算结果HN(Seed//Pw)通过安全的信道发送给认证服务器;服务器收到单向Hash函数值HN(Seed//PW)后,将HN(Seed//PW)与对应的用户lD保存在认证数据库,同时将最大迭代次数减l后保存,即保存N-1。
以上步骤就完成了用户的注册工作,用户只需记住其登录ID和口令PW即可。
b.用户登录认证过程。假定用户第1次登录系统,在用户登录前网络信息资源的服务器上保存的认证数据有用户ID、HN(seed//PW)和迭代次数(N-1)。用户向服务器发送登录请求,并将用户ID发送给服务器;服务器从数据库中取出相对应的种子密钥Seed和迭代次数(N-1),并将这两个数据传送给客户端;客户端收到数据后,利用客户端的计算程序计算HN-1(Seed//PW),并将计算结果作为登录认证信息发送给服务器;服务器收到登录认证信息后,用服务器端的计算程序(与客户端计算程序使用同样的Hash算法)计算H(HN-1(Seed//PW)),然后将此计算结果与数据库中存储的认证数据HN(Seed//PW)相比较。若两者相同则认证通过。用户成功登录。注册与登录过程如图1所示。
图1 S/KEY一次性口令认证方案的注册与认证过程
若服务器通过了对用户的身份认证,将用收到的HN-1(Seed//PW)替换数据库中保存的HN(Seed//Pw),以便下一次认证使用。
当用户第二次登录系统时,将ID与(Seed//PW)送系统。系统计算H((Seed//Pw),,将其与存储的数据H(Seed//Pw)对照,如果一致,则接受用户的访问,并保存新计算的数据。当用户每一次想要登录时,函数运算的次数只需减1。
在S/KEY一次性口令身份认证方案中,用户的登录口令单次有效,而且明文口令既不存储在服务器和客户端中,也不在网络上直接传输,在认证过程中只有对明文口令和种子密钥经过若干次单向Hash函数运算生成的一次性口令在网络中传输一次。所以本方案的安全性比静态口令增强很多。但是,S/KEY一次性口令认证方案也存在很多问题需要改进。首先,在客户端登录过程中需要进行单向Hash函数的若干次迭代运算,大量的计算工作会对登录速度产生影响,从方案的编程与算法实现上也存在一定的困难;其次,用户每次登录系统都需要服务器端向用户传送种子密钥,对于登录效率有一定影响;第三,没有提供对传输数据的加密。方案中使用的种子密钥(Seed)和迭代值(N)都是以明文形式在网络上传输,存在一定的安全隐患。
2 基于S/KEY的一种安全简便的身份认证改进方案
从目前的实际情况来看,比较安全而且容易实现的网络信息资源用户身份认证方案仍然是采用一次性口令,但需要针对基本的S/KEY方案存在的问题进行改进,以弥补其不足。
2.1基本思路
在改进的网络信息资源用户身份认证方案中,每次登录时由服务器动态生成一个长度合适的随机数,并与服务器的系统时间一起,使用单向Hash函数处理为特定长度的Hash值并发送给用户端。由于系统时间随时在变化,再加上随机数的扰乱,使得最终生成的Hash值具有随机性从而保证了登录口令的一次性有效。同时,服务器端也不需要像S/KEY那样为每个用户保存种子密钥和迭代次数更不需要在网上传输这些明文数据,很大程度上提高了安全性;在S/KEY方案中用户端每次登录都需要进行N—i次单向Hash函数的迭代运算,即第一次登录计算N-1次,第二次登录计算N-2次,依次类推,迭代次数随着登录的次数递减,一旦迭代次数减为0后,用户就不能再次登录,需要产生新的种子密钥和迭代次数进行重新初始化。这样N的值在注册时如果设置得太大,会极大地增加用户端的计算量,影响登录效率。设置得太小又需要经常进行初始化操作增加了服务器的负荷。针对这一问题,在改进方案中取消了单向Hash函数的迭代运算,代之以两到三次运算,却可以达到同样的效果,从而提高了登录效率;另外用户在登录页面输入用户标识及口令等敏感信息后,立即由用户端脚本程序使用单向Hash函数进行加密变换,在服务器端也不再存储明文的用户标识与口令,代之以单向Hash函数值,从而有效保证了用户身份信息和明文口令的存储与传输的安全性。
2.2改进方案的实现过程
a.用户注册。新用户选择要在网络信息资源服务器上注册的用户ID和口令PW,并提交注册请求以及ID与口令的单向Hash函数值H(ID)与H(PW)给服务器,服务器收到后保存在认证数据库。仅此一个步骤就完成了用户的注册工作,用户只需记住其登录ID和口令Pw即可。
b.用户登录认证过程。用户向服务器发送登录请求;服务器收到用户端的登录请求后,生成一个长度合适的随机数,并与服务器的系统时间一起,使用单向Hash函数处理为特定长度的随机单向Hash函数值Hs,并将此值及所采用的Hash算法,一并回送用户端;用户在应答页面输入用户标识及登录口令等敏感信息后,随即由用户端脚本程序使用同一单向Hash函数算法计算H(ID)和H(PW),并对H(Pw)与收到的随机单向Hash函数值HS再次实施单向Hash函数运算以得到数字指纹,并与H(ID)一同回送服务器;服务器根据用户端送回的H(ID),找到用户注册时保存在服务器上的对应的H(PW),再将其与之前生成的随机HaSh函数值Hs一起被同一Hash函数算法处理为另一定长的数字指纹;服务器将用户端发回的数字指纹与服务器自己计算出来的数字指纹进行比对,若两者相同,则认证通过。用户成功登录。登录过程具体如图2所示。图2改进方案的用户注册与认证过程
2.3改进方案的安全性与性能分析
a.安全性分析。在改进的身份认证方案中,用户登录时仍然输入明文口令,再通过单向llash Pfj数运算实现了一次性口令,与S/KEY一样保持了网络信息资源用户身份认证的安全性。同时弥补了S/KEY认证方案的不足:首先,服务器端不需要像S/KEY那样为每个用户保存种子密钥和迭代次数,很大程度t提高了安全性;第二,用户每次登录系统不需要服务器端向用户传送种子密钥,消除了种子密钥泄露的可能性;第三。不但用户口令同S/KEY一样既不存储在用户计算机中也不以明文形式存储在服务器中,用户ID也以单向Hash函数值的形式H(ID)存放在网络信息资源服务器端数据库里面,由于函数的特性单向性,即使H(ID)被窃取也无法获得ID,从而使用户的身份信息得到保护。
b.性能分析。在本认证方案中,用户只需要和使用传统登录系统一样输入用户名和口令,其他由程序自动完成,因而用户操作较为方便。而且登录认证过程中双方要进行的单向Hash函数运算由S/KEY的N-i次迭代运算简化为两到三次运算,极大地减少运算次数,提高了登录效率;方案的执行不涉及第三方,身证过程由通信双方完成,简化了认证程序并有效避免了信息泄露的可能性。另外,从方案的编程与算法上也较为简单,易于实现。
3 结束语
本文通过分析目前主要的身份认证技术实现的可行性与安全性,以S/KEY一次性口令认证方案为基础,提出了一种能有效适用于网络环境的易于实现的网络信息资源用户身份认证方案。该方案能够从计算机存储到网络传输的各环节保护用户口令不被泄露从而有效地防止常用攻击手段的攻击,有效地保护了用户身份信息,增强了认证过程的安全性。
CIO之家 www.ciozj.com 公众号:imciow