挑战/响应式认证方式简便灵活,实现起来也比较容易。当网络需要验证用户身份时,客户端向服务器提出登录请求;当服务器接收到客户端的验证请求时,服务器端向客户端发送一个随机数,这就是这种认证方式的“冲击(挑战)”;当客户端接收到服务器的发送的随机数后,将此随机数传入令牌,令牌使用该随机数与内部存储的密钥进行加密运算,并将加密的结果传送给服务器,这就是这种认证方式中的“响应”;服务器在向客户端发送随机数的同时,也利用该随机数和存储在服务器端的密钥进行和客户端同样的运算。这样,当服务器端接收到客户端发送的加密结果后,就将客户端的加密结果与服务器端的加密运算结果进行比对,如果比对的结果相同,则认为该用户是合法用户。如果比对结果不同,则认为该用户为非法用户。
(1)客户端向服务器提出服务请求Request。
(2)服务器收到客户端服务请求后生成随机数R,并向客户端发送随机数R。
(3)客户端收到随机数R后,利用存储在令牌内的密钥C对随机数R进行Hash运算,并将Hash的结果H发送到服务器。
(4)服务器在将随机数R发送给客户端后,从后台的数据库中读取该用户对应的密钥C’,利用密钥C’对随机数R进行同样的Hash运算,得到Hash的结果H’。
(5)服务器收到用户端发送的Hash结果H后,将服务器进行Hash运算的结果H与H’进行对比。
(6)如果比较H与H’的结果不一致,则认为该用户是非法用户,重启认证流程。
(7)如果比较H与H’的结果一致,则认为该用户为合法用户,通过认证。
在挑战/响应的认证过程中,用户的密钥保存在用户持有的令牌内,服务器维护着一个用户的密钥数据库,服务器将用户对自己发送的随机数的加密结果和使用数据库中存储的该用户的密钥加密随机数的结果对比来完成认证。
该认证方式具有如下特点:
(1)能够抵御认证回放攻击。由于在挑战/响应的认证方式中,随机数是有服务器随机生成的,因此每次认证产生的随机数均不相同。如果攻击者获取了上次合法用户进行认证的数据并将该认证信息发送给服务器,但由于认证所需要的随机数已经改变,进行该次认证所需的信息也已经发生了改变,所以攻击者获取上次用户进行认证的数据并不能通过该次认证。因此,可以有效地抵御认证回放攻击。
(2)不能抵御中间人攻击。在挑战/响应地认证方式中,因为攻击者不具有用户持有地令牌,也不具有存储在令牌中地密钥,攻击者不能冒充合法用户对服务器发送的随机数进行加密。但由于挑战/响应认证的过程中,双方使用的随机数是明文形式,当攻击者能够使用自己控制的计算机充当认证双方通信的第三方时,就可以对双方通信的数据进行窃取和篡改。通过使用辅助手段,如通过使用加密技术使通信的双方通过加密的专用信道进行通信可以提高系统抵御中间人攻击的能力,但并不能提高认证本身抵御中间人攻击的能力。
(3)可以抵御密钥猜测攻击。用户令牌内的密钥是事先在令牌内产生的,在认证的过程中密钥并没有在网上传输,因此能够抵御在线的密钥猜测攻击。即使攻击者能够获取用户的信息,由于Hash函数的性质,使得每次加密之后的结果都大不相同,因此,攻击者很难从这些密文中破解出用户的密钥。但是为了提高抵御密钥猜测攻击的能力,建议每隔一定的时间就刷新一次令牌内的密钥。
(4)认证过程比较简单,安全性高,且容易实施。