APP下载

基于口令的身份认证方案安全性分析及其改进

2019-04-03

关键词:用户端服务器端哈希

徐 军

( 山东理工大学 计算机科学与技术学院, 山东 淄博 255049)

身份认证处于访问控制的最前端,是网络应用系统的首道鉴别防御线。身份认证的主要方法有两种:一是利用认证依据,主要指主体掌握的秘密,如口令、密钥等;主体携带的物品,如智能卡等;或者是主体独有的生物特征等。二是基于对称密码、公钥密码体制的身份认证协议,如Needham-Schroeder 协议等,在这类协议中,示证者能够向验证者证明其身份,验证者并没有从中获得任何有用的信息。其中,采用口令作为依据是最经典常用的认证方式[1],也最容易受到破解、攻击。由于口令注册、口令存储、口令更新的成本较高,口令认证并不是一种廉价的方式,研究口令认证仍然很有必要。目前常用的口令认证方案有Lamport 方案、Bellcore方案、时钟同步方案(Time Synchronized) 、质询-响应方案(Challenge-Response)、S /KEY 认证方案等,文献[2-12]都对目前常规口令认证方式进行了分析和一定的改进。其中, 文献[2]在S/KEY一次性口令认证技术的基础上,使用随机串实现服务端和客户端的双向认证,同时结合使用AES和RSA加密技术,对注册数据和认证数据进行加密;文献[3] 基于单钥体制使用质询设计了一个有效的适用于网络通信系统的身份认证方案,克服了通常的质询响应认证方案的弱点,能够防止重放攻击和冒充攻击;文献[4-12]则对S/Key方案进行了不同形式的改进,解决了用户端与服务器端的双向认证。目前口令加盐技术一般在编程中有所应用,但鲜有论述,考虑到对并发、效率要求较高的应用场合,需要设计满足一定安全等级要求的口令认证系统。

1 常规口令身份认证方案

口令身份认证由两方组成,一方为出示口令者,即web客户端,提交口令以证明自己与主体相附;另一方为验证者,即服务器端,负责检验口令的正确性和合法性,验证其是否是其声称的主体,然后决定其是否满足访问控制的要求。对口令身份认证过程中的可能攻击有如下3种形式:

1)Sniffer方式,即网络数据流窃听。若网络传递的口令信息是未经加密的明文,攻击者通过窃听网络数据,就很容易识别出某种特定系统的数据包,并提取出用户名和口令。

2)拷贝/重传,非法用户截获口令信息,然后再传送给接收者,也就是重放攻击。

3)离线或在线字典攻击 ,即暴力攻击。

为抵抗上述3种攻击形式,口令认证一般不直接传输明文口令,而是利用哈希函数的特殊性质来设计方案[3],基本思想是利用散列函数产生口令, 网络信道传输口令的哈希值, 而且口令具有一次性。

早期常规的口令认证方案模型如图1所示。此方案在编程实践中经常采用,服务器端不存储口令明文,明文不会在网上传输,并且根据口令摘要也无法推导出口令。认证协议容易设计,口令的修改、更新协议也容易实现。方案的主要缺点为不能抵抗重放攻击,也不能抵抗穷举方法的攻击,比如,查表法(Lookup Tables)。查表法没有采取字典破解和暴力破解直接方式,而是首先将一些比较常用的密码的哈希值算好,然后建立一张表,当然密码越多,这张表就越大。如果获取某个密码的哈希值后,只需在建立好的表中查找该哈希值,若匹配,则破解相应密码。

图1 常规口令身份认证方案Fig.1 The conventional identity authentication schere

2 身份认证安全性增强方案

2.1 口令加盐

用户密码经加密后的哈希值存储在数据库中仍然是不够安全的,为增强安全性,可采取口令加盐的措施。盐值(Salt)实质就是一个随机生成的任意字母、数字或是字母和数字的组合。则认证方案描述为:

第一阶段:密码加盐

①口令字符串的生成:s=salt+password;

