动态口令身份认证机制及其安全性研究*顾韵华,刘素英(南京信息工程大学计算机与软件学院,南京210044)摘要:基于口令的身份认证是目前多数应用系统所采用的安全机制。动态口令是身份认证机制新的发展方向。本文详细阐述了常用的三种动态口令机制,并对它们的安全性进行了分析。关键词:动态口令时间同步事件同步挑战/应答安全性中图分类号:TP309.2文献标识码:AResearchonDynamicPasswordIdentityAuthenticationMechanismandItsSecurityGuYunhua,LiuSuying(SchoolofComputerandSoftware,NanjingUniversityofInformationScienceandTechnology,Nanjing,Jiangsu,210044)Abstract:IdentityAuthenticationbasedonpasswordismainsecuritymechanisminmanyapplicationsystems.DynamicpasswordisthetrendoftheIdentityAuthenticationmechanism’sdevelopment.Thethreecommondynamicpasswordmechanismsinusearedescribedindetailsinthisarticleandtheirsecurityisalsoanalyzed.Keywords:dynamicpassword;timesynchronization;eventsynchronization;challenge/response;security1引言基于口令的身份认证机制具有易于实现和操作简单等特点,被广为使用。传统的静态口令机制采用用户名/口令核对法:即系统为每个用户维护一个(用户ID,口令)二元组信息,用户登录系统时,输入自己的用户ID和口令,系统通过比对用户输入的(用户ID,口令)与系统内维护的(用户ID,口令)二元组信息,来判断用户身份的合法性。这种方式实现和操作都很简单,但其安全性仅依赖于用户口令的保密性,一旦用户口令泄密,合法用户就会被冒充。用户口令的泄密存在主、客观两方面的原因:主观方面,用户为方便记忆往往采用短口令或者生日、姓名、电话号码等作为口令,并且常会出现用户对口令管理不善(如随手写下口令造成口令泄露)的问题;客观方面,攻击者可采用多种攻击手段以获得用户口令,常用的攻击手段有穷举尝试、字典攻击、网络窃听、重放攻击等。动态口令机制是为了解决静态口令的不安全问题而提出的,基本思想是用动态口令代替静态口令,其基本原理是:在客户端登录过程中,基于用户的秘密通行短语(SecurePassPhrase,SPP)加入不确定因素,对SPP和不确定因素进行变换(如使用MD5信息摘录),所得的结果作为认证数据(即动态口令),提交给认证服务器。认证服务器接收到用户的认证数据后,以事先预定的算法去验算认证数据,从而实现对用户身份的认证。由于客户端每次生成认证数据都采用不同的不确定因素值,保证了客户端每次提交的认证数据都不相同,因此动态口令机制有效地提高了身份认证的安全性。根据口令生成时不确定因素的选择方式,动态口令机制有时间同步机制、事件同步机制和挑战/应答机制等,本文将阐述这三种常用动态口令机制,并对它们的安全性进行分析。2常用动态口令机制2.1基于时间同步的动态口令机制基于时间同步(TimeSynchronization)的动态口令机制,其特点是选择单向散列函数作为认证数据的生成算法,以种子密钥和时间值作为单向散列函数的输入参数。由于时间值是不断变化的,因此散列函数运算所得的认证数据也在不断变化,保证了每次产生的认证数据不相同。基于时间同步的动态口令机制的认证过程如图1所示。*本文的研究工作受江苏省高校自然科学研究项目资助,编号06KJD520120客户端认证服务器图1基于时间同步动态口令机制的认证过程基于时间同步动态口令机制的认证过程如下:用户输入ID(或PIN码),客户端单向散列函数以时间和种子密钥作为参数进行计算,将计算所得的动态口令传送到认证服务器。认证服务器确认用户ID的合法性后,从服务器加密的数据库中提取该用户所对应的种子密钥,采用与客户端相同的单向散列函数计算出验证口令,若验证口令和动态口令相同则通过验证,否则不能通过验证。时间同步方式的关键在于认证服务器和客户端的时钟要保持同步,只有在两端时钟同步的情况下才能做出正确的判断。一旦发生了时钟偏移,就需进行时钟校正。目前一些著名的动态口令安全产品,如RSA的SecureID和Vasco的DigPass系列均采用基于时间同步的动态口令生成技术。2.2基于事件同步的动态口令机制基于事件同步(EventSynchronization)的动态口令机制又称为Lamport方式或哈希链(Hashchains)方式。事件同步机制是以事件(例如使用次数或序列数)作为变量。在初始化阶段选取一个口令PW和一个迭代数n,及一个单向散列函数H,计算Y=Hn(PW)(Hn()表示进行n次散列运算),把Y和n的值存储于认证服务器上。客户端计算Y'=Hn-1(PW),将计算结果提交给服务器。服务器则计算Z=H(Y'),并将Z值与服务器上保存的Y值进行比较。如果Z=Y,则验证成功,然后用Y'的值取代服务器上保存的Y值,同时将n的值递减1。基于事件同步的动态口令机制的认证过程如图2所示。客户端认证服务器图2基于事件同步动态口令机制的认证过程基于事件同步的动态口令机制易于实现,且无须特殊硬件的支持。但该方案每次进行身份认证时,客户端要进行多次Hash运算。而且由于迭代值n不断递减,当递减为0时就需要重新初始化系统,服务器的额外开销比较大。基于事件同步的动态口令机制同样存在失去同步的风险,如用户多次无目的的生成口令就会造成失步。对于事件的失步,认证服务器可采用增大偏移量的方式进行再同步,即服务器端自动向后推算一定次数的密码。事件同步动态口令机制的典型代表是ENIGMA公司的认证技术、SecureComputing公司的SafeWord产品等。2.3基于挑战/应答的动态口令机制基于挑战/应答(challenge/response)的动态口令机制属于异步方式,其基本原理为:选用户ID种子密钥时间单向散列单向散列时间用户ID验证种子密钥口令PWn-1次H散列验证H散列Y'ZY用户ID用户ID择单向散列函数或加密算法作为口令生成算法。当用户请求登录时,认证服务器产生一个挑战码(通常是随机数)发送给用户;用户端将口令(密钥)和挑战码作为单向散列函数的参数,进行散列运算,得到的结果(即应答数)作为动态口令发送给认证服务器。认证服务器用同样的单向散列函数做验算即可验证用户身份。基于挑战/应答的动态口令机制的认证过程如图3所示。其身份认证过程为:(1)客户端输入用户ID等信息,向认证服务器发送连接请求。(2)服务器检查询数据库,若是合法用户ID,则生成挑战码并传回客户端。(3)客户端根据密钥和挑战码,执行单向散列函数运算,生成应答数并发送到服务器。(4)服务器执行同样的算法生成应答数,并与客户端发来的应答数进行比对,得到验证结果并传回客户端。图3基于挑战/应答动态口令机制的认证过程挑战/应答机制中的不确定因素是由认证服务器产生的随机数。由于每个随机数都是惟一的,因此保证了每次产生的口令都不相同。基于此方式的产品有COPYTOCard公司的COPYTOCard智能卡等。口令序列(S/KEY)方式是挑战/应答机制的改进,该方法借鉴了事件同步的思想。其中口令为一个单向前后相关的序列,认证服务器只保存第N个口令。客户端首先向认证服务器传送用户ID,认证服务器传回一个挑战码(由该用户ID对应的种子值和迭代值组成)作为响应。客户端计算程序使用该挑战码和秘密通行短语SPP产生一个动态口令K,以K进行登录,作为对挑战的应答。服务器端计算程序同时也进行计算,产生动态口令K',将K'与所收到K进行对比,从而完成服务器对登录用户的鉴别。每次登录成功后,迭代值递减。当迭代值递减为0或秘密通行短语泄密后,必须重新初始化。基于口令序列方式的产品有Bellcore公司的S/KEY、Wietse公司的LogDaemon等。3安全性分析口令机制的安全威胁主要来自于信道窃听攻击、穷举尝试和字典攻击、重放攻击、中间人攻击、口令泄露等几个方面。动态口令机制是针对静态口令的不安全性提出来的,在防御以上口令安全威胁上,比静态口令机制具有更高的安全性。(1)信道窃听动态口令机制能够完全抵御信道窃听攻击,因为在信道中传输的不是用户的口令而是计算得到的认证数据,攻击者无法窃听到用户的口令。并且由于在计算认证数据中使用了具有不可逆性的散列函数,因此攻击者难于从认证数据中得到用户口令。(2)穷举尝试和字典攻击动态口令机制中的用户口令(密钥)的安全性仍非常重要,如果用户口令过于简单,容易被攻击者通过穷举法或字典攻击获得,攻击者仍然能够实施攻击。但在动态口令机制中用户口令仅是产生动态口令的一个因素,产生动态密码时更重要的是加入了不确定因素,所以,客户端认证服务器(1)认证请求(2)挑战码(3)应答数(4)验证结果即使攻击者通过穷举法或字典攻击得到用户口令,也因很难获得不确定因素而难于产生可用的动态口令。因此动态口令机制可以有效抵御口令猜测攻击。(3)重放攻击动态口令机制能够完全抵御重放攻击,因为每次用户向服务器提交的认证数据都是不同的,因此即使攻击者截获了认证数据,也无法通过重放而获得服务器的验证。(4)中间人攻击动态口令机制不能完全抵御中间人攻击。当用户通过网访问服务器时,位于用户与服务器之间的攻击者,可以劫持用户与服务器之间的通信:一方面假冒用户与服务器连接,另一方面假冒服务器与用户连接。(5)口令泄露动态口令机制能够有效防止口令泄露造成的安全问题,因为许多动态口令系统中,用户的口令不会在网络中传输。从以上分析可见,动态口令技术能够有效地抵御大部分针对静态口令的攻击,其安全性得到明显的提高,特别是能有效地抵抗信道窃听、截取/重放、口令泄露等安全威胁。但动态口令机制仍然存在着安全问题,主要表现为基于事件同步和基于口令序列的动态口令机制不能抵御小数攻击,动态口令机制仍然是单向认证机制,并且动态口令机制还不能有效地防范系统内部人员攻击。基于事件同步和基于口令序列的动态口令机制中,由于种子值和迭代值在网络上都是以明文传输,攻击者可通过网络窃听获取用户的种子值和迭代值。攻击者可将窃得的迭代值修改为较小值,然后假冒服务器,将窃得的种子值与修改过的较小迭代值发送给用户。用户采用攻击者发来的种子值和较小迭代值计算出动态口令K,然后发给服务器。此时攻击者再次截获用户传来的动态口令K,并利用已知的单向散列函数依次计算较大迭代值的动态口令,这样就可获得该用户后继的一系列口令,进而攻击者就可以在一段时间内冒充合法用户,这就是小数攻击。为了防范小数攻击,可采取多种技术来改进动态口令机制。一种常用的改进方案是,在服务器中不保存上次的动态口令,而保存加密后的用户秘密通行短语,在进行身份认证时,客户端和服务器端进行相同的单向散列运算,这样既省去了系统的口令初始化过程,又避免了攻击者修改迭代值实施小数攻击。目前的动态口令机制仍主要是单向认证机制,即服务器对登录用户的身份认证,而用户无法确认服务器的身份,可以在动态口令技术中引入双向身份认证机制来解决此问题。另外,动态口令认证机制不能有效地防御内部人员攻击。因为认证服务器在验证动态口令时,要使用保存在数据库中的种子密钥或上次验证通过的动态口令,若系统内部人员(如管理员)进入认证服务器数据库,并且修改了数据,则其就可以假冒用户登录进入系统。解决此问题的途径有两条:一是动态口令验证服务器采用安全的数据库系统,比如数据加密保存,并且严格管理,确保只有授权的人才能接触验证服务器数据库中的数据,同时所有操作要有日志记录。二是将动态口令机制