专利名称:一种基于安全散列函数的强口令双向认证协议的制作方法
技术领域:
本发明属于计算机安全和密码技术领域,是一种采用散列函数作为加密手段的基于强口令的双向认证协议,适用于各种轻量级终端用户在公共信道上与服务器进行双向身份认证的应用场景。
二.
背景技术:
在当今计算机网络中,最常见而且最简单的访问控制方法是通过对口令的匹配来确认用户的合法性。但是,以传统的静态口令为基础的用户身份认证存在很多问题,比如无法避免网络监听、重放、字典穷举攻击等攻击方式,安全性很弱。设计一个安全高效且无需硬件支持的口令认证协议,对于网络和计算机系统的安全具有至关重要的意义。虽然目前有很多安全的能抵抗离线字典攻击的认证以及密钥协商协议,比如DH-EKE,SPEKE,SRP,AMP等,它们都是基于计算量大的公钥算法,无法应用到如PDA,手机等计算能力弱的用户终端设备。随着移动设备的日益广泛使用,对于安全、轻量的基于口令的认证协议的需求也逐渐加强。
一种理想的适合轻量级终端用户身份认证的协议应满足如下要求1)在保证安全的前提下尽量减轻对于用户计算量和运行空间的要求;2)提供双向认证能力;3)用户无需使用任何硬件设备,只需记忆足够信息熵的口令。
三.发明简要本发明是一种基于安全散列函数的高效的强口令双向认证协议,该协议不使用任何公钥技术,只使用了散列函数和按位异或等轻量的运算操作保证口令认证过程的安全性。本协议能够抵御拒绝服务攻击,重放攻击,冒充攻击,服务器端验证信息库泄密后导致的其它攻击。本协议能够应用于各种使用轻量级客户端的在公共信道上与服务器进行双向认证的用户认证场景。
四.
发明内容
我们将分两部分介绍本协议,在4.1节我们介绍该协议的运行过程,在4.2节介绍其安全性。
4.1协议介绍我们在下面的介绍中使用A表示需要进行认证的用户,使用S表示认证服务器,P表示用户的口令,Ni表示第i次认证产生的随机数,h(·)表示安全的无碰撞的散列函数,表示按位异或运算,||表示字符串连接操作,k表示服务器端的安全密钥,U1=>U2mesg表示U1通过安全通道发送给U2信息mesg,U1→U2mesg表示U1通过公共通道发送给U2信息mesg。
为更有效地抵抗离线字典攻击但又不使用公钥技术,我们在设计的协议中要求用户选择使用强口令认证。所谓强口令,指具有较高信息熵的不容易猜测的用户口令字。目前没有通用的标准规定强口令的构成,但微软公司指定了一套强口令的评判依据可以作为用户选择口令的参考,如(1)至少有7个字符的长度;(2)不包含用户名字、用户名或单位名称;(3)不包含字典中有的单词;(4)与以前使用的口令不同;(5)必须包含大小写、数字和键盘中的符号。
本协议的运行由两个阶段构成,用户注册阶段和双向认证阶段。
在用户注册阶段,用户A通过安全通道向服务器S注册,由S选择第一个随机数N1,用户计算V1=h2(S||P||N1),另外,服务器选择服务器端的安全密钥k用于加强服务器端口令验证因子的安全性,并将k保存在一个安全的地方,然后计算SV1=V1KA,其中KA=H(A‖k),最后S保存{IDA,SV1,N1}在口令验证库中。
在双向认证阶段,当A第i次登录时,A产生一个随机数NA,并将其与IDA和登录请求一起发送到S。如图1所示。
S接收到A的认证请求后,从口令验证库中读取该用户对应的SVi,通过计算SViH(A‖k)获取h2(S‖P‖Ni),然后产生一个随机数Ni+1并发送第二步的信息。
当A收到第二步信息后,A输入口令P并计算h2(S‖P‖Ni),并由此获得服务器端产生的Ni+1如果Ni≠Ni+1成立,则A按照如下公式计算并发送d1,d2,d3d1=h2(S‖P‖Ni)h(S‖P‖Ni)d2=h(S‖P‖Ni)h2(S‖P‖Ni+1)d3=h(h2(S‖P‖Ni+1)‖Ni‖Ni+1)在接收到第三步信息后,S计算y1=d1h2(S‖P‖Ni)并验证h(y1)=h2(S‖P‖Ni)是否成立,如果成立,则S认为该用户是合法用户,然后服务器继续计算y2=d2y1,y3=h(y2‖Ni‖Ni+1),并验证y3=d3是否成立,如果成立,则服务器端将原来的记录{IDA,SVi,Ni}替换成{IDA,SVi+1,Ni+1},其中,SVi+1=h(A‖K)y2,然后发送h(NA‖Ni+1)和认证是否成功的结果给A来完成服务器对用户的认证。
在接收到服务器端发送的第三步信息之后,A验证该值是否正确以确保没有攻击者假冒服务器的攻击存在。
4.2协议的安全性由于我们要求客户端必须选择强口令以抵制离线字典攻击,因此我们设计的方案能够挫败攻击者的离线字典攻击,另外,由于在线猜测攻击对于所有的口令认证都不可避免,我们采用了清晰的先客户端后服务器端的认证方式保证服务器端能够记录用户的登录失败次数以此作为是否存在在线猜测攻击的凭据以便采取应付攻击的措施;另外,本协议能够抵制重放攻击,拒绝服务攻击,以及服务器端验证库被攻击后导致的攻击方式,并能获得用户和服务器端的双向认证,具体分析如下●重放攻击假设攻击者监听第i次认证前的所有认证信息,并重放以前的信息,由于d1,d2,d3这三个认证信息的计算包含了服务器端选择的随机值,我们要求随机值足够大,保证以往的随机值不同于此次认证的随机值,由此,简单地重放d1,d2,d3将使新的一次认证失败。如果攻击者选择通过以前的d1,d2,d3值修改新的一次认证的部分认证值,同样,由于d1,d2,d3的值互相关联,修改任意一个都会导致认证失败。所以攻击者无法实现重放攻击。
●服务器端验证库被攻击后导致的其它攻击在本协议中,我们在服务器端存储SVi作为验证因子,由SVi计算实际的验证值h2(pi)需要具备服务器端的安全密钥k,我们要求服务器端的k必须安全保存,因此本协议在一定程度上保护了验证因子的安全性。但是,如果k和口令验证库都被攻击者获取,并且该攻击者能够监听到下一次合法用户的认证信息,且能截断该认证信息加以修改后发出新的认证信息,则攻击者能够实现冒充合法用户进行登录并排斥合法用户正常登录的攻击目标。
●拒绝服务攻击假设攻击者试图通过改变d2来达到拒绝服务攻击的目的,则此次认证将会失败,原因是服务器端将通过d3来验证d2的完整性,而攻击者修改d2后无法得出对应的d3值,因此无法实现认证,服务器也就不会修改对应的口令验证库中对应的验证信息。另外,d1,d2,d3所涉及的随机值每次认证都不一样,攻击者无法通过计算以往的值来得到新的一次认证有效的d1,d2,d3值。因此,本协议能够抵抗拒绝服务攻击。
●用户和服务器假冒攻击当攻击者想冒充合法用户登录系统时,如上面的分析可知,攻击者既没法通过重放以前的认证信息来获得认证,也无法通过修改此次认证监听到的包来通过认证,主要原因是我们使用了动态认证码技术,每次认证所使用的认证信息都不同于以前的认证信息,因此攻击者无法冒充合法用户获得系统认证。如果有攻击者企图冒充服务器来获得合法用户的一些秘密信息,该攻击者试图通过重放以前监听到的第二步和第四步信息,但是攻击者将无法通过第四步信息的服务器认证,因为第四步信息h(NA‖Ni+1)中包含客户端产生的随机值NA,该值每次认证都会不同,所以攻击者无法假冒服务器完成最后一步认证。
五.
附图1基于安全散列函数的强口令双向认证协议的第i次认证过程
权利要求
1.一种基于安全散列函数的强口令双向认证方案,客户端只需记忆用户名和口令,服务器端保存客户端的口令验证因子,协议所涉及信息的加密运算基于安全的无碰撞的散列函数。
2.如上述权利要求1所述之方案,客户端在认证前需要向服务器端注册,服务器端需要保存客户端口令验证因子,该口令验证因子为一个由客户端口令和服务器端秘密保存的密钥所导出的秘密值。
3.如上述权利要求1所述之方案,在认证过程中要求客户端和服务器端均发送随机值以避免重放攻击。
4.如上述权利要求1所述之方案,客户端传送认证信息的同时发送下一次验证因子并进行完整性保护。
5.如上述权利要求1所述之方案,服务器端发送由客户端此次认证产生的随机值和服务器产生的下一次认证所需的随机值的串联得到的散列值作为此次认证的认证码以避免服务器端重放攻击。
全文摘要
本发明是一种基于散列函数的高效的强口令双向认证协议,该协议不使用任何公钥技术,只使用了安全散列函数和按位异或等轻量的运算操作保证口令认证过程的安全性。并要求用户选择使用信息熵较高的口令作为用户端的认证凭证来挫败在线密码猜测攻击。本协议能够抵御拒绝服务攻击,重放攻击,冒充攻击,服务器端验证信息库泄密后导致的其它攻击。本协议是一种客户与服务器的双向身份认证协议,适用于各种使用轻量级客户端设备的用户在公共信道上认证的应用场景。
文档编号H04L9/32GK1787515SQ200410096890
公开日2006年6月14日 申请日期2004年12月10日 优先权日2004年12月10日
发明者虞淑瑶 申请人:虞淑瑶