基于S/Key协议的身份认证系统设计与实现【python】

实验内容

1  身份认证系统设计

设计身份认证系统的功能、主要界面、主要软件模块,以及采用的认证技术路线和方法。

2  编程实现所设计的身份认证系统

在C++、Python或Java程序设计环境下,编程实现基于S/Key协议的身份认证系统。要求实现的身份认证系统至少具备以下功能:

(1)支持用户名/口令/验证码机制的身份认证;

(2)满足动态口令的技术要求;

(3)当前口令序列使用完毕后能够继续协商;

(4)记录用户登录日志,支持日志查看。

3  软件测试及优化。

在实验室所在的局域网内,对设计实现的身份认证系统进行简单的测试,对发现的问题和软件存在的缺陷进行改进和优化。

4 、实验分析和 总结 

实验思路

本实验采用客户端/服务器的交互模式,来模拟实现基于S/Key协议的身份认证系统

S/Key协议身份认证流程

1.初始化

①用户在客户端输入用户名(应限制用户名的格式,如长度、包含的字符等),并将其发送到服务器

②服务器接收到客户端发送来的用户名,判断该用户名是否已经注册,如果未注册,则向用户发送一个种子:SEED(注意:客户端每次向用户发送的种子应当不同);然后再服务器端应当保存该用户名

③客户端接收到种子之后进行预处理:先将用户名和种子拼接成一个字符串,然后对该字符串进行MD5哈希,再将MD5加密后的结果前16字节和后16字节进行异或运算,结果记为S

2.生成口令序列

①对S进行MD5哈希,得到口令

②将第一个口令发送到服务器,作为初始登录的密码;接下来依次使用第2—N个口令进行登录

3.登录流程

①用户输入口令序列,将输入的内容发送到服务器,在服务器通过对保存下来的密码进行MD5哈希,与口令序列进行比对,验证口令是否正确

②在用户输入用户名时,如果用户名已注册,则直接使用注册时生成的口令序列依次登录

③如果口令验证成功,则服务器生成验证码,发送给用户,用户输入验证码进行登录

④验证码输入正确,则登录成功

4.口令序列使用完毕后的协商策略

①在服务器端记录当前用户可用的口令条数

②每当口令验证成功后,可用的口令条数减一

③口令使用完毕,服务器向用户发送提示和种子,再客户端依据种子重新生成N条口令序列用于登录

实验结果

1. 用户名还未注册:

客户端输入用户名,进行注册:

注册成功后生成5条口令,其中第一条口令存储到服务器端:

客户端可以使用剩下的4条口令进行登录:

使用第1条口令进行登录:

口令验证正确,然后服务器生成验证码,发送给客户端,接下来输入验证码进行登录:

验证码输入正确,登录成功;

2. 用户名已经注册:

如果用户名存在,则直接输入口令进行登录

由于第一条口令已经使用过,再次使用第一条口令会提示登录失败:

此时我们更换第二条口令即可:

如果验证码输入错误,也会导致登录失败:

如果输入正确的验证码,就会登录成功:

3. 用户名已注册,但是生成的口令已经使用完:

会重新进行初始化,生成4条口令,依次使用这四条口令即可进行登录

4. 多个客户端同时登录的情况

可以看到两个客户端同时连接服务器,都成功进行了登录

5. 日志查看功能:

生成log.txt文件,将日志内容添加到文件中

实验源码

基于S/Key协议的身份认证系统设计与实现

猜你喜欢

转载自blog.csdn.net/qq_51235856/article/details/130547215