Kerberos4简单复现
文章目录
- 前言
- 一、设计参考资料
- 二、具体设计
- 1.数据传输字段
- 2.主程序介绍
- 总结
前言
完成Kerberos4的简单以面向对象的程序设计复现,设计实现是按照csdn博客参考的,与书本上的kerberos4有一点区别,但整体的设计(三次认证以及交互密钥使用)差不多。
一、设计参考资料
主要参考的是csdn上博主写的转到连接,里面的交互图很清晰,很适合初学者学习。
基于博客内容,完成了整个系统的实体序列图如下,由于是草稿手绘,部分地方细节不完善
二、具体设计
1.数据传输字段
因为是模拟,传输全部以String类型格式,不同块以分割,块内以;分割。代码如下:
public String forward_as_req() throws Exception {
String as_req = this.userName +";"
+this.IP+";"+ this.Timestamp;
System.out.println("第一次认证");
System.out.println("Client发送as_req: "+as_req);
return as_req;
}
2.主程序介绍
提供两个主程序,Kerberos4Runner和AuthenticationSystem。Kerberos4Runner模拟单个用户传输流程,AuthenticationSystem提供多个用户一起认证。
代码如下(示例):
public static void main(String[] args) throws Exception {
AuthenticationSystem authSystem = new AuthenticationSystem("ID1", "138.121.41.4");
// 新增用户
authSystem.addClient("用户1", "120.0.0.1");
authSystem.addClient("用户2", "120.0.0.2");
authSystem.addClient("用户3", "120.0.0.3");
authSystem.performAuthentication();
}
/*
第一次认证部分
Client——AS
*/
String as_req = client.forward_as_req();
String as_rep = as.receivedAsReq(as_req);
client.receivedAsRep(as_rep);
/*
第二次认证
*/
String TGS_req = client.forward_tgs_req();
String TGS_rep = tgs.receivedTGS_req(TGS_req);
client.receivedTgsReq(TGS_rep);
总结
遇到的困难在于理清楚这个协议的认证流程,在画出时序图之后基本上就是简单的敲代码了。后期可以改进部分包括初始化过程中各实体的密钥的存储和服务资源的存储以及字段格式的重新设计。源代码发布到gitee,源代码地址。