⽤户验证机制之挑战应答⽅式
“挑战应答⽅式”:challenge-response,是零知识证明的⽅式。
顾名思义,基于挑战/应答(Challenge/Response)⽅式的⾝份认证系统就是每次认证时认证服务器端都给客户端发送⼀个不同的"挑战"字串,客户端程序收到这个"挑战"字串后,做出相应的"应答",以此机制⽽研制的系统.认证过程为: 1. 客户向认证服务器发出请求,要求进⾏⾝份认证;
2. 认证服务器从⽤户数据库中查询⽤户是否是合法的⽤户,若不是,则不做进⼀步处理;
3. 认证服务器内部产⽣⼀个随机数,作为"提问",发送给客户;
身份认证系统4. 客户将⽤户名字和随机数合并,使⽤单向Hash函数(例如MD5算法)⽣成⼀个字节串作为应答;
5. 认证服务器将应答串与⾃⼰的计算结果⽐较,若⼆者相同,则通过⼀次认证;否则,认证失败;
6. 认证服务器通知成功或失败。
以后的认证由客户不定时地发起,过程中没有了客户认证请求⼀步。两次认证的时间间的密钥隔不能太短,否则就给⽹络、客户和认证服务器带来太⼤的开销;也不能太长,否则不能保证⽤户不被他⼈盗⽤IP地址,⼀般定为1-2分钟。
2.密钥的分配和管理
密钥的分配由维护模块负责,当⽤户进⾏注册时,⾃⾏设定⾃⼰的⼝令字。⽤户由⼝令字⽣成。
⼀个⼝令字必须经过两次⼝令字检查。第⼀次由注册程序检查,强制⼝令字必须有⾜够的长度(如8个字符)。⼝令字被加密后送⼊数据库中,这个⼝令字标记为’未检查的’。第⼆次,由离线的⼝令字进⾏检查,将字进⾏标记,当下⼀次时,认证服务器将强制⽤户修改⼝令字。
密钥的在线修改由认证服务器完成,它的过程与认证过程基本类似。