基于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协议的身份认证系统设计与实现

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THE WHY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值