②用哈希函数给口令s加盐:sk=hash(s);

③服务器端储存盐值结果。

第二阶段:验证口令

① 接收用户提供的帐户名userid和口令password;

② 在帐户口令数据库中检查userid的合法性,如果合法,则找出其对应的salt,帐户口令数据库的基本结构见表1;

表1 帐户口令数据库的结构

Tab.1 The structure of account password database

用户标识加盐口令盐 值useridhash(salt,password)salt

③计算加盐口令信息:s=hash(password,salt);

④ 如果帐户信息数据库中存储的加盐哈希口令与s相等,则认证成功,否则,认证失败。

如果口令库中只存储hash值,通过查表法(如彩虹表)可以将口令反推出;而通过加盐技术,由于盐值是随机生成的,再采用哈希运算,哈希函数的单向性,能够有效抵抗查表法攻击。同时, 加盐处理使字典攻击也变得更为困难。

2.2 S/KEY一次一密认证技术

为了实现一次一密,一般采用哈希链算法,使每次登录过程生成的密码都各不相同,并且在每次登录过程中加入随机选定的、采用哈希函数的不确定因子,以提高登录过程的安全性。系统接收到登录口令以后, 以同样的算法做一个验算即可验证用户的合法性。

方案参数设定:初始化口令password和整数n,及一个单向散列函数H,H符合链式特征,即对于任意整数r,p1=H(r),p2=H(p1),…,pn+1=H(pn)。

验证端在登录口令数据库中存储userid、n和pn+1的值;用户端存储p1,p2,…,pn序列。

实现过程:

用户端计算pn=H(password)的值,将userid和pn传送给服务器,服务器端计算pn+1=H(pn)的值,同服务器上相应的值pn+1进行比较。

若相等,则验证成功,然后用pn的值取代服务器上pn+1的值,同时,n的值减1。

用户每次登录时,都输入其列表中未取消的最后的数,这样实现了每次登录到服务器的口令均不相同,能够抵抗重放攻击,也比较容易编程实现。系统需要进行多次Hash运算,方案安全性主要依赖于单向散列函数H的强度,而且用完列表中的数后,需要重新初始化,服务器的额外开销比较大。

但S/KEY系统无法抵御冒充服务器的攻击。也就是说,传统S/KEY系统是只支持服务器对用户单方面鉴别的认证协议,认证过程中只对用户进行认证而没有对服务器进行鉴别,并且 S/KEY 方案并没有提供对数据的加密,初始化参数及序列都是以明文形式在网络连接中传输。

针对S/KEY方案的小数攻击的形式[5-8,11],当客户端向服务器请求认证时,攻击者截取服务器传来的种子和迭代值,并修改迭代值为较小值,然后假冒服务器,将得到的种子和较小的迭代值发给用户。当客户端利用种子和迭代值计算一次性口令,攻击者再次中间截取客户端传来的一次性口令,并利用已知的单向散列函数,计算较大迭代值的一次性口令, 即可获得该客户端后继的一系列口令,进而完成合法用户冒充。

文献[11]通过引入存储卡、智能卡或者增加时间戳作为验证因子,对常规S/KEY方案进行改进,基本实现了用户端与服务器端之间的双向认证,并实现了对协议关键参数和序列数的完整性保护,能够抵御冒充服务器的小数攻击,但增加了服务器的运算成本,且关键参数需要保存在服务器中。

3 身份认证安全性改进方案

3.1 方案设计

基于上述分析,若提高认证安全强度,须引入随机因子,或增加交互次数,本文考虑在身份认证方案中引入质询—应答技术,并且在口令存储中采用加盐技术,以提高系统整体的安全性;同时增加时间戳作为质询—挑战验证因子,通信双方通过检验对方对非重复质询作出的响应是否正确来实现相互认证,能够抵御重放攻击,同时具备对小数攻击的防范能力,方案未采用 S/KEY 方案中的Hash 链方式,以减少服务器端的计算量,提高效率。

质询—应答方式一般应用于对密钥、公钥的身份认证技术,协议相对比较复杂,运算量也较大。本文方案是在一般的口令认证方案中,通过增加质询环节,采用哈希方法,避免数字签名、公钥密码等运算量较大的算法,尽量减少客户端、服务端的计算量,也可达到提高安全性的效果,如图2所示。

图2 强化安全质询—挑战口令认证方案Fig.2 Reinforcing security inquiry-challenge certification Scheme

3.2 方案算法描述

用户的主要参数为userid与password,双方选定共同的哈希函数H,约定使用共同的加密解密算法如DES或AES,加密简写为E,解密简写为D。

这种模式的主要特点:1)政府主导,整合社会资源,充当引领者、推动者、服务者、监管者等第三方角色,促进乡村闲置宅的旅游发展;2)经营主体依然是个体农户;3)农户收入主要为租金收入、服务收入;4)农户与农户之间、农户与村集体之间关系比较松散。

初始化工作,服务器端的口令数据库仍采用类似表1 的结构,网上口令注册时,生成盐值密码储存。

3.3 方案认证过程

1)用户端经过哈希运算,形成口令摘要H(password),与userid一起,发送至服务器认证端。

2)服务器端根据userid从口令库中取出存储的、匹配的盐值salt,计算H(salt,password),与存储值进行比较,若不相等,则认证失败,否则,转下一步。

3)服务器端生成时间戳,将其代替质询随机数r,将此质询暂存,然后将此质询发送给用户端。

4)用户端使用第一步的口令散列值H(password)作为密钥,用约定的加密算法对r进行加密,即t=E(r),E(r)即用户端对认证端质询的一个响应,将此响应发送回服务器端。

5)服务器端使用已收到的口令哈希值作为密钥,对收到的响应t使用D过程进行解密,并与自己选定的随机数r进行比较,若r=t,则认证通过。

3.4 方案分析

显然,本方案继承了常规认证方案的优点,使用了加盐技术,并引入了时间戳作为质询,实现了双向认证,因而能够抵御字典攻击、重放攻击、假冒攻击和小数攻击。

时间戳技术的应用,起到两个作用,一是记录交互的时间点;二是作为交互的质询因子,即使非法用户截获哈希口令信息,然后再传送给认证端,入侵者也很难回答认证端的质询,即使随机数r被截获,也难以破译哈希口令的时间戳,这对攻击来说是困难的,因而能够抵御中间重放攻击。

与前面所述的加盐方法相比,保留了加盐技术能够抵抗字典分析的优点,并且挑战参数是即时随机生成的,用完后即可丢掉,不同轮次的质询之间不存在相关性,因而具有更高的灵活性和安全性。

与其他一次一密技术以及基于公钥的身份认证协议相比[13-14],本方案服务器端的运算量较小,登录一次双方只用到一次加解密运算,主要工作为一次基于哈希运算的交互和两次基于对称密码的交互,简单易于实现;同时,与文献[6]中口令认证方案相比,运算量没有增加,安全性有一定提高。

4 结束语

身份认证方案的安全强度,需要综合衡量计算成本、存储成本、操作等因素,比如单纯为了抵抗在线字典攻击,防止机器恶意注册,可采用图形码验证机制,这方面的做法有很多。本方案只是提供一种综合安全强度相对较高、编程容易实现、认证效率相对较高的算法,主要不足是依据本方案的口令注册算法、口令更新算法,交互过程会比较复杂,但难度不大,运算成本也不会很高。

猜你喜欢

用户端服务器端哈希
Android用户端东北地区秸秆焚烧点监测系统开发与应用
基于特征选择的局部敏感哈希位选择算法
哈希值处理 功能全面更易用
Linux环境下基于Socket的数据传输软件设计
文件哈希值处理一条龙
基于三层结构下机房管理系统的实现分析
基于三层结构下机房管理系统的实现分析
一种太阳能户外自动花架电气系统简介
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计